Freedom from Interference(FFI)— 共存元素互不污染的工程实现

功能安全L3别名 Freedom from Interference · FFI · 共存元素 · Memory Partition · Time Partition · Safety OS · Cache Partitioning

本质与导读

本质:多个不同 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 退到 共存元素的最低等级。

FFI 4 个维度

维度主要威胁硬件机制软件机制DC
① 内存QM 写到 ASIL D 区MPU + DAMOS 加载 region 表≥ 99 %
② 时间QM 占住 CPUCPU WD + 外部 WDOS 固定时间片≥ 99 %
③ 通信QM 篡改消息独立总线 / chip-selectE2E 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 两步:

Flash + RAM 物理段分配 + MPU Region 配置

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 主周期内固定时间片

典型 10 ms 主周期的 budget 分配:

Slottaskbudget备注
0-0.5 msOS tick0.5 msschedule + WD refresh
0.5-3 msASIL D 控制律2.5 msFOC + Torque Safety
3-5 msASIL B 监视2 msSensor fusion
5-6 msSTL1 msCPU 自检切片
6-8.5 msQM 任务2.5 msUART / Diag / Comfort
8.5-10 msOS Idle1.5 msWD 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 消息。

物理隔离:

  • CAN-FD(主线 + 安全线)
  • SPI 各 chip-select 独立
  • Ethernet TSN 时间槽预留(IEEE 802.1Qbv)

逻辑隔离:

5. 资源分区 — 静态分配优先

CPU 内的 ADC / Timer / DMA / Peripheral 也是共享资源。FFI 准则:静态分配,不许动态争抢

资源分配策略
ADC 通道ASIL D 专用 ADC0;ASIL B 用 ADC1;QM 用 ADC2
PWM TimerASIL D 占 GTM ATOM0;QM 占 ATOM1
DMA 通道ASIL D 独占 DMA 0/1;QM 用 DMA 2/3
ADC triggerASIL D trigger 不接受软件触发

Safety OS 启动时锁死分配;运行期拒绝所有 dynamic resource request。

6. DFA 共享资源穷举

DFA(Dependent Failure Analysis)是 FFI 的验证工具,逐项穷举共享资源 + 在 4 维证明已隔离。这是 ASIL B 以上强制工作产品(Part 9-7)。

DFA 共享资源穷举

DFA 必查的共享资源 6 类:

类别共因风险隔离手段
电源(12 V)一停全停双独立电池 + isolation
时钟(PLL)PLL 故障全时序乱外部参考 + backup OSC + LoL 监视
通信总线QM 错挂占CAN-FD + ID 优先级 + Mailbox 限速
CPU CacheCache 污染Cache way partitioning,或 D 跑专核
DMA / 总线 master绕过 CPU MPUDAM ACL
Library软件共因共享 lib 按 ASIL D 开发

DFA 报告包含:共享资源清单 + 4 维隔离证据 + 残余风险评估 + 评估员可独立验证的引用。

7. FFI vs ASIL Decomposition

容易混淆的两件事——同样涉及"分两路"。

维度Freedom from InterferenceASIL Decomposition
目的多个 ASIL 元素 共存把一个高 ASIL 拆给两个低 ASIL 分担
必须独立?必须(4 维全)必须(两路独立 + DFA)
产物共存论证ASIL 降级合规 + 两路 SR
典型一颗 MCU 跑 D + B + QMEPS Safety:D = B + B 两路监视
Part 章节9-6 + Annex E9-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