第二章 TC3xx 硬件安全机制(一):CPU 自检(LBIST)、内存自检(MBIST)、时钟与电源监控

各位工程师朋友,大家好。今天我们聊聊 TC3xx 里最基础的几个硬件安全机制。说实话,这些机制在芯片手册里占了很大篇幅,但很多人只是匆匆扫一眼。我刚开始接触 AURIX 时,也觉得这些自检是「例行公事」,直到在项目里踩了坑,才明白它们有多重要。

这一章,我们聚焦三个核心模块:CPU 逻辑自检(LBIST)内存自检(MBIST),以及时钟与电源监控。它们就像汽车里的「每日安检」—— 你不想每天做,但不做心里不踏实。

2.1 CPU 自检(LBIST)—— 给内核做一次「体检」

LBIST,全称 Logic Built-In Self-Test。说白了,就是让 CPU 自己给自己做一次全面的逻辑测试。你想想看,芯片上电后,你怎么知道里面的几亿个晶体管都工作正常?靠外部测试设备?不现实。所以英飞凌在芯片内部就集成了这个测试引擎。

它是怎么工作的?

LBIST 的核心思想很简单:向 CPU 内部的逻辑电路注入一组测试向量,然后捕获输出,和预期值做比较。如果匹配,说明逻辑功能正常;如果不匹配,说明有硬件故障。

具体来说,TC3xx 的 LBIST 基于 STUMPS 架构(Self-Test Using MISR and Parallel SRSG)。嗯,这个名字有点拗口,但你只需要记住两个关键组件:

  • PRPG(伪随机模式生成器):生成测试向量,就像一把万能钥匙,试图打开所有可能的逻辑门。
  • MISR(多输入特征寄存器):压缩测试结果,生成一个唯一的「签名」。如果签名和预期一致,测试通过。

关键点:LBIST 不是跑一遍就完事了。在功能安全场景下,通常需要在每次上电后执行,而且测试覆盖率必须达到一定阈值(比如 90% 以上)。ISO 26262 对 ASIL-D 等级的要求非常严格,LBIST 的故障覆盖率必须经过量化分析。

我在项目中遇到过什么?

有一次,客户反馈说他们的 TC397 在低温环境下偶尔启动失败。排查了很久,最后发现是 LBIST 的测试时间窗口设置得太短,导致在低温下逻辑门的延迟变大,测试向量没来得及传播完就被截断了。嗯,这里要注意:LBIST 的测试频率和温度相关。我建议你在做 DV(设计验证)时,一定要覆盖全温度范围。

个人习惯:我一般会在 LBIST 完成后,读取一下 LBIST_SIGNATURE 寄存器,和芯片手册里给出的参考值做对比。如果签名不一致,哪怕只差一个 bit,我也会标记为故障。别嫌麻烦,这个签名就是你的「安全指纹」。

2.2 内存自检(MBIST)—— 别让 RAM 里的数据「静默损坏」

MBIST,Memory Built-In Self-Test。它专门用来检测 RAM 和 ROM 的物理故障。你想想看,如果程序跑着跑着,某个内存 bit 突然 stuck-at-0 了,那后果可能是灾难性的。尤其是安全气囊的控制逻辑,如果因为内存故障导致误触发或不触发,那可不是闹着玩的。

MBIST 的测试模式

TC3xx 的 MBIST 支持多种测试算法,最常用的是 March C- 算法。这个算法会按照特定的顺序对每个内存单元进行读写操作,比如:

  1. 先写 0,再读 0
  2. 再写 1,再读 1
  3. 反向操作一遍

通过这种模式,可以检测出 stuck-at、transition、coupling 等多种故障类型。

故障类型 描述 MBIST 能否检测
Stuck-at-0/1 某个 bit 永远固定为 0 或 1
Transition fault bit 从 0 变 1 或从 1 变 0 时失败
Coupling fault 一个 bit 的变化影响了相邻 bit 能(March C- 可覆盖)
Address decoder fault 访问地址 A 时,实际访问了地址 B

