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开发,那成本……嗯,你懂的。

所以我们做分解:

  1. 安全目标:防止非预期的转向扭矩输出,导致车辆失控。
  2. 分解方案:
    • 主扭矩路径(传感器+主MCU+电机驱动):分配ASIL B
    • 监控路径(独立监控芯片+看门狗+冗余切断电路):分配ASIL B
  3. 独立性要求:两条路径必须相互独立——不能共用同一个晶振、不能共用同一个电源轨、不能共用同一个ADC通道。

这里我画了一张架构图,帮你理解这个分解逻辑:

EPS系统ASIL分解架构图 安全目标:ASIL D 分解 主扭矩路径:ASIL B 监控路径:ASIL B 包含组件: • 扭矩传感器(ASIL B) • 主MCU(ASIL B) • 电机驱动(ASIL B) 包含组件: • 独立监控芯片(ASIL B) • 看门狗定时器(ASIL B) • 冗余切断电路(ASIL B) 独立性要求(关键!) • 不能共用同一个晶振时钟源 • 不能共用同一个电源轨(需独立LDO) • 不能共用同一个ADC通道

你看,通过分解,我们把一个ASIL D的系统,变成了两个ASIL B的子系统。每个子系统单独开发、单独测试、单独认证。只要它们之间满足独立性要求,合起来就能覆盖原来的ASIL D安全目标。

注意:独立性不是嘴上说说就行的。我曾经在一个项目里吃过亏——两条路径用了同一个电源芯片的不同输出通道,审核员直接开了不符合项。因为如果电源芯片本身失效,两条路径同时掉电,那分解就白做了。所以独立性必须做到“共因失效”分析,任何可能同时影响两条路径的故障点都要排除。

3.5 分解后的验证策略

分解完了,怎么验证?总不能说“我拆了,所以安全了”吧?

这里有个原则:分解后的每个组件,都要按照它分配到的ASIL等级进行验证。

拿上面的EPS例子来说:

  • 主路径的MCU软件:按ASIL B要求做单元测试、集成测试、覆盖率分析
  • 监控路径的监控芯片:按ASIL B要求做硬件FMEDA、故障注入测试
  • 两条路径的接口:要做“故障耦合分析”,确保一条路径的故障不会传播到另一条

另外,还要做安全确认——在系统层面验证,分解后的架构确实能满足原来的ASIL D安全目标。这通常通过故障注入测试来完成:在一条路径上注入故障,看另一条路径能不能正确响应。

一个小技巧:做故障注入测试时,我习惯先做“单点故障”测试,再做“多点故障”测试。因为审核员最喜欢问的就是:“如果两个独立故障同时发生,系统还能安全吗?”虽然ISO 26262对多点故障的要求没那么严格,但提前准备好答案,总比现场被问住强。

3.6 小结

ASIL分解是功能安全开发中非常实用的技术。它让我们在安全性和成本之间找到平衡点。但记住:

  • 分解不是偷懒,而是用更精细的架构设计来满足安全目标
  • 独立性是分解的命脉,任何共因失效都会让分解失效
  • 分解后的验证不能打折扣,每个组件都要按分配等级严格测试

嗯,这一章的内容就到这儿。下一章咱们聊聊安全需求怎么写——这可是功能安全开发的“地基”,地基打不好,后面全白搭。