0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

在运行时检测SRAM故障的挑战

星星科技指导员 来源:嵌入式计算设计 作者:Henrik Nyholm,Jacob 2022-10-25 09:36 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

作者:Henrik Nyholm,Jacob Lunn Lassen

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

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

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

在运行时测试 SRAM 是否存在缺陷

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

棋盘记忆测试

IEC 60730 (H.2.19.6.1) 等安全标准表明,对于必须符合 B 类安全级别的应用,可以使用棋盘算法来识别 SRAM 中的某些缺陷(直流故障)。通常选择棋盘测试,因为它涵盖了SRAM中最可能的故障,并且相对较快,这便于最大限度地减少对应用本身的性能影响。除了直流故障(位永久卡在高处或低位)之外,棋盘算法还可以检测相邻位相互影响的缺陷。

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

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

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

诸如相邻单元(侧面,上方和下方)之类的耦合故障具有相反的二进制值。图 1(右下角)说明了位 10 中的位污染了位 9,并且由于位 9 不保持预期值 0,因此揭示了耦合故障。

SRAM 的物理与逻辑布局

要使棋盘算法正常工作,需要知道哪些位是相邻位。事实证明,这是一个问题,因为数据手册通常只描述SRAM的逻辑布局,而不是SRAM的物理组织方式。

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

对于口碑存储器,构成单词的位的物理组织有三个主要类别:相邻、交错和子数组。逻辑布局将每个单词放在同一列中前一个单词的下面(类似地址空格),但相邻的记忆将每个单词放在同一行中,如图 2 所示。交错架构将单词的每个位分隔到SRAM阵列的不同列和行中。最后,子阵列组织将单词的每个位放在SRAM的不同物理上独立的块中。现实情况是,您不知道正确实施棋盘测试所需的物理布局。

图 2 - 面向单词的记忆的物理布局示例。

棋盘测试的性能和缺点

实现棋盘算法的简单方法是交替地将值0xAA(假设是8位数据字)写入第一个地址,并在下一个地址中0x55,直到所有被测地址都用1和0的棋盘模式填充。然后验证该模式以检测相邻单元之间的任何直流或耦合故障。然后使用反向模式重复该过程。如前所述,有一个问题:内存逻辑布局中的棋盘模式可能不是底层物理布局中的棋盘模式,如图 3 所示。

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

补偿逻辑和物理布局之间的差异似乎是显而易见的,但在器件的数据表中很少提供必要的信息。那么,你该怎么办?接受较低的覆盖范围,毕竟诊断仍然会覆盖直流故障和相邻位之间的一些耦合故障吗?向IC供应商请求布局,并为每个器件定制棋盘测试的实现?或者选择其他算法?

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

用于 SRAM 运行时测试的替代算法

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

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

如果您考虑将传统的棋盘测试与March测试交换,则可以从一些微控制器供应商处找到此类实现。Microchip是提供March C-算法的性能优化实现的公司之一,作为其软件诊断库的一部分。Microchip实现支持整个SRAM的测试,通常在启动时完成,以获得最大的测试覆盖率,以及更小的内存块的测试,旨在减少对应用的实时影响。