避坑指南:我曾经在一个项目中,MBIST 测试总是报错,但换一颗芯片就好了。后来发现是 PCB 布局导致的内存供电噪声过大,影响了测试结果。所以,MBIST 失败不一定就是芯片坏了,也可能是你的电源设计有问题。我建议你在做 MBIST 之前,先确保电源纹波在规格范围内。

警告:MBIST 会破坏内存中的原有数据!因为它要对每个单元进行读写操作。所以,必须在系统初始化阶段、在加载任何关键数据之前执行 MBIST。如果你在运行时执行 MBIST,记得先保存上下文,或者使用 TC3xx 提供的「后台 MBIST」模式,它可以在不影响 CPU 运行的情况下测试部分内存。

2.3 时钟与电源监控—— 系统的「心跳」和「血液」

时钟和电源,是芯片正常工作的基础。如果时钟频率漂了,或者电压跌了,那 CPU 再聪明也没用。TC3xx 提供了专门的监控模块,来确保这两者始终在安全范围内。

时钟监控(SMU 中的时钟监测)

TC3xx 内部有一个 时钟监测单元(CMU),它会实时比较主时钟和备用时钟(比如内部振荡器)。如果主时钟频率偏离了设定值(比如超过 ±5%),CMU 就会触发报警。

为什么会发生时钟漂移?最常见的原因是 晶振老化温度变化。我记得有一个项目,设备在高温环境下运行几天后,CAN 通信突然中断。排查后发现是晶振的频率偏移超过了 CAN 协议的容差范围。从那以后,我养成了一个习惯:在高温老化测试中,一定要监控 CMU 的状态寄存器

电源监控(SMU 中的电压监测)

TC3xx 内部集成了多个 电压监测器(VMON),分别监控不同的电源域:

  • VDD(核心电压):通常为 1.3V,监控是否过压或欠压。
  • VDDM(内存电压):通常为 1.3V,监控内存供电。
  • VDDP3(IO 电压):通常为 3.3V,监控 IO 供电。

每个监测器都有可编程的阈值和滤波时间。比如,你可以设置 VDD 低于 1.2V 持续 10 微秒就触发中断。这个滤波时间很重要,因为电源本身就有纹波,如果设置得太短,会频繁误报;设置得太长,又可能漏掉真正的故障。

我的建议:在项目初期,先不要设置太严格的阈值。我一般会先让系统跑起来,然后通过 SMU 的日志功能记录一段时间的电压波动情况,再根据实际数据来调整阈值。这样既不会误报,也不会漏报。

时钟和电源监控的联动

在实际系统中,时钟和电源故障往往是关联的。比如,电源电压下降可能导致 PLL 失锁,进而导致时钟频率异常。所以,TC3xx 的 SMU(安全管理单元)允许你将多个故障源组合成一个 故障反应。例如:

  • 如果 CMU 检测到时钟故障,同时 VMON 检测到电压过低,则直接触发系统复位。
  • 如果只是时钟短暂抖动,则只产生一个报警,让软件来处理。

这种灵活的配置,让你可以根据系统的安全等级来定制故障响应策略。说白了,就是「小问题自己消化,大问题直接停车」。

小结

这一章我们聊了 LBIST、MBIST 和时钟电源监控。它们都是 TC3xx 硬件安全机制的「基本功」。你可能会觉得这些内容有点枯燥,但相信我,在真正的功能安全项目中,这些机制就是你最可靠的伙伴。

下一章,我们会深入探讨 SMU(安全管理单元)ECC(纠错码),看看这些硬件模块是如何协同工作的。到时候我会分享一个我亲身经历的「ECC 误报排查」案例,保证让你印象深刻。

好,今天就到这里。如果你在实际项目中遇到什么问题,欢迎随时交流。