为了实现某个ECU的功能,分为底软、硬件、APP等实现,而安全机制绝大多数功能是基于底软和硬件实现的。
其中硬件安全机制基于不同的芯片平台差异不同,因此需要掌握整体的设计思路,才能在不同的芯片平台找到平衡。
在E/E系统中硬件主要包括
如D4处理单元,安全机制如下:
安全机制分类:
-
自检——>软件自检,硬件自检
-
硬件冗余——>双MCU硬件冗余,单MCU硬件冗余
-
看门狗
-
程序流监控
为了达到安全目标,SOC中常采用的硬件安全机制:
-
ECC内存保护
-
看门狗定时器
-
软件自检
-
双核锁步
ECC内存保护:
纠错码 (ECC) 可用于存储器接口,例如:指令本地 SRAM 或高速缓存、数据本地 SRAM 或高速缓存以及高速缓存标签存储。在系统级别,您可以监控 ECC 错误信息。对 32 位字计算 7 位 ECC 综合症,自动纠正单比特存储器数据错误,而对于多位错误,则发出异常信号。
看门狗定时器WDT
用于监视微控制器 (MCU)程序,查看它们是否失控或停止运行,充当监视MCU 操作的“看门狗”。
看门狗有三种工作模式
-
计时模式(Time out mode)
-
时间窗模式(Window mode)
-
问答模式(Q&A mode)
看门狗的诊断覆盖率
1.WWDT窗口/时间看门狗
首先被监控的控制器(MCU)必须在Open Window期间内触发(就是指喂狗操作),喂狗可以通过 WDI 引脚上的下降沿或通过 SPI 命令写入寄存器 WWDSCMD,具体取决于配置。触发后将终止“Open Window”。看门狗输出指示 WWD 故障计数器的“有效”或“无效”WWD 触发。
如果有效触发,则启动“Closed Window”。如果在“Open Window”期间没有触发或在“Closed Window”期间触发,看门狗输出指示“无效 WWD 触发”到 WWD 失败计数器,并启动新的“Open Window”。
2.Functional Watchdog(FWD)功能看门狗或问答看门狗
在稳定状态下,会生成一个问题(从表中取出),同时心跳计数器从零开始计数。心跳计数器开始计数,直到心跳周期结束。心跳周期的持续时间可以通过 SPI 命令进行设置和调整。
问题由 4 bits组成,预期答案由 4 个回复组成,每个回复为 8 位。这四个回复应在心跳周期结束之前发送。最后回复应写入同步回复寄存器以重置心跳计数器。
Functional Watchdog的问题与回复
程序流监控
程序流监控的本质是看门狗,用于检查程序是否按照预期的执行顺序执行。如果监控实体以不正确的顺序执行,或在规定的截止时间或时间窗内没有被执行就出现不正确的程序流。
可以在功能安全相关的一个或多个监测实体中按照程序预期的执行顺序设置一个或多个Checkpoint,如果在特定的时间限制内,Checkpoint没有被依次执行,则会触发相应的复位或错误处理机制。
软件自检
对安全相关路径中的使用到的指令,利用预先设置好或自动生成的数据或代码,对物理存储(例如,数据和地址寄存器)或运算器及控制器(例如,指令解码器),或者它们两者进行检测。
使用逻辑内置自检BIST),硬件测试一部分逻辑,检测静态故障,同时在芯片中增加约5%的开销,并在几毫秒内运行,通常产生90%的故障覆盖率。逻辑 BIST 可以在启动时运行,然后报告检测到的任何故障。
使用软件自检没有硬件开销,因为它只是在不同时间测试逻辑的软件,例如定期运行时检查。ISO 26262 将软件自检列为随机故障的安全机制,具有中等诊断覆盖率。
硬件冗余
通过硬件冗余(基于时间的冗余或硬件冗余),可以实现更高的容错能力。内存的 ECC 就是一个例子,可以添加三冗余投票触发器、关键状态寄存器 (CSR) 的奇偶校验保护,或者处理器使用双核锁步 (DCLS)
双核锁步
双核: 两个相同的核镜像,90°旋转,隔离设计,间距100um。
锁步:两个核运行相同程序并严格同步,一个输入延迟,另外一个输出延迟,延迟时间一般为2-3个时钟周期,计算结果利用比较逻辑模块进行比较,检测到任何不一致时,就会发现其中一个核存在故障,但不会确定是哪个核故障。
双核锁步(DCLS)是指对安全关键型的核心处理模块(CPU、DMA等)进行复制,在每一个时钟周期对双核的输出进行比较,在检测到差异时输出alarm给到safety island(安全岛),以供系统按照设定好的配置执行外部动作(errorpin)或内部动作(复位、中断)。
感兴趣的可以加入知识星球
微信入群
原文始发于微信公众号(凯文的汽车之旅):【功能安全】硬件常用安全机制