第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——这就违反了共存性。
共存性分析通常需要做:
- 资源预算分析:CPU、内存、总线带宽、中断延迟
- 最坏情况执行时间(WCET)分析
- 干扰分析:一个要素的异常行为(如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分解决策流程。你可以在项目里直接参考:
4.7 实战中的常见误区
最后,我总结几个在项目评审中经常被挑战的点:
- 误以为分解后可以降低硬件随机失效率指标:ASIL分解只影响开发流程的严苛度,不影响硬件随机失效率的量化目标。ASIL D的PMHF目标仍然是10-8/h,不会因为分解就变成10-7/h。
- 忽略“共同原因失效”分析:两个要素虽然独立,但如果它们用了同一颗晶振、同一个电源芯片,那这个共享部件就是共同原因失效点。必须做专门的共同原因失效分析(CCF)。
- 软件分解后不做“多样化实现”:如果两个要素的软件是同一团队写的,甚至用了同一套算法库,那独立性就大打折扣。我建议至少做到:不同开发团队、不同编程语言、不同算法原理。
- 共存性分析只做静态分析:很多团队只做资源预算表,不做动态干扰测试。审核员会问:“你怎么证明主控的DMA传输不会把监控的代码区冲掉?”这时候你得拿出内存保护单元(MPU)的配置和测试报告。
我曾经见过一个项目:他们把ASIL D的制动系统分解成两个ASIL B,但两个控制器共用了一根I2C总线做心跳检测。结果审核员直接指出:“这根I2C总线本身是QM的,它的故障会导致两个控制器同时失去心跳——你们的独立性在哪里?”最后不得不加了一路独立的硬线信号。
嗯,ASIL分解这块内容确实不少。但只要你掌握了“独立性”和“共存性”这两个核心,再配合合理的架构设计,就能在安全性和开发成本之间找到平衡点。