审核编辑:郭婷

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 微控制器
    +关注

    关注

    48

    文章

    8249

    浏览量

    162371
  • 存储器
    +关注

    关注

    39

    文章

    7714

    浏览量

    170850
  • sram
    +关注

    关注

    6

    文章

    808

    浏览量

    117221
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    使用Nuclei Studio IDE计算程序运行时

    在使用Nuclei Studio IDE进行程序运行时,我们想知道我们编写的程序运行时间有多长怎么办呢?可以选择调用IDE里面时间记录函数_gettimeofday(),该函数用于记录程序运行到本
    发表于 10-28 08:25

    怎么实现一套容器运行时,并符合OCI规范?

    如题,怎么实现一套容器运行时,并符合OCI规范
    发表于 10-10 07:35

    装置日常运行时的安全防护检查有哪些注意事项?

    装置日常运行时的安全防护检查,核心原则是 “安全优先、不影响生产、快速识别风险”—— 既要避免因检查操作引发触电、停机等事故,也要高效捕捉运行中的动态隐患(如过热、防护松动)。以下是需重点关注的 8
    的头像 发表于 09-23 16:33 749次阅读

    MTB如何在运行时介入Jlink调试器?

    目前我们的应用程序在运行时会偶发死机现象,有没有办法能够在CYW43907芯片不复位的情况下介入调试器,查看导致死机的问题
    发表于 07-08 07:46

    PLC设备运行时间数据采集到运维管理平台如何实现

    在工厂设备管理工作中,往往需要统计各个设备的运行时间,能够衡量其运行性能,主要为了方便管理人员对设备进行定期维护,以保障设备处于稳定高效的运行状态,减少故障停机导致生产停工的问题。 对
    的头像 发表于 06-20 16:02 575次阅读
    PLC设备<b class='flag-5'>运行时</b>间数据采集到运维管理平台如何实现

    步进电机在高速运行时反电动势波形与其动态响应变化

    步进电机高速运行时,反电动势幅值增大、频率升高,导致电流建立延迟、扭矩下降及动态响应滞后。所以在步进电机高速运行的方案中,我们需要通过优化电机选型(如低电感、适中极数)、升压驱动及BEMF反馈控制,可缓解高速性能衰减,避免PWM饱和导致的扭矩崩溃。
    的头像 发表于 06-10 16:06 1190次阅读
    步进电机在高速<b class='flag-5'>运行时</b>反电动势波形与其动态响应变化

    可以在运行时通过微控制器配置CCG2 C型板吗?

    我可以在运行时通过微控制器配置 CCG2 C 型板吗?
    发表于 05-07 07:24

    将ADAU1701超频到98MHZ,运行时出现爆音怎么解决?

    我将ADAU1701超频到98MHZ,我的设置是PLLmode0、1都为1,输入mclk49M,在192k采样率下执行512条指令,运行时出现爆音。
    发表于 04-15 07:58

    使用STM32F407ZGT6芯片做小车主控时,总是在运行时芯片突然被锁,无法下载程序怎么解决?

    在使用STM32F407ZGT6芯片做小车主控时,总是在运行时芯片突然被锁,无法下载程序。 使用STM32 ST-LINK Utility也无法解除保护
    发表于 03-11 06:20

    在Windows上安装OpenVINO™运行时遇到错误怎么解决?

    已在 Windows* 上安装OpenVINO™运行时。 配置环境变量。 遇到错误: Location is not available.
    发表于 03-05 09:13

    无法在ONNX运行时加载OpenVINO™中间表示 (IR),为什么?

    无法在 ONNX运行时加载OpenVINO™中间表示 (IR)
    发表于 03-05 09:07

    运行时OpenVINO™找不到模型优化器,为什么?

    在运行时OpenVINO™找不到模型优化器,运行模型下载程序命令并收到错误消息: omz_downloader:找不到命令
    发表于 03-05 08:16

    为了防止dlpc350在运行时中断,如何去校验是否还在和电脑进行连接?

    大家好, 我有2个问题想请教各位大佬 1:为了防止dlpc350在运行时中断,如何去校验是否还在和电脑进行连接? 我想做一个线程隔一段时间就去访问以下它的连接状态,求大佬指点 2:如果重连复选usb已被占用,该如何处理?使用什么方法可以重连(在不拔掉usb的情况下)? 非常感谢你们的帮助
    发表于 02-20 08:40

    智能电机控制装置如何最大限度地提高恢复能力和正常运行时

    机器恢复能力和正常运行时间的智能电机控制装置。 这些应用中的电机控制装置必须能够控制并保护 75 马力 (HP) 至 700 马力的电机。为实现弹性运行,需要对机器进行全方位的保护,包括过载保护、接地故障保护和相位不平衡保护等。
    的头像 发表于 01-25 16:40 1273次阅读
    智能电机控制装置如何最大限度地提高恢复能力和正常<b class='flag-5'>运行时</b>间

    Bun 1.2震撼发布:全力挑战Node.js生态的JavaScript运行时新星

    《2024 中国开源开发者报告》正式发布 JavaScript 运行时新秀 Bun 发布 1.2 版本,这是自去年 4 月发布 1.1 以来最重要的一次更新。 此次更新不仅大幅提升
    的头像 发表于 01-24 10:42 1323次阅读
    Bun 1.2震撼发布:全力<b class='flag-5'>挑战</b>Node.js生态的JavaScript<b class='flag-5'>运行时</b>新星