3. ASIL等级与分解:ASIL等级定义、ASIL分解原则、ASIL分解示例
3.1 ASIL等级到底是个啥?
说实话,刚入行那会儿,我对ASIL的理解就是“安全等级越高越好”。后来被一个老专家怼了一句:“你给雨刮器电机上ASIL D,成本翻三倍,客户买单吗?”
嗯,从那以后我才真正开始琢磨——ASIL不是越高越好,而是“刚刚好”。
ASIL的全称是Automotive Safety Integrity Level,汽车安全完整性等级。它定义了系统在发生故障时,对人的伤害程度有多严重。ISO 26262把它分成了四个等级:
| ASIL等级 | 严重度(Severity) | 暴露概率(Exposure) | 可控性(Controllability) | 典型场景 |
|---|---|---|---|---|
| ASIL A | 轻伤 | 低 | 容易控制 | 车门锁、车窗 |
| ASIL B | 轻伤~重伤 | 中 | 一般可控 | 雨刮器、大灯 |
| ASIL C | 重伤~生命危险 | 高 | 较难控制 | 制动辅助、转向 |
| ASIL D | 致命 | 极高 | 几乎不可控 | 线控制动、线控转向 |
你看,ASIL D对应的场景,基本都是“一旦失效,人可能就没了”。所以它的开发流程要求也是最严格的——从需求、设计、编码到测试,每一步都得有完整的证据链。
另外还有个QM(Quality Management),它不算ASIL等级,就是普通的质量管理。说白了,你做个车载娱乐系统,屏幕黑一下不会死人,那就走QM流程就够了。
核心要点:ASIL等级由三个参数决定——严重度(S)、暴露概率(E)、可控性(C)。三者组合查表得到最终等级。我见过不少新手直接拍脑袋定等级,这是大忌。一定要做HARA(危害分析与风险评估),拿数据说话。
3.2 ASIL分解原则——怎么把一个D拆成两个B?
你想想看,一个系统要求ASIL D,意味着整个开发链条都得按最高标准来。硬件要冗余、软件要多样化、测试要全覆盖……成本直接起飞。
那有没有办法“降级”呢?有,就是ASIL分解。
ASIL分解的核心原则是:一个高等级的安全需求,可以分配给多个独立的组件,每个组件承担一部分安全责任。只要这些组件相互独立,且合起来能满足原来的安全目标,那就行。
举个例子:
- ASIL D 可以分解为:ASIL D(D) = ASIL C(C) + ASIL A(A)
- 或者:ASIL D(D) = ASIL B(B) + ASIL B(B)
- 甚至:ASIL D(D) = ASIL D(D) + ASIL A(A)(但这样没意义,因为主件还是D)
这里有个关键点——分解后的等级不能低于ASIL A。你不能说“我把ASIL D拆成四个QM”,那等于没做安全。
我的经验:实际项目中,最常用的分解方式是ASIL D拆成两个ASIL B。因为ASIL B的开发成本比D低不少,但又保留了足够的安全冗余。我曾经在一个线控制动项目里就是这么干的——主控制器走ASIL B,备份控制器也走ASIL B,两路互相校验,最终通过了功能安全审核。
3.3 ASIL分解的数学规则
ISO 26262第9章给出了明确的分解规则,我整理成了一张表:
| 原始ASIL | 分解方式1 | 分解方式2 | 分解方式3 |
|---|---|---|---|
| ASIL D | ASIL C + ASIL A | ASIL B + ASIL B | ASIL D + ASIL A(不推荐) |
| ASIL C | ASIL B + ASIL A | ASIL C + ASIL A(不推荐) | — |
| ASIL B | ASIL A + ASIL A | ASIL B + ASIL A(不推荐) | — |
| ASIL A | 不能分解 | — | — |
注意看,ASIL A是不能分解的。为什么?因为再往下就是QM了,QM没有安全完整性要求,分解就失去了意义。
3.4 一个完整的ASIL分解示例
咱们拿一个具体的例子来说——电子助力转向系统(EPS)。
假设HARA分析后,EPS的转向扭矩控制功能被评定为ASIL D。如果整个系统都按ASIL D开发,那成本……嗯,你懂的。
所以我们做分解:
- 安全目标:防止非预期的转向扭矩输出,导致车辆失控。
- 分解方案:
- 主扭矩路径(传感器+主MCU+电机驱动):分配ASIL B
- 监控路径(独立监控芯片+看门狗+冗余切断电路):分配ASIL B
- 独立性要求:两条路径必须相互独立——不能共用同一个晶振、不能共用同一个电源轨、不能共用同一个ADC通道。
这里我画了一张架构图,帮你理解这个分解逻辑:
你看,通过分解,我们把一个ASIL D的系统,变成了两个ASIL B的子系统。每个子系统单独开发、单独测试、单独认证。只要它们之间满足独立性要求,合起来就能覆盖原来的ASIL D安全目标。
注意:独立性不是嘴上说说就行的。我曾经在一个项目里吃过亏——两条路径用了同一个电源芯片的不同输出通道,审核员直接开了不符合项。因为如果电源芯片本身失效,两条路径同时掉电,那分解就白做了。所以独立性必须做到“共因失效”分析,任何可能同时影响两条路径的故障点都要排除。
3.5 分解后的验证策略
分解完了,怎么验证?总不能说“我拆了,所以安全了”吧?
这里有个原则:分解后的每个组件,都要按照它分配到的ASIL等级进行验证。
拿上面的EPS例子来说:
- 主路径的MCU软件:按ASIL B要求做单元测试、集成测试、覆盖率分析
- 监控路径的监控芯片:按ASIL B要求做硬件FMEDA、故障注入测试
- 两条路径的接口:要做“故障耦合分析”,确保一条路径的故障不会传播到另一条
另外,还要做安全确认——在系统层面验证,分解后的架构确实能满足原来的ASIL D安全目标。这通常通过故障注入测试来完成:在一条路径上注入故障,看另一条路径能不能正确响应。
一个小技巧:做故障注入测试时,我习惯先做“单点故障”测试,再做“多点故障”测试。因为审核员最喜欢问的就是:“如果两个独立故障同时发生,系统还能安全吗?”虽然ISO 26262对多点故障的要求没那么严格,但提前准备好答案,总比现场被问住强。
3.6 小结
ASIL分解是功能安全开发中非常实用的技术。它让我们在安全性和成本之间找到平衡点。但记住:
- 分解不是偷懒,而是用更精细的架构设计来满足安全目标
- 独立性是分解的命脉,任何共因失效都会让分解失效
- 分解后的验证不能打折扣,每个组件都要按分配等级严格测试
嗯,这一章的内容就到这儿。下一章咱们聊聊安全需求怎么写——这可是功能安全开发的“地基”,地基打不好,后面全白搭。