Freedom from Interference(FFI)— 共存元素互不污染的工程实现
本质与导读
本质:多个不同 ASIL 的软件 / 任务跑在同一颗 MCU 上时,低 ASIL(QM/B)绝不能污染高 ASIL(D);否则系统级 ASIL 退到最低。ISO 26262 Annex E 列出 4 个独立维度 — 内存 / 时间 / 通信 / 资源 — 每维都要单独证明已隔离。FFI 不只是"加个 MPU"——MPU 只管 CPU 一侧的内存,DMA 要靠 DAM,时间靠 OS 切片 + WD,通信靠 E2E,资源靠静态分配。DFA 是 FFI 的验证手段,逐项穷举共享资源 + 给隔离证据。
1. FFI 4 个独立维度
ISO 26262 Annex E 是 FFI 的官方框架,定义了 4 个必须全部满足的隔离维度。任一维度失守,共存就破坏,系统 ASIL 退到 共存元素的最低等级。
| 维度 | 主要威胁 | 硬件机制 | 软件机制 | DC |
|---|---|---|---|---|
| ① 内存 | QM 写到 ASIL D 区 | MPU + DAM | OS 加载 region 表 | ≥ 99 % |
| ② 时间 | QM 占住 CPU | CPU WD + 外部 WD | OS 固定时间片 | ≥ 99 % |
| ③ 通信 | QM 篡改消息 | 独立总线 / chip-select | E2E CRC + Counter + DataID | 中-高 |
| ④ 资源 | QM 抢共享 ADC/DMA | 静态分配 | OS Resource Manager | 高 |
Annex E 的关键句:"In the absence of evidence of FFI, ALL elements must be developed to the highest ASIL of any element involved." 翻译过来:没法证 FFI = 全部按最高 ASIL 开发——FFI 论证就是省钱省工作量。
2. 内存分区 — MPU + DAM 双层
内存是最容易出 FFI 故障的维度,因为指针越界 bug 几乎无处不在。隔离要分地址段分配 + 硬件 ACL 两步:
2.1 Flash / RAM 物理段
把整个地址空间按 ASIL 分段:
- Flash:Safety OS → ASIL D → ASIL B → QM → 共享代码
- RAM:OS Stack / Heap → ASIL D 数据 → ASIL B 数据 → QM 数据 → 共享只读
每个 .c 文件用 __attribute__((section(".asil_d"))) 标段属性,Linker script(.ld)把 .asil_d 段映射到 0x80100000-0x80400000。运行时 OS 加载 MPU region:R1 = 这段地址 + 只允许 ASIL D task 访问。
常见误用:工程师忘了给 .c 加 section attribute → 默认链接到 QM 区 → ASIL D task 跑到时 MPU Trap → 难调试。代码 review 必查 section attribute 全覆盖。
2.2 MPU + DAM 双层
MPU 只管当前核 CPU 的访问;DMA / HSM / Ethernet master 可以绕过 CPU 直接访问 slave。所以 MPU 不够,必须配 DAM(Distributed Access Manager) 或 NXP 同等的 SMPU。
每个 master × 每个 slave 一份 ACL,启动期 Safety OS 加载。典型规则:
- QM master(QM DMA / Diag DMA)→ 禁访 ASIL D RAM / Flash
- ASIL D master → 可访所有
- HSM master → 仅访密钥区 + secure boot 区
2.3 共享代码的难题
stdlib / memcpy / printf / 数学库等代码所有 task 都用,放哪个段?
答案:共享代码必须按最高 ASIL(D)开发——否则共因失效。或者维护两份独立 lib(QM lib + ASIL D lib),浪费 Flash。多数项目选第一种:把 stdlib 当 ASIL D,工具链厂(TASKING / HighTec / GCC qualified)提供 qualified library。
3. 时间分区 — OS 切片 + 多层 WD
时间分区保证 ASIL D task 不被 QM 长循环挤掉 deadline。
典型 10 ms 主周期的 budget 分配:
| Slot | task | budget | 备注 |
|---|---|---|---|
| 0-0.5 ms | OS tick | 0.5 ms | schedule + WD refresh |
| 0.5-3 ms | ASIL D 控制律 | 2.5 ms | FOC + Torque Safety |
| 3-5 ms | ASIL B 监视 | 2 ms | Sensor fusion |
| 5-6 ms | STL | 1 ms | CPU 自检切片 |
| 6-8.5 ms | QM 任务 | 2.5 ms | UART / Diag / Comfort |
| 8.5-10 ms | OS Idle | 1.5 ms | WD refresh + hook |
3.1 四层时间防护
时间隔离不能靠单一机制,4 层叠加才能覆盖从 OS bug 到芯片死锁的全谱故障——每层 DC 不同,谁失效都有下一层兜底:
- OS 时间片 — 每 task 启动时启动 budget timer,超时 → OS 强制 preemption;DC 高
- CPU 内部 Watchdog — 每 OS tick 必 refresh;missing → SMU alarm → Reset;DC 中
- 外部 WD via SBC — Q&A 协议,独立硬件;DC ≥ 99 %(MCU 整体死锁的最后防线)
- Hardware Timer 监控 — 关键 task deadline 监视(可选)
关键观察:CPU 内部 WD 在 OS 自身 bug 时失效(WD 由 OS refresh);所以外部 SBC WD 是 ASIL D 必选。SBC Q&A WD 由 SBC 出题 / MCU 答题,MCU 死掉就答不出来。
3.2 误用案例
场景:QM Diag task 有死循环 bug。
| 设计 | 后果 |
|---|---|
| 无时间分区(协作调度) | QM 占 CPU 10 ms+,ASIL D miss deadline,电机 torque 输出 stale → 违 Safety Goal |
| 有时间分区(OS preempt) | QM budget 2.5 ms 到期,OS 切到 D task,D 按时跑完;QM 死循环被隔离 |
4. 通信分区 — 物理 + 逻辑双重
通信 FFI 涉及总线 / SPI / 内部 IPC 多类通道,核心目标:QM 消息不能干扰 ASIL D 消息。
物理隔离:
逻辑隔离:
- E2E(End-to-End Protection)— CRC + Counter + DataID + Timeout,详见 topic-can-e2e-secoc
- SecOC(Secure Onboard Communication)— HMAC 防伪造,需 HSM 密钥
- Mailbox 限速 — QM ECU 高频发包不能挤占 ASIL D ID
5. 资源分区 — 静态分配优先
CPU 内的 ADC / Timer / DMA / Peripheral 也是共享资源。FFI 准则:静态分配,不许动态争抢。
| 资源 | 分配策略 |
|---|---|
| ADC 通道 | ASIL D 专用 ADC0;ASIL B 用 ADC1;QM 用 ADC2 |
| PWM Timer | ASIL D 占 GTM ATOM0;QM 占 ATOM1 |
| DMA 通道 | ASIL D 独占 DMA 0/1;QM 用 DMA 2/3 |
| ADC trigger | ASIL D trigger 不接受软件触发 |
Safety OS 启动时锁死分配;运行期拒绝所有 dynamic resource request。
6. DFA 共享资源穷举
DFA(Dependent Failure Analysis)是 FFI 的验证工具,逐项穷举共享资源 + 在 4 维证明已隔离。这是 ASIL B 以上强制工作产品(Part 9-7)。
DFA 必查的共享资源 6 类:
| 类别 | 共因风险 | 隔离手段 |
|---|---|---|
| 电源(12 V) | 一停全停 | 双独立电池 + isolation |
| 时钟(PLL) | PLL 故障全时序乱 | 外部参考 + backup OSC + LoL 监视 |
| 通信总线 | QM 错挂占 | 双 CAN-FD + ID 优先级 + Mailbox 限速 |
| CPU Cache | Cache 污染 | Cache way partitioning,或 D 跑专核 |
| DMA / 总线 master | 绕过 CPU MPU | DAM ACL |
| Library | 软件共因 | 共享 lib 按 ASIL D 开发 |
DFA 报告包含:共享资源清单 + 4 维隔离证据 + 残余风险评估 + 评估员可独立验证的引用。
7. FFI vs ASIL Decomposition
容易混淆的两件事——同样涉及"分两路"。
| 维度 | Freedom from Interference | ASIL Decomposition |
|---|---|---|
| 目的 | 多个 ASIL 元素 共存 | 把一个高 ASIL 拆给两个低 ASIL 分担 |
| 必须独立? | 必须(4 维全) | 必须(两路独立 + DFA) |
| 产物 | 共存论证 | ASIL 降级合规 + 两路 SR |
| 典型 | 一颗 MCU 跑 D + B + QM | EPS Safety:D = B + B 两路监视 |
| Part 章节 | 9-6 + Annex E | 9-5 + Annex D |
两件事可以同时做:EPS Safety D = B + B 分解,两路 B 跑在同一 MCU 不同核 → 还要 FFI 论证它们之间 4 维隔离。
8. Safety OS 是 FFI 的底座
FFI 几乎所有软件机制都靠 Safety OS 实现:OS 加载 MPU、OS 时间片、OS Resource Manager、OS 启动 DAM ACL。所以 Safety OS 自身必须 ASIL D 开发——它是 trust base。
主流 Safety OS:
- Vector MICROSAR Safety(AUTOSAR Classic ASIL D)— 车规事实标准
- ETAS RTA-OS Safety(AUTOSAR Classic ASIL D)
- AUTOSAR Adaptive(R23-11+,Linux/QNX 上,ASIL B 类)
- PikeOS / SAFERTOS / SafeRTOS(独立厂商,Hypervisor)
- OSEK Safety(早期标准,渐被 AUTOSAR 替代)
Safety OS 通常带:SEooC 证书 + Safety Manual + Fault Injection 报告 — 客户可以引用,不必自己证明 ASIL D。
9. 常见误区
FFI 的误区集中在"以为做了某一维就完事",忽略 4 维必须并存。下面 5 条是评估员最常砍的。
- 只配 MPU 没配 DAM。DMA bug 仍能写到 ASIL D 区。每次 review 必查 DAM ACL。
- 共享 lib 没按 ASIL D 开发。printf bug 影响 ASIL D task = 软件共因。
- 时间分区只靠 RTOS 优先级。优先级反转或 priority ceiling 误用,QM 仍能挤掉 D。必须有 OS 强制 budget timer。
- DFA 表只列硬件资源,忘了软件。Library / OS service / Trap handler 也是共享资源,必须分析。
- FFI 论证只给一份"原则上隔离"声明。评估员要看每个共享资源逐项的证据,不接受 boilerplate。
核心要点
- FFI 4 维:Memory / Time / Communication / Resource,必须全部隔离。
- 没 FFI 证 = 全按最高 ASIL 开发(Annex E 强制规则)。
- MPU + DAM 双层:MPU 管 CPU,DAM 管 DMA/HSM/Ethernet master。
- 时间分区靠 OS 切片:OS budget timer + CPU WD + 外部 SBC WD 三层。
- 通信靠 E2E + SecOC:CRC/Counter/DataID + HMAC(可选)。
- 资源静态分配,不允许 dynamic request。
- DFA 是 FFI 验证工具——逐项穷举共享资源 + 给证据。
- 共享 lib 按 ASIL D 开发,或维护两份独立 lib。
- Safety OS 是 FFI 的 trust base,自身必须 ASIL D + SEooC。
- FFI ≠ ASIL Decomposition:前者共存,后者分担;两者可同时做。
Cross-references
- ← 索引
- topic-functional-safety — 功能安全 hub
- topic-iso26262-part9-asil-analyses — DFA + FFI 母章
- Hypervisor/混合关键度整合深度 — 本页讲单核/单 OS FFI,它讲多核 SoC + hypervisor 多 VM 的 FFI(干扰通道/多核 WCET/资质)
- topic-asil-decomposition — Decomposition(对比 FFI)
- topic-aurix-tc3xx-asil-d — MPU + DAM 硬件实现
- topic-mpc5744-mc33907-integration — NXP MPU + SMPU
- topic-can-e2e-secoc — 通信分区机制
- topic-stl-bist-runtime-selftest — STL 占用 time slice
- topic-safety-mechanism-catalog — 机制大全
- topic-software-safety — Safety OS 与软件流程