第4章 ASIL分解与冗余:ASIL分解原则、独立性与共存性分析

各位工程师,咱们今天聊一个在功能安全实战中非常核心的话题——ASIL分解与冗余。

说实话,我刚入行那会儿,对ASIL分解的理解就是“把高等级拆成低等级,好做一点”。后来在项目里吃过亏才明白,这玩意儿远没那么简单。你拆得不对,评审专家一眼就能看出来,甚至可能直接判定你的安全概念无效。

好,咱们一步步来。

4.1 为什么需要ASIL分解?

先问一个问题:一个系统要求ASIL D,你怎么办?

最直接的办法——所有相关组件都按ASIL D开发。但这样做的代价非常高:

  • 开发成本飙升(ASIL D的验证、确认工作量是ASIL B的3-5倍)
  • 供应链受限(能提供ASIL D级器件的供应商很少)
  • 开发周期拉长(每个环节都要更严格的评审和测试)

所以,ISO 26262给了我们一条路:ASIL分解。

它的核心思想是:把一个高ASIL等级的安全需求,分配给两个或多个相互独立的要素,每个要素承担较低的ASIL等级,但组合起来仍然满足原来的安全目标。

关键原则:ASIL分解不是降低安全目标,而是通过架构冗余来分担开发严苛度。

4.2 ASIL分解的数学规则

ISO 26262-9第5章给出了明确的分解规则。我习惯用一张表来记:

原始ASIL 分解方案1 分解方案2 分解方案3
ASIL D ASIL C(D) + ASIL A(D) ASIL B(D) + ASIL B(D) ASIL D(D) + ASIL D(D)(不推荐)
ASIL C ASIL B(C) + ASIL A(C) ASIL C(C) + ASIL C(C)(不推荐) —
ASIL B ASIL A(B) + ASIL A(B) ASIL B(B) + ASIL B(B)(不推荐) —
ASIL A 不允许分解 — —

注意看括号里的标注——ASIL C(D) 表示“这个要素承担的是从ASIL D分解出来的ASIL C需求”。

举个例子:一个ASIL D的转向系统,你可以拆成:

  • 主控制器:ASIL C(D)
  • 监控控制器:ASIL A(D)

或者两个都是ASIL B(D)。

我的经验:实际项目中,我倾向于用“ASIL B(D) + ASIL B(D)”的方案。为什么?因为ASIL A的验证虽然简单,但监控路径的覆盖率要求反而容易出问题。两个ASIL B,开发工作量均衡,评审时也更容易解释。

4.3 独立性与共存性——分解的前提条件

好,规则知道了。但你以为随便拆就行?

ISO 26262明确要求:分解后的两个要素必须满足“独立性”和“共存性”。

这两个概念,我当年在项目里被审核员问得满头大汗。咱们一个一个说。

4.3.1 独立性

独立性,说白了就是:一个要素失效,不能导致另一个要素也失效。

具体包括:

  • 硬件独立性:不能共用电源、时钟、复位、通信总线(除非有足够的隔离)
  • 软件独立性:不能共用内存空间、堆栈、全局变量(除非有MPU/MMU保护)
  • 时序独立性:一个任务的死循环不能阻塞另一个任务的执行
  • 故障独立性:一个要素的故障模式不能传播到另一个要素

我曾经踩过的坑:在一个EPS项目中,我们把主控和监控放在同一颗MCU上,用了不同的核。审核员问:“你们怎么保证L2 Cache的故障不会同时影响两个核?”我们当时答不上来。后来不得不加了一颗外部看门狗做独立监控,才过了评审。

4.3.2 共存性

共存性,意思是:两个要素在同一系统中运行时,不会互相干扰到对方无法完成安全功能。

举个例子:

  • 主控制器占用80%的CPU,监控控制器只分到5%——这算共存吗?算,只要监控能在5%的算力内完成它的安全任务。
  • 但如果主控制器频繁抢占总线,导致监控控制器的CAN报文发送延迟超过100ms——这就违反了共存性。

