Fault Injection 实战案例 — 8 类典型 SM 的 Campaign 设计
本质与导读
本质 Fault injection 方法论只讲"怎么做",实战卡在每类 SM 的 campaign 各不相同:SM 靠什么物理机制检故障(码距 / 时间冗余 / 时间窗 / 值域先验 / 参考计数),就决定了该注什么故障、注在哪、怎么判通过、期望 DC 是多少——套通用流程必失真。本页给 8 类高频 SM 可直接填进 ASIL D Confirmation Review 的 campaign 设计,外加两件方法论必需品:统计口径(零失败 299 trials 即证 DC ≥ 99% @ 95% 置信度,别错用 ±1% 估计公式的 ~16600)和一个 S32K344 + FS26 challenger 看门狗的端到端 worked campaign(FTTI 10 ms,实测最坏 4.24 ms)。
1. Campaign 的通用骨架:六要素 + 统计基础
所有 FI campaign 回答同一组问题,但答案逐 SM 不同。ISO 26262-5:2018 §10(硬件集成与验证)Table 11 把 fault injection test 列为验证安全机制完整性与正确性的集成测试方法,ISO 26262-11:2018 §4.8 对半导体进一步把 FI 定位为"解析方法不足以覆盖的设计点"的检查手段——但两处都不给 campaign 怎么设计,细节要工程师自己定。骨架是六要素:注入点(物理/寄存器/总线/仿真节点)、fault model(注什么样的故障)、激活条件(故障要被 workload 用到才会传播)、注入相位(相对 SM 时间窗的时刻)、判定 oracle(什么算检出 + 反应正确)、样本量(统计上证到什么置信度)。下图把 5 类高频 SM 放进统一对照:每个 SM 的 campaign 细节不同(见各节表),但验证骨架是同一条——注入一个具体故障 → SM 在检测时间内检出 → 在 FTTI 内驱动系统进安全状态。
1.1 判定的分母:每个 trial 先做三分类
一个注入 trial 的结果不是"检出 / 未检出"两种,是三种:detected(SM 报警且反应正确)、dangerous undetected(故障传播到了输出但 SM 没反应——真正的 DC 失分项)、no effect(故障没被激活或被逻辑 mask,对照无故障的 golden run 输出完全一致)。DC 的正确算法是 detected / (detected + dangerous undetected)——no-effect 属于 safe fault,出分母。这与 ISO 26262-11 §4.8 的 FI 仿真故障分类思路一致。把 no-effect 记成"未检出"会人为压低 DC(常见于 lockstep,见 §3),把它一律记成"检出"又会虚高——两个方向都在审计时翻车。分类的代价是每个 trial 要跑一次 golden run 对比,这是 campaign 自动化框架的必备件,不是可选项。
1.2 样本量:估计公式 vs 证明公式,别混用
两个不同的统计问题经常被混成一个。估计:想把 DC 的真值估到 ±E 精度,用比例区间公式,p 未知时取最坏 0.5:
证明(验收更常用):只需证 DC ≥ 目标值,零失败法(success-run theorem)给出的 N 小得多:
取置信度 C = 95%、目标 DCmin = 99%:,即 299 个 trial 全部检出即证得;若出现 1 个 miss,按 Clopper-Pearson 单侧界重算,N 涨到 473。两套口径对照:
| 统计问题 | 条件 | 所需 N |
|---|---|---|
| 估计 DC ±5%,90% 置信 | 最坏 p=0.5 | 271 |
| 估计 DC ±5%,95% 置信 | 最坏 p=0.5 | 385 |
| 估计 DC ±2%,95% 置信 | 最坏 p=0.5 | 2401 |
| 估计 DC ±1%,99% 置信 | 最坏 p=0.5 | ~16600 |
| 证明 DC ≥ 90%,95% 置信 | 零失败 | 29 |
| 证明 DC ≥ 99%,95% 置信 | 零失败 | 299 |
| 证明 DC ≥ 99%,95% 置信 | 允许 1 miss | 473 |
工程实务:ASIL D 关键 SM 每个 fault model 类按零失败口径 ≥ 300 trials,常规 SM 100–500;"16641 次"这类数字是 ±1% 估计精度的需求,把它错当验收门槛会把 campaign 预算撑爆(见 §11.4)。
2. ECC(Memory)— 内存纠错 FI
SECDED 的检测能力来自码距,这决定了 campaign 的全部结构。典型组织是 Hamming(72,64)——64 数据 bit + 8 校验 bit,最小码距 4:1-bit 错的 syndrome 唯一指向出错位置,纠正;2-bit 错的 syndrome 非零但不落在任何合法单 bit 位置上,检出不纠;3-bit 及以上错的 syndrome 可能落回"合法单 bit 错"空间,译码器按错误的位置"纠正",产出错数据还标着 corrected(miscorrection)——这就是"3-bit DC 不承诺"的机制根源,不是工程偷懒。
注入机制上,真芯片不需要辐射源:NXP S32K3 的 EIM(Error Injection Module)可在读路径上翻转指定的数据/校验 bit,ERM(Error Reporting Module)记录事件与地址;Infineon AURIX 经 MTU 的 ECC 控制寄存器提供等价机制。关键是等价类思想:EIM 注入验证的对象是 ECC 编解码逻辑 + 上报链——同一 word 的 72 个 bit 位置 × 故障阶数就是完整等价类,cell 阵列本身的 stuck-at 归 MBIST 管(TC39x 的 MBIST 对 SRAM 阵列 100% 覆盖,Safety Manual v1.1)。把"64 Mbit × 4 fault model = 2.5 亿次穷举"当成 ECC campaign,是把两个 SM 的验证对象混在了一起。
| 维度 | 内容 |
|---|---|
| 注入点 | 读路径 data/check bit(S32K3 EIM / AURIX MTU 寄存器);RTL FI(vendor 侧) |
| Fault model | 1-bit flip(应纠 + 报)/ 2-bit flip(应检不纠)/ 3-bit(不承诺,只记录行为) |
| 等价类 | 72 个 bit 位置 × 阶数 × 若干数据 pattern × 地址采样(防 routing 差异) |
| Campaign size | 1-bit / 2-bit 各 ≥ 300(零失败口径,§1.2);3-bit 100 次只记录 |
| 期望 DC | 1-bit 100%(纠 + 报告);2-bit ≥ 99%;3-bit 不设目标,行为进 FMEDA 备注 |
| 判定 | (a) 数据结果正确或被标记 (b) ERM/SMU 事件与地址记录 (c) 反应时间 < DTI |
实战陷阱:只测"纠了"忘测"报了"。1-bit 纠正若没进 ERM/SMU 计数,退化中的 cell 就静默累积——等第二个 bit 坏,直接落进"2-bit 检不纠"甚至 miscorrection。这是 LFM 的缺口(潜伏故障未被周期上报),审计员一抓一个准。
3. CPU Lockstep — 双核冗余 FI
Lockstep 的检测物理是时间冗余 + 输出比对。以 TC397 为例,双核以 2 个时钟周期的延迟错开执行(AURIX TC39x Safety Manual v1.1)——目的是让同一个电源 glitch / EMI 事件打到两核时,两核处在不同的执行状态,产生可比对的差异而非相同的错误。比对点在核的输出接口(总线访问/写回),不是内部每个节点:没传播到比对点的故障 lockstep 看不见,但它们也没传播进系统,按 §1.1 属 no-effect、出分母。检测覆盖率的真值由 vendor 的 RTL FI 给出(TC39x:LBIST 覆盖 97.1% 触发器与组合路径,MBIST 100% SRAM,Safety Manual v1.1)——Tier-1 不重跑 RTL,Tier-1 campaign 的对象是反应链:比对报警 → SMU/FCCU → 安全态,用 alarm/fault 注入寄存器触发"假报警"走通全链。术语按 vendor 对号:NXP 叫 RCCU,TI 叫 CCM(Cortex-R5F lockstep,TMS570),Infineon 叫 lockstep comparator + SMU。
| 维度 | 内容 |
|---|---|
| 注入点 | RTL:ALU / 寄存器堆 / 总线接口(vendor 完成);应用层:SMU/FCCU alarm 注入寄存器(Tier-1) |
| Fault model | stuck-at / transition(RTL 级);假报警(反应链级) |
| 关键时序 | RTL 注入须落在 workload 会激活的周期内;no-effect 用 golden run 分类(§1.1) |
| Campaign size | RTL 统计采样(vendor,引用 Safety Manual);反应链每条 alarm 路径 ≥ 30 全过 |
| 期望 DC | ≥ 99%(比对不一致 → 报警 ≤ 2 cycles) |
| 判定 | 报警 ≤ 2 cycles;SMU/FCCU 按配置反应;安全态在 FTTI 内 |
实战陷阱:注入到 idle / 死代码 cycle 的故障既不传播也不会被检出——按"未检出"计会人为压低 DC。正确做法是 golden run 三分类后把 no-effect 剔出分母,或注入前用 workload 画像排除不激活窗口;把 vendor Safety Manual 的 structural DC 直接抄成自己应用的 specific DC 则是反方向的错(应用软件与 PCB 互联不在 vendor 报告里)。
4. Watchdog — 4 种喂狗故障 FI
Watchdog 检测的物理量是"时间行为偏离",三代机制各扩一层覆盖:simple timeout 只抓"不喂"(死机);窗口看门狗加"早喂也 trip",抓定时器跑飞变快;Q&A challenger 再加"喂的内容要算对",抓"程序还在跑但算错了"(跑飞后碰巧仍在喂狗的场景)。所以 4 种喂狗故障各对应一类真实 MCU 失效模式,少测一种 = 少覆盖一类失效。以 NXP FS26/FS85 族为参数锚(FS84/FS85C DS Rev.6 §32.4):窗口周期 1–1024 ms 离散可配(默认 3 ms),CLOSED 段占比 31.25%–68.75%;Q&A 用 16-bit LFSR(默认种子 0x5AB2)出题,bad refresh 使 WD 错误计数器 +2、good refresh −1,达 WD_ERR_LIMIT(可配 8/6/4/2)拉 RSTB;故障升级到 FS0B 由 FLT_ERR_CNT 管(§32.8.1)。
| 维度 | 内容 |
|---|---|
| 注入点 | 喂狗任务(挂起 / 改相位)+ SPI 写路径(答案篡改) |
| Fault model 4 种 | (a) 无喂:模拟死机 / (b) 早喂:CLOSED 窗内喂 / (c) 晚喂:过窗喂 / (d) 错喂:Q&A 答案错 |
| 触发时序 | 注入时刻对窗口相位均匀随机(§11.5) |
| Campaign size | 每种 ≥ 300(零失败口径,§1.2)+ 无故障 trials 验无误触发 |
| 期望 DC | 4 种 100% 按 +2/−1 计数规则演进到触发 |
| 判定 | (a) 错误计数器按规则演进 (b) 达限拉 RSTB 复位 (c) FS0B 拉低进系统安全态 (d) FTTI 内 |
实战陷阱:只测"无喂"是入门级——ASIL D 必须测全 4 种,否则 audit 时被"你的 SM 只覆盖死机不覆盖跑飞"打脸。完整端到端 campaign 见 §10。
5. ADC Plausibility Check — 跨工况 FI
Plausibility 的检测能力来自"信号与物理先验的距离",四类故障的先验强度不同,期望 DC 必然分层。超范围可检是设计出来的:ratiometric 传感器把有效输出压进诊断带内(典型有效区 0.5–4.5 V),带外(如 < 0.1 V / > 4.9 V)只可能是断线 / 短路 / 供电故障——先验距离最大,DC 最高。stuck 靠"真实物理量必然带噪声与纹波"这条先验——冷启动时信号本来就平,先验变弱,这是 stuck 检出率随工况波动的机制。漂移最难:慢漂在单通道信号空间里与真实工况变化不可分,原理上单通道检不出,必须跨通道物理一致性闭合(电流 + 电压 + 温度 + 位置互相印证)。跳变率异常靠系统物理惯量(di/dt 上限)判,是强先验。这解释了为什么 campaign 必须跨温度工况:先验强度本身是工况的函数。
| 维度 | 内容 |
|---|---|
| 注入点 | ADC 输入(HIL 模拟开关 / DAC)或 ADC 结果寄存器(SW saboteur) |
| Fault model | (a) 超范围(< 0.1 V 或 > 4.9 V)/ (b) stuck 卡值 / (c) 慢漂移 / (d) 跳变率物理不可能 |
| 工况组合 | 冷启动(-40°C)/ 室温 / 高温(+105°C)× 多个 nominal 工作点 |
| Campaign size | 4 fault × 3 温度 × 5 nominal = 60+ scenarios,关键项按 §1.2 加量 |
| 期望 DC(典型目标) | 超范围 100% / stuck 90%(冷启动降级)/ 漂移 80%(单通道上限)/ 跳变率 95% |
| 判定 | 对应 fault flag 在规定 N 个 sample 内置位,去抖计数行为与设计一致 |
实战陷阱:漂移是 plausibility 最难检的故障——和"系统真有变化"分不开。单通道阈值收紧只会换来量产误报,正解是多通道交叉(电流 + 电压 + 位置 + 时间一致性)综合判断;campaign 里对漂移的期望 DC 要按跨通道架构如实定,别写 99% 然后 FI 打脸。
6. Communication CRC + E2E — CAN 报文 FI
E2E 保护是三个正交机制的叠加,各抓一类故障,必须分开注入分别判。CRC 抓 bit corruption,数学保证是:Hamming distance 以内的错误 100% 检出,超出后随机错误的逃逸概率约 (c 为 CRC 位数)——8-bit CRC 逃逸 0.39%,16-bit 0.0015%。这就是"E2E 对 corruption 的 DC 上限"的机制来源:P01(CRC-8,SAE J1850 多项式 0x1D + 4-bit counter,经典 CAN ASIL B 档)约 99.6%,P05(CRC-16,多项式 0x1021 + 8-bit counter,CAN-FD ASIL D 主流)约 99.998%(AUTOSAR E2E Protocol Specification R23-11)。counter 抓丢帧 / 重放 / 乱序——注意 P01 的 4-bit counter 按模 15 计数(到 14 即回 0,0xF 保留跳过),恰好丢 15 的整数倍帧时 counter 看起来连续,这段盲区由 timeout 兜底(抓持续丢失)。三者的期望反应也不同:CRC/counter 错标记单帧 invalid,timeout 才进通信丢失安全态。
| 维度 | 内容 |
|---|---|
| 注入点 | CAN/CAN-FD 总线报文(CANoe + FI 手段,注意 §11.3 的 IL 陷阱) |
| Fault model | (a) CRC 错 / (b) counter 跳变(重放 / 跳号 / 回绕边界)/ (c) timeout(丢帧)/ (d) 内容篡改(值超物理范围) |
| 触发时序 | 单帧 / 连续多帧 / 间隔多帧;counter 专测回绕边界(14→0,0xF 跳过) |
| Campaign size | 4 fault × 帧组合 = 200+ scenarios,关键路径按 §1.2 加量 |
| 期望 DC(典型目标) | CRC 错 ≥ 99.6%(P01)/ counter 不连续 99% / timeout 100% / 内容超范围 ≥ 95% |
| 判定 | 接收方 (a) 单帧标 invalid 不用坏数据 (b) timeout 进通信安全态 (c) 不执行错误命令 |
实战陷阱:SecOC 加 MAC 后,CRC 错和 MAC 错是两条独立检测路径、两种反应(E2E 状态机 vs 认证失败计数)——要分别注入分别判,合并测会掩盖其中一条路径的失效。
7. Voltage Monitor — 电源监控 FI
UV/OV 监控 = 比较器 + deglitch 滤波器,而 deglitch 是故意的:比 deglitch 窗短的瞬态被滤掉是设计行为(防瞬态误动作导致整车误停),不是漏检。FS26/FS85 族 VMON 的 UV/OV deglitch 可配约 5–40 µs(FS84/FS85C DS Rev.6)——campaign 的期望值必须按 datasheet 写:spike 长于 deglitch 窗 → 期望 100% 检出;短于窗 → 期望"不动作",把它记成 miss 是把设计行为当缺陷(这类"期望值写反"会引发错误的"修复",把滤波改掉反而抬高误触发率)。真正值得花 trial 的是边界:deglitch 窗 ±20% 附近的 spike 行为是否与 DS 一致。
| 维度 | 内容 |
|---|---|
| 注入点 | ECU 主电源轨(可编程电源 + 固态开关 FI box,见 §11.6) |
| Fault model | (a) UV(< 0.85 × Vnom)/ (b) OV(> 1.15 × Vnom)/ (c) spike(长/短于 deglitch 窗各测)/ (d) sag(数 ms 掉到 0) |
| 触发时序 | 静态(稳态后注)/ 动态(MCU 任务执行中注) |
| Campaign size | 4 fault × 动静 × 幅度/宽度扫描 = 30+,deglitch 边界加密采样 |
| 期望 DC | UV/OV ≥ 99%;spike:> 窗 100%、< 窗期望不动作;sag 按响应时间预算判 |
| 判定 | SBC fail-safe 输出(RSTB/FS0B)按 DS 时序动作 + MCU 可重启进安全态 |
实战陷阱:可编程电源的 slew 率做不出 < 100 µs 的 spike——你以为在测 spike,实际注进去的是斜坡。注入波形必须示波器回读确认(§11.6)。
8. Clock Monitor — 时钟监控 FI
CMU 的原理是参考窗计数:用独立的内部 RC 振荡器开一个测量窗,数被监时钟在窗内的边沿数,超出上下限报警(NXP S32K3 的 CMU_FC;TI TMS570 用 DCC 双时钟交叉计数,原理相同)。两个物理推论直接决定 campaign 期望值:① 检测延迟 ≈ 测量窗长——窗越长频率分辨率越高但报警越慢;② 检测下限 = 参考源自身精度——内部 RC 全温典型 ±1–3%(查器件 DS),报警阈值必须开得比参考误差宽,所以参考精度以内的慢漂移原理上不可检(见 §12.2)。完全停振最容易检(窗内计数为 0,且 watchdog 兜底);占空比/抖动异常要靠别的机制(PLL 失锁指示、glitch filter),CMU 计数对它们天然不敏感。
| 维度 | 内容 |
|---|---|
| 注入点 | 主时钟输入(信号发生器替代晶振输出)或 PLL 配置篡改 |
| Fault model | (a) 完全停振 / (b) 频率漂 ±10% / (c) 漂移在参考精度内(期望不动作)/ (d) PLL 失锁 |
| 触发时序 | 启动阶段注 / 运行中注(运行中切时钟更接近真实失效) |
| Campaign size | 4 fault × 时序 = 20+;漂移幅度对阈值边界扫描 |
| 期望 DC | 停振 100% / ±10% 漂移 ≥ 95% / 参考精度内漂移 0(设计盲区,FMEDA 记 residual)/ 失锁 ≥ 95% |
| 判定 | (a) 切到内部备用 RC 时钟继续跑或进安全态 (b) 诊断码记录 (c) FTTI 内 |
实战陷阱:慢漂移测试要长时间(分钟到小时级),量产线 ATE 节拍塞不下,经常被压缩省略——这类覆盖要在 DV 台架补足并在报告里写明分工,否则 field 偶发问题没人认领。
9. SOTIF Triggering — 算法极限 FI
这一类不是 ISO 26262 的 fault(元件没坏),是 ISO 21448:2022(SOTIF)的 triggering condition:功能局限在特定场景组合下被触发。方法学与 FI 同构(注入 → 观察 → 判定),但三点本质不同,照搬 26262 的 campaign 口径会全错:① 注入空间是场景空间而非故障空间——无穷维,覆盖论证只能对 ODD 分区 + 已知 triggering condition 目录做,不存在穷举;② oracle 不是二值(见 §12.3);③ "DC" 变成 scenario coverage,数字只相对已知目录有意义。
| 维度 | 内容 |
|---|---|
| 注入点 | 仿真环境的 sensor 输入(CarMaker / VTD / CARLA) |
| Fault model | (a) 罕见目标(动物 / 异常姿态行人)/ (b) 环境退化(雨雪 / 逆光 / 污损)/ (c) 多目标快速切换 |
| 触发时序 | 不同工况 / 车速 / 距离 / 光照组合 |
| Campaign size | 数千仿真场景起步(SOTIF 标配),按 ODD 分区分配 |
| 期望"覆盖" | 已知 triggering condition 目录的场景覆盖 ≥ 95%(相对已知目录) |
| 判定 | (a) 识别正确 OR (b) 算法置信度低 → 及时降级 / 请求接管 OR (c) 报告 ODD 退出 |
实战陷阱:SOTIF 的判据不是"通过/失败"二值,是 safe response 程度——识别错但及时降级算 safe,识别"差不多对"却继续全速执行可能更危险。判定谓词要写成系统级安全响应(TTC 阈值 / 接管请求时限),不是识别正确率。
10. 端到端 Worked Campaign — S32K344 + FS26 EPS 看门狗
把 §4 的 watchdog campaign 在一个真实器件链上完整走一遍,产出可直接交 Confirmation Review 的报告条目。
10.1 场景与 SM 配置
EPS(电动助力转向),安全目标 SG-EPS-01"避免非预期辅助扭矩"(ASIL D),HARA 定 FTTI = 10 ms;安全态 = 撤销电机桥栅驱使能(FS26 的 FS0B 直连栅驱使能,不经 MCU——独立第二关断路径)。MCU = NXP S32K344(delayed lockstep Cortex-M7),SBC = FS26(challenger 窗口看门狗,与 FS84/FS85C 同族 fail-safe IP)。看门狗配置从 FTTI 反推而非用默认值:窗口周期 Twin = 4 ms(50/50 占空 → OPEN 段 2 ms),WD_ERR_LIMIT = 2(bad refresh 一次 +2 即达限)。最坏检测相位:MCU 在一次 good refresh 后立刻死机——当前窗刚重启,要走完一整个 Twin 才记到第一次 bad,即最坏检测 4 ms;FS0B 内部传播 + 栅驱关断保守取 0.5 ms,预算最坏 4.5 ms < 10 ms,margin 55%。若用默认配置(3 ms 窗 × WD_ERR_LIMIT 6,需连续 3 次 bad)最坏检测 9 ms 以上,预算直接告急——这就是"配置从 FTTI 反推"的分量。
10.2 Fault model 与注入机制
五类故障各对应一条真实失效路径,注入机制全部可自动化:
| Fault model | 注入机制 | 期望的第一反应 |
|---|---|---|
| 无喂(死机) | 测试钩子挂起喂狗任务(带编译开关) | OPEN 窗无 refresh → bad |
| 早喂 | 喂狗任务相位前移进 CLOSED 窗 | CLOSED 窗 refresh → bad |
| 晚喂 | 任务注入延迟越过 OPEN 窗 | 等效无喂 → bad |
| 错喂 | SPI 写出前把 Q&A 答案 XOR 0x0001 | 答案校验失败 → bad,LFSR 不换题 |
| SPI 卡死 | CS 线经固态 FI 开关断开 | 无 refresh → bad |
10.3 样本量与相位随机化
每类 300 trials(零失败口径 ≥ 299,§1.2),注入时刻对 4 ms 窗口相位均匀随机——相位是窗口类 SM 检测时间的敏感变量,固定相位的结果不可外推(§11.5)。另跑 10000 次无故障 trials 验无误触发:false trip 在量产上是"误停车 / 助力突失"事件,和漏检同样致命。合计 1500 + 10000 trials,dSPACE HIL 自动化一夜量级。
10.4 测量链与结果
4 通道示波器同步:SPI CS(注入时标 t0)、RSTB、FS0B、栅驱使能(t4);判定谓词 = RSTB 与 FS0B 拉低 + 栅驱使能撤销 + (t4 - t0) ≤ 10 ms。下表为一个代表性项目的结果量级(数值为示范,结构即报告正文):
| Fault model | trials | 检出 | max(t4 - t0) |
|---|---|---|---|
| 无喂 | 300 | 300 | 4.21 ms |
| 早喂 | 300 | 300 | 4.05 ms |
| 晚喂 | 300 | 300 | 4.18 ms |
| 错喂 | 300 | 300 | 0.42 ms |
| SPI 卡死 | 300 | 300 | 4.24 ms |
错喂类明显快:bad refresh 在写入答案的瞬间即被判定,不用等窗口走完。全局最坏 4.24 ms,与 10.1 的 4.5 ms 预算一致,margin 58%;false trip 0/10000。
10.5 报告条目
每个 SM 一份,数十个 SM 拼成项目 FI 总报告;单条格式:
SM ID: SM-WD-001 (FS26 challenger window watchdog)
ASIL: D SG: SG-EPS-01 FTTI: 10 ms
Config: WDW_PERIOD = 4 ms (50/50), WD_ERR_LIMIT = 2, fault escalation -> FS0B
Fault model coverage (zero-failure demonstration, C = 95%, target DC >= 99%):
- no-feed: 300/300 detected, max t = 4.21 ms
- early-feed: 300/300 detected, max t = 4.05 ms
- late-feed: 300/300 detected, max t = 4.18 ms
- wrong-answer: 300/300 detected, max t = 0.42 ms
- SPI stuck: 300/300 detected, max t = 4.24 ms
Combined: 1500/1500 -> DC >= 99% demonstrated at 95% confidence
Reaction validation:
- RSTB + FS0B asserted, gate-driver enable removed: all 1500 trials
- max(t4 - t0) = 4.24 ms <= FTTI 10 ms (margin 58%)
- False trip: 0 / 10000 fault-free trials
Tooling: dSPACE HIL + solid-state FI box; 4-ch scope sync
Tool qualification: per ISO 26262-8 clause 11 (TCL report attached)
11. Gotcha — 7 个反复出现的工程坑
方法论层面的坑(套 generic DC 不做 FI、只测 t1 不测 t4、空载 FI、CCF 遗漏、工具无 TCL)见方法论页 §7;下面 7 个是 campaign 执行层特有的。
11.1 FI 测试钩子漏进量产代码
Saboteur / 喂狗挂起这类钩子靠编译开关隔离,但"开关默认关"不等于"量产件没带"——构建变体一多,总有一条产线固件把 FI_ENABLED 编进去了。后果是双重的:多余代码改变时序,且留下一个能人为注错的后门(功能安全 + 网络安全双问题)。修复:量产构建加钩子符号扫描(链接产物里 grep 注入符号),把"无 FI 钩子"写进 release checklist 并留证据。
11.2 复位把判定证据抹了
Watchdog / 电压监控类 SM 的正确反应就是复位——而复位把 RAM 里的诊断记录一起抹了。campaign 判 detected 若依赖 MCU 自己的日志,复位后拿不出证据,报告的证据链断裂。修复:判定证据必须在复位域之外——示波器波形、SBC 的故障状态寄存器(复位后可读)、或复位前落 NVM 的快照;10.4 的 4 通道示波器方案就是为此。
11.3 CANoe IL 自动补算 CRC/counter,坏帧根本没上线
交互层(IL)/ E2E 库在发送路径会自动重算 CRC 与 counter——直接改信号值再发,总线上跑的仍是合法帧:你以为在注坏帧,实际在反复测好帧,"DC 100%" 全是假的。修复:在 raw frame 层注入(禁用该报文的 IL 处理 / 原始帧发送),并用独立的第二节点或总线解码确认线上帧确实是坏的——"注入被确认"本身要进判定谓词。
11.4 估计公式当验收公式
±精度的估计公式和"证明 ≥ 目标"的 success-run 是两个统计问题(§1.2)。典型翻车:按 385 跑完出了 1 个 miss,以为"384/385 = 99.7% > 99%,过了"——单侧 95% 置信下,带 1 个 miss 要 473 个 trial 才证得 99%,384/385 证不出来。反向浪费也常见:把 ~16600(±1% 估计)当门槛,campaign 预算直接爆炸。验收前把统计口径写进 test plan,评审时第一个对齐。
11.5 注入相位不随机化
窗口类 SM(watchdog 窗、lockstep 比对窗、ADC 采样节拍)的检出时间甚至检出与否是注入相位的函数。固定相位注入(比如总在任务起点注)= 采样偏倚,结果不可外推到真实故障的均匀到达。修复:相位对窗口周期均匀随机,报告写明相位分布;最坏相位(§10.1 的"good refresh 后立刻死")单独定向加测。
11.6 注入硬件做不出目标波形
可编程电源 slew 率毫秒级,做不出 < 100 µs 的电压 spike;机械继电器抖动 ms 级,做不出干净的单帧丢失;信号发生器直流耦合错了,注进去的漂移带了台阶。所有电气注入必须示波器回读确认波形与 test spec 一致——"测了 spike 实为测了斜坡"是电源监控 FI 最常见的假阴性来源。正解是固态开关 FI box / dSPACE FIU 级的专用注入硬件。
11.7 Trial 与 FMEDA 失效模式无 traceability
Campaign 跑了 1500 个 trial,却回答不了"FMEDA 第 37 行的失效模式对应哪些 trial"——specific DC 回写 FMEDA 就没有依据,Confirmation Review 直接打回。修复:fault list 从 FMEDA workbook 生成(每条 DC ≥ Medium 的 SM 派生注入项),每个 trial 记录携带 FMEDA row ID,报告里给双向索引。
12. Corner — 3 个边界与权衡
12.1 MBU 与 SECDED 的独立性假设
工艺节点缩小后,单个粒子可打翻物理相邻的多个 bit(MBU)。若相邻 bit 属同一 ECC word,SECDED 的"2-bit 必检"退化,甚至 miscorrection。车规 SRAM 的对策是 bit interleaving:物理相邻的 bit 分属不同 ECC word,把 MBU 变成多个 word 各自的 1-bit 错。对 FI 的含义:2-bit 注入要按物理相邻 pattern 注,不是随机挑两个逻辑 bit——随机双 bit 测的是编解码器,物理相邻双 bit 测的才是 interleaving 假设本身。各 RAM 区的 SEU FIT 与 ECC 组织查 MCU Safety Manual(如 TC39x Safety Manual v1.1 给出 RAM 区约 0.015 FIT/Mb 量级)。
12.2 时钟漂移检测的物理下限
CMU 阈值开得比参考精度窄 → 误报风暴;开得宽 → 参考精度以内的漂移盲区。这不是实现缺陷,是单参考系统的物理边界:测不出比参考自身误差更小的偏差。要压低下限只有异构参考(SBC 侧独立晶振交叉核对 / 总线时间基准)或承认 residual 进 FMEDA 并给 systematic measure。对 campaign 的含义:注 ±2% 漂移(参考精度内)却期望"检出",是期望值写错了——正确期望是"不动作",而这条也值得注入验证(误报同样是失效)。
12.3 SOTIF 的 oracle 与覆盖率都不闭合
26262 的 fault space 有限、可采样、oracle 二值;SOTIF 的 scenario space 无穷、oracle 是程度量。覆盖率论证只能相对"已知 triggering condition 目录 + ODD 分区"给出,unknown-unsafe 象限靠量产 field monitoring 收敛,不靠 campaign——所以 SOTIF 报告里写"场景覆盖 95%"必须带定语"相对已知目录"。oracle 要写成系统级 safe response 谓词(TTC 阈值 / 降级时限 / 接管请求提前量):识别错但及时降级 = safe,识别对但晚 200 ms 可能 unsafe。把识别正确率当验收指标,是用感知 KPI 冒充安全论证。
核心要点
- Campaign 六要素(注入点 / fault model / 激活 / 相位 / oracle / 样本量)逐 SM 定制;SM 的检测物理(码距 / 时间冗余 / 时间窗 / 值域先验 / 参考计数)决定 fault space 与判定谓词,套通用流程必失真
- 统计两口径别混:零失败 299 trials 即证 DC ≥ 99% @ 95% 置信;出 1 个 miss 要 473;~16600 是 ±1% 估计精度的需求,不是验收门槛
- 每个 trial 先三分类(detected / dangerous undetected / no effect),no-effect 用 golden run 认定后出分母——两个方向的分类错误都会翻车
- ECC 用等价类注入(S32K3 EIM / AURIX MTU):对象是编解码逻辑 + 上报链,cell 阵列归 MBIST;1-bit 必须"纠 + 报",只纠不报是 LFM 缺口
- Watchdog 测全 4 种喂狗故障(无 / 早 / 晚 / 错),各对应一类 MCU 失效;FS26/FS85 族参数(+2/−1 计数、WD_ERR_LIMIT)从 FTTI 反推,别用默认
- E2E 三机制正交分开注:CRC 上限由 逃逸概率定(P01 约 99.6%),counter 注意 15 帧回绕盲区(模 15 计数,0xF 跳过),timeout 兜底
- 电压 deglitch 窗与时钟参考精度是设计边界不是缺陷——期望值按 datasheet 写,"短 spike 不动作 / 精度内漂移不动作"也是要验证的正确行为
- Worked campaign(S32K344 + FS26,EPS FTTI 10 ms):Twin 4 ms / WD_ERR_LIMIT 2,预算最坏 4.5 ms,实测最坏 4.24 ms(margin 58%),false trip 0/10000
- 执行层 7 坑:量产带 FI 钩子 / 复位抹证据 / IL 自动补算 CRC / 统计口径错用 / 相位不随机 / 注入波形失真 / 无 FMEDA traceability
缩写表
本页仅列页面用到的工业标准缩写。通用英语、单位、月份及 层/Lx tag 不列。
| 缩写 | 全称 | 中文 / 备注 |
|---|---|---|
| FI | Fault Injection | 故障注入 |
| SM | Safety Mechanism | 安全机制 |
| DC | Diagnostic Coverage | 诊断覆盖率 |
| FTTI | Fault Tolerant Time Interval | 容错时间间隔 |
| DTI | Diagnostic Test Interval | 诊断测试间隔 |
| FMEDA | Failure Modes, Effects and Diagnostic Analysis | 含诊断覆盖的 FMEA |
| LFM | Latent Fault Metric | 潜伏故障度量 |
| ASIL | Automotive Safety Integrity Level | ISO 26262 安全完整性等级 |
| SECDED | Single Error Correction, Double Error Detection | 单纠双检 ECC |
| ECC | Error Correcting Code | 纠错码 |
| MBU | Multiple Bit Upset | 多 bit 翻转(单粒子) |
| SEU | Single Event Upset | 单粒子翻转 |
| EIM | Error Injection Module | NXP S32K3 错误注入模块 |
| ERM | Error Reporting Module | NXP S32K3 错误上报模块 |
| MTU | Memory Test Unit | AURIX 存储测试单元 |
| SMU | Safety Management Unit | AURIX 安全管理单元 |
| FCCU | Fault Collection and Control Unit | NXP 故障收集控制单元 |
| RCCU | Redundancy Control Checker Unit | NXP lockstep 比对单元 |
| CCM | CPU Compare Module | TI lockstep 比对单元 |
| CMU | Clock Monitor Unit | 时钟监控单元 |
| DCC | Dual-Clock Comparator | TI 双时钟比对 |
| LFSR | Linear Feedback Shift Register | 线性反馈移位寄存器(Q&A 出题) |
| HD | Hamming Distance | 码距 |
| MBIST | Memory Built-In Self-Test | 存储内置自测 |
| LBIST | Logic Built-In Self-Test | 逻辑内置自测 |
| SBC | System Basis Chip | 系统基础芯片 |
| HIL | Hardware in the Loop | 硬件在环 |
| IL | Interaction Layer | CANoe 交互层 |
| E2E | End-to-End (protection) | AUTOSAR 端到端保护 |
| SecOC | Secure Onboard Communication | 车载通信安全(MAC) |
| SOTIF | Safety of the Intended Functionality | 预期功能安全(ISO 21448) |
| ODD | Operational Design Domain | 设计运行域 |
| TTC | Time to Collision | 碰撞时间 |
| EPS | Electric Power Steering | 电动助力转向 |
| TCL | Tool Confidence Level | 工具置信度等级(ISO 26262-8 §11) |
| NVM | Non-Volatile Memory | 非易失存储 |
| ATE | Automatic Test Equipment | 量产自动测试设备 |
Cross-references
- ← 索引
- Fault Injection 测试方法:方法论 + 工具 + TC397 EV 主驱 worked campaign
- Fault Injection Test Deep:5 类 FI 全流程 + HARA 驱动 + 报告合规
- 安全机制目录:每个 SM 的 DC 目标值,campaign 输入
- SBC Watchdog 深度:Simple/Window/Q&A 机制与主流 SBC 协议对照
- MCU + SBC ASIL D 集成:FS26 challenger 看门狗时序推导 + FTTI 预算(本页 §10 的参数源)
- CAN E2E + SecOC:8 种 Profile 选型 + CRC 多项式
- ISO 26262-5 硬件层细化:§10 集成验证 + Annex D generic DC
- ISO 26262-11 半导体细化:§4.8 半导体 FI 实践
- 电流采样诊断 SM:ADC plausibility 实战
- 电压采样诊断 SM:voltage monitor FI 实战
- 位置采样诊断 SM:resolver plausibility FI
- 栅极驱动诊断 SM:driver fault FI
- ASIL D 案例研究:整车级 FI campaign 案例