功能安全系列: 故障注入:硬件注入与软件注入完整对比
前言
现场真实一幕:某ADAS项目需要验证ECU在CAN总线短路时的行为。测试工程师提出用软件模拟故障,但硬件专家坚持必须用继电器真实短路——因为软件模拟无法触发硬件层的看门狗复位。最终测试发现,软件模拟通过了所有用例,但真实短路测试时ECU直接死机。两种方法的结果截然不同。
硬件故障注入和软件故障注入,是汽车控制器FIT(故障注入测试)的两条技术路线,决定了“能注入什么故障、能达到什么精度、需要什么成本”。选择错误,轻则测试不充分,重则安全机制验证失效。
本文将从工程实战角度彻底讲透硬件注入与软件注入:
硬件故障注入:接触式(探针/插座)vs 非接触式(辐射/电磁)
软件故障注入:编译时注入 vs 运行时注入(超时/异常/代码插入)
故障模型映射:哪些故障只能用硬件注入,哪些只能用软件注入
工程决策树:成本、精度、侵入性、可重复性如何权衡
适用读者:汽车电子测试工程师、功能安全工程师、嵌入式软件工程师、系统架构师
适用标准:ISO 26262-2018(Part 4/6/11)、IEC 61508
适用场景:FIT方案设计、HIL平台选型、安全机制验证策略制定
一、先说结论:硬件注入与软件注入的本质差异
硬件故障注入和软件故障注入的本质区别在于:故障是在物理层面注入还是在逻辑层面注入。
| 对比维度 | 硬件故障注入 | 软件故障注入 |
|---|---|---|
| 故障注入点 | 芯片引脚、组合逻辑电路、寄存器 | 内存、寄存器、软件状态层面 |
| 故障类型覆盖 | 开路、桥接、杂散电流、电源浪涌、卡死 | 存储数据损坏、通信数据损坏、软件缺陷 |
| 时间分辨率 | 纳秒级(硬件定时器/事件触发) | 毫秒级(受限于软件调度) |
| 系统扰动 | 极低(接触式几乎无扰动) | 较高(插桩可能改变软件结构) |
| 硬件成本 | 高(额外硬件设备、探针台) | 低(仅需调试接口) |
| 可重复性 | 接触式好/非接触式差 | 100%可重复 |
| 适用测试对象 | 原型硬件、底层错误检测/屏蔽机制 | 应用程序、操作系统、高级安全机制 |
| 永久性故障模拟 | 适合 | 编译时可模拟,运行时困难 |
一句话总结:硬件注入适合验证“物理世界能不能把系统搞坏”,软件注入适合验证“系统在数据异常时能不能正确响应”。两者各有分工,并非替代关系,而是互补关系。
二、硬件故障注入:接触式与非接触式详解
2.1 硬件注入的定位
硬件实现的故障注入通过额外硬件向目标系统的硬件中引入故障。它能够到达软件无法触及的位置,是验证芯片级安全机制(如看门狗、电源监控、ECC硬件逻辑)的唯一手段。
根据故障类型及其位置,硬件注入分为两类:接触式和、非接触式。
2.2 接触式硬件故障注入
故障注入器与目标系统直接物理接触,在目标芯片外部产生电压或电流变化。
方法一:有源探针
| 属性 | 描述 |
|---|---|
| 原理 | 通过连接到引脚上的探针注入电流,改变引脚的电流/电压 |
| 适用故障 | 固定状态故障(卡死);跨接两个或多个引脚可实现桥接故障 |
| 优点 | 精确控制故障时间和位置;对目标系统几乎无干扰 |
| 局限性 | 故障在引脚级别建模,与内部实际故障模型不完全对应 |
| ⚠️ 风险 | 注入额外电流必须格外小心,过大的电流可能损坏目标硬件 |
在汽车控制器中的典型应用:ISO 7637-2电源浪涌测试、传感器信号短路/断路测试、ECU引脚级故障注入。
方法二:插座插入法
| 属性 | 描述 |
|---|---|
| 原理 | 在目标硬件与其电路板之间插入一个插座,通过插座将模拟信号强行施加到目标引脚 |
| 可实现故障 | 卡死、开路、更复杂的逻辑故障(反相信号、与/或运算、时序组合) |
| 优点 | 良好的时间和位置控制;几乎不产生干扰 |
| 局限性 | 故障在引脚级别建模,与芯片内部实际的故障模型有差异 |
具体实现方式:
-
引脚信号可以被反相
-
可与相邻引脚的信号进行与运算或或运算
-
可与同一引脚上的先前信号进行运算
接触式注入的共同特点:
-
都能很好地控制故障发生的时间和位置
-
对目标系统几乎不会造成干扰
-
故障在引脚级别建模,与传统内部故障模型不完全相同
-
但足以测试错误检测电路(如看门狗触发、电源监控响应)
电源扰动注入:连接在电源硬件上的有源探针可注入电源扰动故障(电压跌落、浪涌、纹波叠加)。但这种方法可能损坏被注入的器件,增加了破坏性注入的风险,应在实验前进行充分的风险评估并准备备用器件。
2.3 非接触式硬件故障注入
故障注入器与目标系统没有直接物理接触,通过外部物理现象诱发故障。
| 方法 | 原理 | 典型应用 | 优点 | 局限性 |
|---|---|---|---|---|
| 重离子辐射 | 离子穿过目标设备的耗尽区,产生杂散电流 | 模拟太空环境中的单粒子翻转(SEU) | 真实模拟辐射环境 | 难以精确控制触发时间和位置 |
| 电磁干扰 | 将目标硬件置于电磁场中或其附近,感应出异常电流 | 模拟工业环境中的EMI干扰 | 无需物理接触 | 触发时刻无法精确控制,重复性差 |
| 激光注入 | 聚焦激光束照射芯片特定区域,产生光电流 | 精确位置的单粒子效应模拟 | 空间分辨率高 | 设备昂贵,需去除芯片封装 |
非接触式方法的价值:非常适合研究原型的可靠性特性,尤其是需要高时间分辨率的硬件触发和监测(如CPU中的故障延迟),或者需要访问其他方法难以触及的位置时。但精确控制触发时间和位置的困难是其固有短板。
在汽车控制器中的典型应用:芯片级可靠性评估(通常在半导体供应商处执行)、EMC抗扰度测试。
三、软件故障注入:编译时与运行时详解
3.1 软件注入的定位
软件故障注入技术之所以具有吸引力,是因为它无需昂贵的硬件,且可以针对应用程序和操作系统进行测试,而这在采用硬件故障注入时很难实现。
3.2 两种部署策略
| 注入目标 | 实现方式 | 在汽车控制器中的具体应用 |
|---|---|---|
| 应用层软件 | 将故障注入器嵌入应用层代码中,或部署在RTE与应用层之间 | AUTOSAR应用层FIT、Simulink模型注入 |
| BSW(基础软件) | 必须将故障注入器嵌入BSW中,或通过调试接口在运行时修改 | 通信栈故障注入、OS调度器测试 |
3.3 编译时注入
| 属性 | 描述 |
|---|---|
| 时机 | 在程序映像被加载并执行之前 |
| 操作对象 | 目标程序的源代码或汇编代码 |
| 本质 | 将错误注入代码中,而非将故障注入硬件中 |
| 故障模拟范围 | 硬件故障、软件故障、瞬态故障 |
| 实现方式 | 生成一个错误的软件映像,当系统执行该故障映像时触发故障 |
| 优势 | ① 实现非常简单;② 运行时无需额外软件;③ 执行过程中零干扰;④ 可模拟永久性故障 |
| 局限 | 无法在工作负载程序运行时注入故障 |
在汽车控制器中的典型应用:
-
修改ADC驱动代码,模拟转换错误返回
-
修改CAN驱动代码,模拟CRC校验失败
-
修改AUTOSAR应用层代码,模拟变量溢出
3.4 运行时注入
运行时注入需要一种触发机制来启动故障注入。三种常用触发方式:
触发方式一:超时(Timeout)
| 属性 | 描述 |
|---|---|
| 原理 | 定时器在预定时间到期后生成中断,调用故障注入 |
| 定时器类型 | 硬件定时器(必须与中断处理程序向量关联)或软件定时器 |
| 优点 | 最简单,无需对应用程序或工作负载程序进行任何修改 |
| 缺点 | 基于时间而非特定事件或系统状态注入故障,产生不可预测的故障效应 |
| 适用场景 | 仿真瞬态故障和间歇性硬件故障 |
在汽车控制器中的实现:使用MCU硬件定时器或OSEK/AUTOSAR软件定时器触发故障注入。
触发方式二:异常/陷阱(Exception/Trap)
| 属性 | 描述 |
|---|---|
| 原理 | 硬件异常或软件陷阱将控制权转移给故障注入器 |
| 软件陷阱 | 插入目标程序中的陷阱指令在程序执行特定指令之前触发故障注入 |
| 硬件异常 | 硬件检测到的事件(如访问特定内存位置时)触发注入 |
| 关键要求 | 两种机制都必须与中断处理程序向量关联 |
| 优势 | 可在特定事件或条件发生时随时注入故障,比超时更精确 |
在汽车控制器中的实现:
-
利用ARM Cortex的HardFault或TriCore的Trap机制
-
配置MPU访问权限,触发MemManage Fault
-
在启动代码中配置异常向量表
触发方式三:代码插入(Code Insertion)
| 属性 | 描述 |
|---|---|
| 原理 | 在目标程序中添加指令,在特定指令执行之前触发故障注入 |
| 与代码修改的区别 | 代码插入是在运行时执行故障注入,且是添加新指令而非修改原有指令 |
| 与陷阱法的区别 | 故障注入器可能作为目标程序的一部分存在,并在用户模式下运行,而非系统模式 |
| 优点 | 不改变原有逻辑,仅增加触发点 |
| 适用场景 | 应用层故障注入,无需系统级权限 |
3.5 混合方法
当软件注入的时间分辨率不足以应对短延迟故障时,可以采用混合方法:
| 属性 | 描述 |
|---|---|
| 组合方式 | 软件故障注入的灵活性 + 硬件监控的准确性 |
| 适用场景 | 测量极短延迟(如CPU内部故障传播) |
| 代价 | 硬件监控可能增加成本,并通过限制观察点和数据存储容量而降低灵活性 |
在汽车控制器中的应用:软件注入故障 + 硬件定时器捕获响应时间(如验证看门狗对微秒级故障的响应)。
四、故障模型与注入方法的映射关系
选择硬件还是软件方法,核心依据是关注的故障类型。
| 故障模型 | 硬件注入 | 软件注入 | 推荐 | 原因 |
|---|---|---|---|---|
| 开路 | ✅ 可通过插座插入法实现 | ❌ 无法模拟 | 硬件 | 软件无法模拟物理层面的断开 |
| 桥接 | ✅ 可通过探针跨接实现 | ❌ 无法模拟 | 硬件 | 软件无法模拟物理层面的短路 |
| 比特翻转 | ✅ 可通过辐射/EMI实现 | ✅ 可通过修改内存实现 | 两者均可 | 按成本、精度、可重复性取舍 |
| 杂散电流 | ✅ 非接触式辐射实现 | ❌ 无法模拟 | 硬件 | 软件无法产生物理层面的电流效应 |
| 电源浪涌 | ✅ 有源探针注入 | ❌ 无法模拟 | 硬件 | 软件无法产生物理层面的电源扰动 |
| 卡死 | ✅ 硬件注入器可精确控制位置 | △ 开销高或无法实现 | 硬件 | 软件无法模拟物理层面的卡死 |
| 存储数据损坏 | ✅ 硬件触发 | ✅ 软件主要优势领域 | 软件 | 直接在软件状态层面操作 |
| 通信数据损坏 | ✅ 总线干扰 | ✅ 软件可Hook通信栈 | 软件 | 成本低,实现简单 |
| 软件缺陷表现 | ❌ 不适用 | ✅ 唯一选择 | 软件 | 软件故障注入的天然领域 |
五、工程选型决策树
5.1 完整决策树
text
需要注入的故障位置
│
├── 芯片引脚、组合逻辑、寄存器(软件不可达)
│ └── 选择:硬件注入
│ ├── 接触式(探针/插座)
│ │ ├── 优点:高精度、可控、适合ISO 7637测试
│ │ └── 风险:可能损坏硬件,需预留备用器件
│ └── 非接触式(辐射/电磁)
│ ├── 优点:模拟自然现象
│ └── 缺点:难以精确定时,重复性差
│
├── 内存、变量、通信数据(软件可见)
│ └── 选择:软件注入
│ ├── 编译时注入
│ │ ├── 优点:零干扰、可模拟永久故障
│ │ └── 缺点:无法运行时触发
│ ├── 运行时注入
│ │ ├── 超时触发:简单、适合瞬态故障
│ │ ├── 异常/陷阱触发:精确、适合特定事件
│ │ └── 代码插入触发:用户模式、适合应用层
│ └── 混合方法(软件注入 + 硬件监控)
│ ├── 优点:兼顾灵活性与精度
│ └── 代价:额外硬件成本
│
└── 需要同时验证物理和逻辑层
└── 选择:分层验证策略
├── SiL阶段:软件注入(成本低、迭代快)
└── HIL阶段:硬件注入 + 软件注入(最终验证)
5.2 汽车控制器应用场景建议
| 测试阶段 | 推荐方法 | 理由 |
|---|---|---|
| 单元测试 | 软件注入(编译时) | 零干扰,可模拟永久故障 |
| 集成测试 | 软件注入(运行时) | 灵活触发,适合接口验证 |
| 功能测试 | 硬件注入 + 软件注入 | 完整验证硬件和软件安全机制 |
| EMC测试 | 硬件注入(非接触式) | 模拟真实物理干扰 |
| ISO 7637电源测试 | 硬件注入(接触式) | 精确控制电源扰动 |
| E2E通信保护验证 | 软件注入(运行时) | 直接操作通信栈数据 |
| 看门狗验证 | 软件注入 + 硬件注入混合 | 软件挂起任务 + 硬件时钟失效联合测试 |
六、总结与面试高频考点
6.1 核心结论表
| 要点 | 结论 |
|---|---|
| 硬件注入的本质 | 在物理层面注入故障——开路、桥接、浪涌、卡死 |
| 软件注入的本质 | 在逻辑层面注入故障——数据损坏、软件缺陷 |
| 硬件注入优势 | 纳秒级精度、极低扰动、可达组合逻辑 |
| 软件注入优势 | 低成本、高灵活度、100%可重复 |
| 硬件注入局限 | 成本高、非接触式重复性差 |
| 软件注入局限 | 毫秒级精度、有系统扰动 |
| 选型核心依据 | 故障类型——开路/桥接→硬件;数据损坏→软件 |
| 工程最优实践 | 混合方法:硬件注入验证物理层,软件注入验证逻辑层 |
6.2 面试高频考点
| 问题 | 标准回答 |
|---|---|
| 硬件注入和软件注入的本质区别? | 硬件注入在物理层面(引脚、电流、辐射),软件注入在逻辑层面(内存、变量、通信数据) |
| 什么故障只能用硬件注入? | 开路、桥接、杂散电流、电源浪涌——软件无法模拟物理层面的电气效应 |
| 什么故障只能用软件注入? | 软件缺陷表现(机器级及以上)——硬件注入无法修改代码逻辑 |
| 什么故障两者都可以? | 比特翻转、存储数据损坏——可按成本、精度、可重复性取舍 |
| 硬件注入为什么能检测看门狗? | 通过真实物理短路或电源浪涌触发硬件级复位,软件模拟无法触发同样的硬件路径 |
6.3 工程决策速查卡
| 故障类型 | 硬件 | 软件 | 决策 |
|---|---|---|---|
| 开路/桥接 | ✅ | ❌ | 硬件 |
| 电源浪涌 | ✅ | ❌ | 硬件 |
| 卡死 | ✅ | △ | 硬件 |
| 比特翻转 | ✅ | ✅ | 按成本取舍 |
| 存储数据损坏 | ✅ | ✅ | 软件 |
| 通信数据损坏 | ✅ | ✅ | 软件 |
| 软件缺陷 | ❌ | ✅ | 软件 |
七、参考资料
-
ISO 26262-2018. Road vehicles — Functional safety. Part 4/6/11.
-
IEC 61508-2010. Functional safety of electrical/electronic/programmable electronic safety-related systems.
-
dSPACE. SCALEXIO Fault Injection User Guide.
-
Lauterbach. Debugger Fault Injection Guide.
-
Vector. CANoe/CANape Fault Injection Documentation.
更多推荐


所有评论(0)