gzyueqian
13352868059

嵌入式开发:设计安全关键嵌入式系统 — 在运行时检测SRAM故障的挑战

更新时间: 2023-01-12 10:19:23来源: 粤嵌教育浏览量:6842

在设计安全关键系统时,国际安全标准对于我们选择合适的流程和适当的技术来检测和避免最终产品中的危险故障至关重要,这些标准确保我们不会像之前的嵌入式开发工程师一样陷入同样的困境。

 

然而,这些标准的危险在于,它们假设你对底层硬件(如微控制器)有详细的了解,这可能会导致经验不足的安全工程师实施不安全的设计。例如,IEC(国际电工委员会)60730标准建议使用棋盘式存储器测试来检测B类软件的可变存储器中的DC故障,这比看起来更具挑战性。

 

本文描述了SRAM的逻辑布局和物理布局之间未记录的差异如何导致我们无意中错误地实现了诸如棋盘算法之类的内存测试。标准微控制器的数据表中通常没有必要的信息,但幸运的是,内存测试算法不受SRAM逻辑和物理布局之间差异的影响。

 

在运行时测试SRAM的缺陷

SRAM存储器显然是由IC供应商在生产中进行测试的,有缺陷的产品不会运送给消费者。尽管如此,在IC的使用寿命期间,随机硬件缺陷可能会出现,这也是在嵌入式开发安全关键应用中需要在运行时测试微控制器中硬件的原因之一。

 

棋盘式记忆测验

IEC 60730H.2.19.6.1)等安全标准建议,对于必须符合B级安全等级的应用,可以使用棋盘算法来识别SRAM中的某些缺陷(DC故障)。通常选择棋盘测试,因为它覆盖了SRAM中最可能的故障,而且速度相对较快,便于将对应用程序本身的性能影响降至最低。除了DC故障(一个比特永久地处于高位或低位)外,棋盘算法还可以检测相邻比特相互影响的缺陷。

 

SRAM在逻辑上由多个按字组织的位组成。这些字通常为8位、16位或32位宽,但也可以更长。物理上,这些位被组织成阵列,其中每个位通常有八个相邻的位(见图1)。位中的物理缺陷可能会影响单个位,使其处于高位或低位(DC故障),或者缺陷可能是两位分离,在这种情况下,相邻的侵略单元(图1中用紫色标记)可能会影响受害单元(图2中用黄色标记)。攻击者受害者场景通常被称为耦合故障。从统计上看,DC故障更可能发生,但它仍然与检测最可能的耦合故障相关。

1-相邻位之间的潜在耦合故障

 

如果故障正在影响单个位,因此该位一直处于高位或低位,则可以通过写入值1,通过读回验证1,然后写入值0并读回验证0来揭示故障,如图1所示。另一方面,嵌入式开发如果缺陷是两个相邻位之间的耦合故障,例如第2行中的位列910,则某些模式(例如全1或全0)将不会显示耦合故障,因为在测试期间单元具有相同的值。

 

相邻单元(侧面、上方和下方)的这种耦合故障具有相反的二进制值。图1(右下)说明了第10位中的一位污染了第9位,由于第9位未保持预期值零,因此显示了耦合故障。

 

SRAM的物理布局与逻辑布局

 

为了使棋盘算法工作,需要知道哪些位是相邻位。这是一个问题,因为数据表通常只描述SRAM的逻辑布局,而不描述SRAM是如何物理组织的。

 

为了理解SRAM的物理布局,必须区分一次可以访问一个位的面向位存储器(BOM)和一次读写n位字的面向字存储器(WOM)。虽然大多数真实世界的内存都是以WOM的形式实现的,但科学文献中的经典内存测试算法通常采用BOM实现。

 

对于WOM存储器,构成字的位的物理组织有三大类:相邻、交错和子阵列。虽然逻辑布局将每个单词放在同一列中的前一个单词下面(类似于地址空间),但相邻的内存将每个单词放置在同一行中,如图2所示。交错结构将字的每个位分离到SRAM阵列的不同列和行中。最后,子阵列组织将一个字的每个位放置在SRAM的不同物理分离块中。现实情况是,在嵌入式开发中,你不知道正确执行棋盘测试所需的物理布局。

2-面向单词的存储器的物理布局示例

 

棋盘测试的特点和缺点

 

用于实现棋盘式算法的简单方法是交替地将值0xAA(假设为8位数据字)写入第一个地址,并将0x55写入下一个地址。然后验证该模式以检测相邻小区之间的任何DC或耦合故障。然后使用逆模式重复该过程。如前所述,有一个陷阱:内存逻辑布局中的棋盘图案可能不是底层物理布局中的一个棋盘图案,如图3所示。

3-逻辑与物理SRAM的数据模式。

 

补偿逻辑布局和物理布局之间的差异似乎很明显,但设备数据表中很少提供必要的信息。那么,你是做什么的?接受较低的覆盖范围,毕竟,诊断仍将覆盖DC故障和相邻位之间的一些耦合故障?向IC供应商请求布局,并为每个设备定制棋盘测试?或者选择其他算法?

 

既然你已经意识到棋盘测试的潜在缺点,你就可以做出明智的决定了。

 

SRAM运行时测试的替代算法

IEC 60730中针对C级安全级别提出的内存测试技术具有更高的故障检测覆盖率,但这些算法属于可被视为生产测试算法的算法:它们运行时间更长,也检测到更罕见的故障类型,但通常会破坏存储在SRAM中的数据,因为它们在整个SRAM上运行,而不是在子块中运行。

 

一般来说,对于我们的嵌入式开发设计,我们不能很好地容忍这种情况。因此,我们建议你考虑改编自生产测试March算法的混合March算法:这些算法在WOM优化实现中可用,并提供高测试覆盖率。此外,这些混合March算法可以实现为在SRAM的较小重叠部分上运行,以避免一次擦除SRAM中的所有数据,这意味着可以避免嵌入式系统的重新启动。March算法的缺点是,它们比传统的棋盘算法计算量更大,但这是安全关键系统中可能需要的开销。

免费预约试听课