共存性分析通常需要做:

  1. 资源预算分析:CPU、内存、总线带宽、中断延迟
  2. 最坏情况执行时间(WCET)分析
  3. 干扰分析:一个要素的异常行为(如DMA溢出)对另一个的影响

4.4 ASIL分解的架构模式

实际项目中,我见过几种常见的分解架构:

架构模式 描述 典型应用 独立性要求
双MCU异构 主控+监控各用一颗不同型号的MCU EPS、线控制动 高(物理隔离)
同构双核 同一颗MCU的两个核,运行不同软件 ADAS域控制器 中(需考虑共享资源)
软件多样性 同一硬件,运行两套不同算法 传感器信号校验 低(需做故障注入验证)
时间多样性 同一硬件,不同时间片执行 安全气囊点火 低(需做时序分析)

我个人最推荐的是双MCU异构方案。虽然成本高一点,但独立性证据最容易拿。审核员一看两颗不同型号的MCU,各自独立供电、独立晶振,基本就不会再纠缠独立性问题了。

4.5 ASIL分解的文档要求

分解不是口头说说就行的。ISO 26262要求你在以下文档中明确记录:

  • 安全计划:说明分解策略和理由
  • 技术安全概念(TSC):描述分解后的架构和接口
  • 硬件安全需求规范(HSR):每个要素的ASIL等级
  • 软件安全需求规范(SSR):同上
  • 安全案例:论证分解后的系统仍然满足安全目标

一个小技巧:我在写安全案例时,会专门画一张“ASIL分解追溯表”,把原始安全目标、分解后的要素、每个要素的ASIL、独立性证据、共存性分析结果全部列在一张表里。审核员看到这张表,通常会很满意。

4.6 知识结构图:ASIL分解与冗余核心逻辑

下面这张图,是我自己总结的ASIL分解决策流程。你可以在项目里直接参考:

ASIL分解与冗余核心逻辑图 ASIL分解决策流程 原始安全目标 ASIL D 是否可分解为两个独立要素? 保持原ASIL D 否 选择分解方案 是 ASIL B(D) + ASIL B(D) 独立性分析 共存性分析 ⚠ 注意: 独立性或共存性不满足时,不能进行ASIL分解。 必须重新设计架构或增加隔离措施。

4.7 实战中的常见误区

最后,我总结几个在项目评审中经常被挑战的点:

  1. 误以为分解后可以降低硬件随机失效率指标:ASIL分解只影响开发流程的严苛度,不影响硬件随机失效率的量化目标。ASIL D的PMHF目标仍然是10-8/h,不会因为分解就变成10-7/h。
  2. 忽略“共同原因失效”分析:两个要素虽然独立,但如果它们用了同一颗晶振、同一个电源芯片,那这个共享部件就是共同原因失效点。必须做专门的共同原因失效分析(CCF)。
  3. 软件分解后不做“多样化实现”:如果两个要素的软件是同一团队写的,甚至用了同一套算法库,那独立性就大打折扣。我建议至少做到:不同开发团队、不同编程语言、不同算法原理。
  4. 共存性分析只做静态分析:很多团队只做资源预算表,不做动态干扰测试。审核员会问:“你怎么证明主控的DMA传输不会把监控的代码区冲掉?”这时候你得拿出内存保护单元(MPU)的配置和测试报告。

我曾经见过一个项目:他们把ASIL D的制动系统分解成两个ASIL B,但两个控制器共用了一根I2C总线做心跳检测。结果审核员直接指出:“这根I2C总线本身是QM的,它的故障会导致两个控制器同时失去心跳——你们的独立性在哪里?”最后不得不加了一路独立的硬线信号。

嗯,ASIL分解这块内容确实不少。但只要你掌握了“独立性”和“共存性”这两个核心,再配合合理的架构设计,就能在安全性和开发成本之间找到平衡点。