ASIL分解的适用条件:冗余路径、独立性、安全目标分配

各位同学,咱们接着聊ASIL分解。上一章我讲了ASIL分解的基本概念,说白了就是把一个高安全等级的要求,拆成两个低安全等级的要求,然后通过冗余和独立来实现。但这里有个关键问题——不是所有场景都能随便拆的。

我见过不少项目,工程师一上来就想做ASIL分解,觉得这样能降低开发成本。结果呢?评审的时候被安全专家怼回来,说条件不满足。嗯,今天我就把这三个硬性条件掰开揉碎了讲清楚。

条件一:冗余路径要求

ASIL分解的第一个前提,是你得有两条或以上的冗余路径。为什么?

你想想看,如果只有一个通道,那这个通道要是挂了,整个功能就没了。分解之后的安全目标要求两个通道同时失效才出问题,所以你必须要有冗余。

核心原则:分解后的每个子元素,都必须能独立承担分解前的安全目标。不能出现“一个干活、一个睡觉”的情况。

我在做EPS(电动助力转向)项目时遇到过这种情况。转向扭矩传感器的ASIL D要求,我们想分解成两个ASIL B的传感器通道。但问题是,这两个通道必须都能独立检测到扭矩异常,并且各自输出有效信号。如果其中一个通道只是做校验,不参与控制,那对不起,这不叫冗余路径。

冗余路径的典型形态有这几种:

冗余类型 说明 常见场景
硬件冗余 两套独立的传感器/执行器 双角度传感器、双刹车回路
软件冗余 两套独立算法或实现 不同语言实现、不同计算逻辑
信息冗余 通过不同物理量推导同一结果 车速=轮速 vs 车速=IMU积分
时间冗余 不同时刻的采样/计算 多周期投票、时序多样性

我的经验:硬件冗余最直观,但成本也最高。软件冗余便宜,但要小心共因失效——两个算法都用同一个传感器数据,那传感器一坏,两个都完蛋。

条件二:独立性要求(自由干扰)

这是ASIL分解里最容易踩坑的地方。独立性的核心是什么?

说白了,就是两个冗余路径之间不能互相干扰。一个通道出故障,不能把另一个通道也带偏。ISO 26262里管这个叫“自由干扰”(Freedom from Interference)。

我曾经在一个ADAS项目中吃过这个亏。两个ASIL B的摄像头模块,共用同一个电源轨。结果一个模块短路,直接把电压拉低,另一个模块也跟着掉电。评审的时候安全专家直接说:你们这个独立性不满足,两个模块之间有共因失效。

避坑指南:独立性不只是物理隔离,还包括:

  • 电源隔离:每个通道独立供电,或者至少有过流保护
  • 时钟隔离:独立晶振或PLL,避免时钟故障传播
  • 通信隔离:独立总线或消息ID,防止数据污染
  • 内存隔离:独立RAM区域,MPU保护
  • 时序隔离:独立时间片,避免任务饿死

怎么证明独立性?我一般用这个方法:

  1. 故障注入测试:故意让一个通道出故障,看另一个通道是否受影响
  2. 失效分析:做FMEA或FTA,找出所有可能的共因失效路径
  3. 安全机制:对共享资源加保护,比如ECC内存、看门狗、硬件防火墙

这里有个容易混淆的点——独立性和多样性。独立性是说两个通道不互相影响,多样性是说两个通道用不同的方式实现。两者不是一回事。你可以有独立但不多样(两个一样的硬件),也可以有多样但不独立(两个算法共享同一个传感器)。

我个人习惯,在做ASIL分解时,优先保证独立性,多样性作为加分项。因为独立性是硬性要求,多样性是推荐做法。

条件三:分解后的安全目标分配

好,前两个条件满足了,接下来就是怎么把分解后的安全目标分配到具体的元素上。

ASIL分解不是简单地把ASIL D切成两个ASIL B就完事了。你得明确:

  • 每个子元素承担什么安全目标?
  • 每个子元素分配什么ASIL等级?
  • 组合起来怎么验证满足原始安全目标?

我画了一张图,把整个流程串起来:

ASIL分解适用条件与安全目标分配流程 原始安全目标 (ASIL D) 条件1: 是否存在冗余路径? 条件2: 是否满足独立性要求? 通过 → 执行ASIL分解 子元素1 (ASIL B) 安全目标: 检测扭矩异常 子元素2 (ASIL B) 安全目标: 检测扭矩异常 安全机制 (ASIL B) 监控/诊断/比较 验证: 组合满足原始ASIL D要求 关键点 两个子元素必须独立 且都能承担原始目标

分配安全目标时,我建议遵循这几个原则:

  • 对等分配:两个子元素承担相同的安全目标,只是ASIL等级降低
  • 互补分配:一个负责检测,一个负责响应,组合起来覆盖原始目标
  • 分层分配:主路径承担主要目标,监控路径承担诊断目标

实际案例:我之前做线控制动项目,原始安全目标是“在150ms内产生0.6g减速度”,ASIL D。分解后:

  • 主制动通道(ASIL B):负责正常制动,目标150ms内响应
  • 冗余制动通道(ASIL B):负责备份制动,目标200ms内响应
  • 监控模块(ASIL B):负责检测主通道失效,触发切换

三个子元素组合起来,通过FTA分析证明,单点失效不会导致安全目标违背,满足ASIL D要求。

三个条件的逻辑关系

这三个条件不是并列的,而是递进的:

  1. 先看有没有冗余路径——没有冗余,别谈分解
  2. 再看独立性够不够——有冗余但不独立,等于白搭
  3. 最后分配安全目标——明确每个子元素干什么、承担什么ASIL

我见过最典型的失败案例,就是跳过独立性检查。项目组觉得“我们有两个传感器,肯定能分解”,结果一查,两个传感器共用同一个参考电压源。那个电压源一漂移,两个传感器读数一起偏。独立性不满足,分解无效。

重要提醒:ASIL分解不是万能的。如果系统本身就不具备冗余和独立的条件,强行分解只会让安全论证漏洞百出。有时候,老老实实做ASIL D开发,比硬凑分解更靠谱。