Fault Injection 实战案例 — 8 类典型 SM 的 Campaign 设计

功能安全L2别名 fault injection 实例 · SM 验证 campaign · FI campaign 设计 · ECC fault injection · lockstep fault injection · watchdog FI · ADC plausibility FI · CRC fault injection · 实战 FI 案例 · 更新

本质与导读

本质 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 内驱动系统进安全状态。

故障注入实例 — watchdog/lockstep/ECC/plausibility/CRC 各安全机制 x 注入故障 x 期望反应 x 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.5271
估计 DC ±5%,95% 置信最坏 p=0.5385
估计 DC ±2%,95% 置信最坏 p=0.52401
估计 DC ±1%,99% 置信最坏 p=0.5~16600
证明 DC ≥ 90%,95% 置信零失败29
证明 DC ≥ 99%,95% 置信零失败299
证明 DC ≥ 99%,95% 置信允许 1 miss473

工程实务: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 model1-bit flip(应纠 + 报)/ 2-bit flip(应检不纠)/ 3-bit(不承诺,只记录行为)
等价类72 个 bit 位置 × 阶数 × 若干数据 pattern × 地址采样(防 routing 差异)
Campaign size1-bit / 2-bit 各 ≥ 300(零失败口径,§1.2);3-bit 100 次只记录
期望 DC1-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 modelstuck-at / transition(RTL 级);假报警(反应链级)
关键时序RTL 注入须落在 workload 会激活的周期内;no-effect 用 golden run 分类(§1.1)
Campaign sizeRTL 统计采样(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 验无误触发
期望 DC4 种 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 size4 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 size4 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 size4 fault × 动静 × 幅度/宽度扫描 = 30+,deglitch 边界加密采样
期望 DCUV/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 size4 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 modeltrials检出max(t4 - t0)
无喂3003004.21 ms
早喂3003004.05 ms
晚喂3003004.18 ms
错喂3003000.42 ms
SPI 卡死3003004.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 不列。

缩写全称中文 / 备注
FIFault Injection故障注入
SMSafety Mechanism安全机制
DCDiagnostic Coverage诊断覆盖率
FTTIFault Tolerant Time Interval容错时间间隔
DTIDiagnostic Test Interval诊断测试间隔
FMEDAFailure Modes, Effects and Diagnostic Analysis含诊断覆盖的 FMEA
LFMLatent Fault Metric潜伏故障度量
ASILAutomotive Safety Integrity LevelISO 26262 安全完整性等级
SECDEDSingle Error Correction, Double Error Detection单纠双检 ECC
ECCError Correcting Code纠错码
MBUMultiple Bit Upset多 bit 翻转(单粒子)
SEUSingle Event Upset单粒子翻转
EIMError Injection ModuleNXP S32K3 错误注入模块
ERMError Reporting ModuleNXP S32K3 错误上报模块
MTUMemory Test UnitAURIX 存储测试单元
SMUSafety Management UnitAURIX 安全管理单元
FCCUFault Collection and Control UnitNXP 故障收集控制单元
RCCURedundancy Control Checker UnitNXP lockstep 比对单元
CCMCPU Compare ModuleTI lockstep 比对单元
CMUClock Monitor Unit时钟监控单元
DCCDual-Clock ComparatorTI 双时钟比对
LFSRLinear Feedback Shift Register线性反馈移位寄存器(Q&A 出题)
HDHamming Distance码距
MBISTMemory Built-In Self-Test存储内置自测
LBISTLogic Built-In Self-Test逻辑内置自测
SBCSystem Basis Chip系统基础芯片
HILHardware in the Loop硬件在环
ILInteraction LayerCANoe 交互层
E2EEnd-to-End (protection)AUTOSAR 端到端保护
SecOCSecure Onboard Communication车载通信安全(MAC)
SOTIFSafety of the Intended Functionality预期功能安全(ISO 21448)
ODDOperational Design Domain设计运行域
TTCTime to Collision碰撞时间
EPSElectric Power Steering电动助力转向
TCLTool Confidence Level工具置信度等级(ISO 26262-8 §11)
NVMNon-Volatile Memory非易失存储
ATEAutomatic Test Equipment量产自动测试设备

Cross-references