4. 故障诊断基础

在MCU硬件自检与故障诊断中,很多工程师会把“故障”“错误”“失效”混为一谈,导致测试用例设计、日志记录和根因分析出现偏差。三者描述的是同一异常链条上的不同阶段:故障是系统内部潜在的物理或逻辑缺陷;错误是故障被激活后产生的错误状态或错误数据;失效是错误传播到系统边界,导致功能或性能不再满足规定要求。理解这条链路,是设计自检覆盖率和诊断策略的前提。

一、核心概念:从缺陷到功能丧失

以MCU的SRAM单元为例:某一位存储单元因工艺缺陷存在间歇性翻转倾向,这是故障;当程序写入数据后该位发生翻转,读回值与写入值不一致,这是错误;如果该错误数据被CPU用于控制PWM占空比,导致电机转速异常,系统输出不再满足规格,这就是失效。可见,故障是原因,错误是中间状态,失效是可观测的后果。

  • 故障(Fault):硬件或软件中存在的缺陷、损伤或异常条件,可能尚未被激活。例如焊点裂纹、时钟抖动超限、Flash位翻转倾向。
  • 错误(Error):故障被激活后,系统内部出现的错误状态或错误数据。例如寄存器值错误、校验失败、状态机进入非法状态。
  • 失效(Failure):错误传播到系统外部,导致规定功能无法完成或性能指标超差。例如MCU复位、通信中断、控制输出错误。

诊断要点:自检的目标不是直接消除所有故障,而是在错误传播为失效之前,尽可能早地检测、定位并隔离错误。因此,诊断指标必须同时关注故障覆盖率、错误检测延迟和失效避免率。

二、故障模型:把无限缺陷抽象为可分析对象

物理缺陷形态无穷,但诊断算法只能针对有限模型。MCU硬件自检中常见的故障模型包括:

故障模型 典型对象 表现 自检手段
固定故障(Stuck-at) GPIO、总线、寄存器位 信号恒为0或1 写1读0、写0读1
桥接故障(Bridging) 相邻PCB走线、引脚 两信号短路,逻辑互扰 交替翻转、边界扫描
开路故障(Open) 焊点、连接器、键合线 信号浮空或中断 上拉/下拉读取、连通性测试
瞬态故障(Transient) SRAM、Flash、时钟 偶发位翻转、时序抖动 ECC、CRC、多次采样
老化故障(Aging) 电源、时钟、模拟前端 参数漂移、阈值偏移 ADC基准比对、温度监测

选择故障模型时,要结合MCU的实际失效机理。例如汽车电子更关注瞬态故障和老化故障,而消费类MCU可能更关注焊接开路和ESD导致的固定故障。

三、故障传播路径:错误如何到达系统边界

故障传播路径描述了从故障激活到失效发生的完整链路。以MCU内部SRAM位翻转为例,其传播路径可表示为:

物理缺陷(SRAM单元弱化)
  → 故障激活(写入后位翻转)
  → 错误状态(读回数据错误)
  → 错误传播(CPU使用错误数据)
  → 失效(控制输出异常 / 系统复位)

在硬件自检中,我们通常会在路径的某个节点插入检测点。检测点越靠近故障源,诊断延迟越小,但覆盖范围越窄;检测点越靠近系统边界,覆盖范围越广,但可能已经产生不可逆后果。因此,合理的诊断架构是分层布点:

  • 源头检测:ECC、CRC、看门狗喂狗窗口,直接检测存储和时序错误。
  • 传播拦截:总线校验、寄存器回读、状态机合法性检查,阻止错误数据继续流动。
  • 边界确认:输出回采、通信超时、安全关断,确保失效不会到达执行器。

故障传播路径分析的价值在于:它帮助我们把“测什么”转化为“在哪测、测多快、测多准”。没有路径分析的自检,往往只是零散测试项的堆砌。

四、诊断指标:用数据衡量诊断能力

诊断指标是评估自检方案是否有效的量化依据。MCU硬件自检中常用的指标包括:

  • 故障覆盖率:被检测到的故障占全部假设故障的比例。例如SRAM March C算法对固定故障覆盖率可达95%以上。
  • 错误检测延迟:从错误产生到被检测到的时间。延迟越短,错误传播越少。
  • 误报率:正常状态下被误判为故障的概率。过高会导致不必要的停机。
  • 漏报率:实际故障未被检测到的概率。与故障覆盖率互补。
  • 诊断分辨率:能否定位到具体单元、模块或通道。分辨率越高,维修越精准。
  • 失效避免率:在错误传播到系统边界前被成功拦截的比例。

这些指标之间存在权衡。例如提高故障覆盖率通常会增加测试时间,从而增大错误检测延迟;降低误报率可能要求更宽松的阈值,从而增大漏报率。因此,诊断策略需要根据安全等级和可用性目标进行平衡。

五、案例与误区复盘

案例:某工业控制器在运行中偶发复位。初步排查发现看门狗超时,但未找到根因。按照故障传播路径分析:电源纹波导致时钟抖动(故障)→ 时钟频率瞬时偏移(错误)→ CPU取指错误(错误传播)→ 看门狗未及时喂狗(失效)。最终在电源和时钟检测点增加自检,问题得以定位。

常见误区:

  1. 把失效当故障:只看到复位,却不去追溯错误状态和物理缺陷,导致反复更换芯片仍无法根治。
  2. 故障模型选择过窄:只测固定故障,忽略瞬态故障和老化故障,导致现场偶发问题无法复现。
  3. 忽视传播路径:检测点全部堆在系统边界,错误已经造成输出异常才报警,失去预防意义。
  4. 指标单一:只追求故障覆盖率,忽略检测延迟和误报率,导致自检系统本身影响正常功能。

诊断指标必须与安全目标对齐。对于高安全等级场景,失效避免率和错误检测延迟往往比单纯的故障覆盖率更关键;对于可维护性场景,诊断分辨率则更为重要。

故障 → 错误 → 失效 传播路径与分层检测点 故障 Fault 物理缺陷 / 逻辑缺陷 SRAM弱化、焊点裂纹 激活 错误 Error 错误状态 / 错误数据 位翻转、校验失败 传播 失效 Failure 功能丧失 / 性能超差 复位、通信中断 分层检测点 源头检测 ECC / CRC / 看门狗窗口 传播拦截 总线校验 / 寄存器回读 边界确认 输出回采 / 安全关断 诊断指标 故障覆盖率 · 错误检测延迟 · 误报率 · 漏报率 · 诊断分辨率 · 失效避免率 目标:在错误传播为失效之前,尽早检测、定位并隔离

总结来看,故障、错误、失效构成了一条从内部缺陷到外部功能丧失的因果链。故障模型帮助我们抽象缺陷,传播路径帮助我们布置检测点,诊断指标帮助我们量化能力。只有把三者结合起来,MCU硬件自检才能从“碰运气测试”走向“可设计、可度量、可改进”的系统工程。