Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

2.7 硬件安全需求与SPFM——你的第一道免疫防线有多强?

下午两点半,你打开FMEDA(Failure Mode, Effects and Diagnostic Analysis)表格,屏幕上密密麻麻排列着47行。那是你负责的转向ECU(电子控制单元)的全部硬件元器件。每个元器件旁边都有一个从供应商可靠性手册里查到的数字:失效概率,单位是FIT(Failure In Time,1 FIT = 10⁻⁹/h)。你的任务看起来很残酷:从这47个元器件里找出每一个可能“独走“的孤立失效点,然后证明。你布设的安全机制覆盖率加上这些器件本身的安全特性,能消灭至少99%的单点失效隐患。没错,因为你们对标的是ASIL D(最高安全等级)。

你揉了揉眼睛,在“诊断覆盖率“那一列敲下一个百分比。“60%够不够?不,那只是’低’覆盖。“你删掉,改成90%,想了想,又删掉,改成99%。

一、从FSR到HSR:当功能安全需求落地为硬件命题

在正式开始计算SPFM之前,我们必须先搞清楚一个问题:硬件安全需求(Hardware Safety Requirements, HSR)是怎么来的?

在第2.6节中,你从功能安全概念(Functional Safety Concept)推导出了一组功能安全需求(Functional Safety Requirements, FSR)。FSR描述的是“系统应该怎样才安全“,但它还是相对抽象的:比如“系统应能在检测到转向扭矩传感器故障后200ms内进入安全状态“。这个句子里的每一个词,落到硬件层面都需要重新翻译:

  • “检测到” → 需要什么样的硬件检测电路?(比较器?冗余采样通道?)
  • “转向扭矩传感器故障” → 传感器的哪些失效模式需要被覆盖?(开路?短路?漂移?)
  • “200ms内” → 这个定时约束对硬件意味着什么?(看门狗超时周期?故障响应时间间隔FTTI的要求?)
  • “进入安全状态” → 安全状态在硬件层面如何实现?(切断电机驱动?拉低使能信号?)

ISO 26262-5:2018的第6章对这一步有明确要求:硬件安全需求应从FSR中推导,并包含安全机制及其属性的详细描述(Clause 6.4.1)。具体来说,每一条硬件安全需求至少应包含:

  1. 控制对象:哪个硬件元器件或子电路负责满足这条需求;
  2. 失效检测机制:用什么方式检测失效(电压监控、电流监控、时序检查、冗余比较等);
  3. 故障响应时间:从检测到故障到进入安全状态的最大允许时间;
  4. 安全状态定义:故障后硬件的预期行为(高阻态、输出接地、进入复位等);
  5. 诊断覆盖率要求:该安全机制需要达到的诊断覆盖等级(低/中/高)。

二、硬件故障分类:四类故障决定你的SPFM分母

ISO 26262-5:2018的Annex B给出了硬件随机故障的完整分类体系。你需要把这47个元器件的所有潜在故障模式,全部归入以下四类中的某一类。这四类故障的定义是精确的、互斥的,并且直接决定了SPFM公式的分子与分母。

2.1 单点故障(Single-Point Fault, SPF)

定义(Annex B):故障发生在某个硬件元素上,且该硬件元素没有被任何安全机制覆盖。此故障本身就会直接导致安全目标的违背。

你是一个免疫系统。单点故障就是你身体里某个完全没有免疫细胞巡逻的角落突然爆发的感染:没有抗体识别,没有吞噬细胞响应,病原体从出现到致命一步到位。

在硬件层面,SPF的典型场景是:

  • MCU的GPIO引脚对地短路,导致电机使能信号始终拉高,安全状态无法进入;
  • 并没有任何检测电路监控这个GPIO引脚的电平状态;
  • 故障发生 = 安全目标违背,中间没有任何缓冲。

SPF是整个功能安全设计中最危险的故障类型。对于ASIL D系统,SPF的“零容忍“原则虽然不是一个硬性的零值要求,但SPFM ≥ 99% 意味着最多只有1%的失效概率能以SPF或RF的形式漏过去。

2.2 残余故障(Residual Fault, RF)

定义(Annex B):随机硬件故障中,未被安全机制控制的部分。当诊断覆盖率为100%时,RF为零;当覆盖率低于100%时,RF就是那没被覆盖的“尾巴“。

和人体免疫系统的类比极为贴切:你打了疫苗(安全机制),体内产生了针对某病毒的抗体。但抗体覆盖率不是100%:有极少数病毒颗粒可能逃逸抗体识别。这些逃逸的部分就是RF。

公式表达: $$\lambda_{RF} \leq \lambda \times \left(1 - \frac{K_{DC,RF}}{100%}\right)$$

其中 $K_{DC,RF}$ 是对残余故障的诊断覆盖率。注意这里的“≤“。你可以在分析中保守地假设覆盖率不理想,但绝不能乐观地向上取整。

SPF和RF在SPFM公式中被捆绑处理,原因很简单:从安全目标的角度看,SPF和RF的效果是一样的。它们都逃过了所有安全机制的拦截,直接命中安全目标。 区别只在于SPF是从头到尾都没有安全机制覆盖,而RF是有安全机制但没完全遮住。

2.3 多点故障(Multiple-Point Fault, MPF)

定义(Annex B):与另一个或多个独立硬件故障组合在一起,才会导致安全目标违背的故障。

MPF是功能安全分析中最微妙的一类。它本身单独存在时并不致命:就像一个人感染了潜伏性结核菌,没有症状,不影响正常生活。但一旦免疫系统因其他原因被抑制(另一个独立故障出现),潜伏感染就会暴发。

ISO 26262-5对MPF做了进一步细分:

  • 可检测的多点故障(Detected MPF, MPF_D):故障发生后,在多点故障检测间隔(MPFDI, Multiple-Point Fault Detection Interval)内被安全机制发现。这类故障的危害性极低,因为你能在它“找到同伙“之前把它处理掉。
  • 可感知的多点故障(Perceived MPF, MPF_P):在车辆正常运行过程中,驾驶员能直接感知到故障的存在(比如仪表盘已经亮灯了)。
  • 潜伏故障(Latent MPF, MPF_L):既没有被安全机制检测到,也没有被驾驶员感知到,静静地潜伏在系统里,等待和另一个独立故障“合谋“。

潜伏多点故障正是LFM(Latent Fault Metric,潜在故障度量)的核心关注对象。这正是下一节2.8的主题。

2.4 安全故障(Safe Fault, S)

定义(Annex B):不会显著增加安全目标违背概率的故障。

对应免疫系统:你的皮肤每天都有大量表皮细胞死亡脱落。这是正常现象,不威胁你的生存。硬件层面同理:一个LED指示灯烧坏了,不影响制动功能,属于安全故障。

三、失效概率的完整拼图

ISO 26262-5:2018明确要求:一个硬件元素的总失效率λ必须能被分解为上述四类的总和(Annex C.1, Equation C.1):

$$\lambda = \lambda_{SPF} + \lambda_{RF} + \lambda_{MPF} + \lambda_S$$

每个希腊字母后的下标,不是随意标记的学术分类,而是你FMEDA表格上必须精确填入的FIT数值。这47个元器件,每个都能画出这样一张分类饼图:有些元器件的SPF占比高(危险!需要加强安全机制覆盖),有些元器件的S占比高(放心!大部分失效模式无害),而MPF占比大的器件需要额外关注潜伏故障的检测间隔。

四、SPFM公式:你的免疫防线覆盖率精确计算

现在你摊开FMEDA表格,准备算SPFM。SPFM(Single-Point Fault Metric)衡量的是:在所有硬件随机失效中,有多大比例既不是单点故障也不是残余故障:即要么被安全机制检测并控制了,要么本身是安全的。

ISO 26262-5:2018 Equation C.7(规范性附录C,不是资料性附录。所以是强制使用的公式):

$$SPFM = 1 - \frac{\sum_{SR,HW}(\lambda_{SPF} + \lambda_{RF})}{\sum_{SR,HW}(\lambda)} = \frac{\sum_{SR,HW}(\lambda_{MPF} + \lambda_S)}{\sum_{SR,HW}(\lambda)}$$

一步步解读这个公式:

分母 Σ_{SR,HW}(λ): 对所有安全相关硬件元素(SR,HW = Safety-Related Hardware)的总失效率求和——你ECU上全部47个硬件元器件所有安全相关失效模式的总失效率。注意,只计算和安全目标相关的硬件元素。那个LED指示灯如果与安全目标无关,可以不纳入分母。但一旦纳入,就是全部纳入。

分子中的减数 Σ(λ_SPF + λ_RF): 所有“直接威胁安全目标“的失效部分:单点故障全量,加上残余故障的全量。这代表了你的安全机制漏掉的那一部分威胁。

1 − [威胁/总量]: 剩下的就是被安全机制“免疫“掉的比例,也就是你的SPFM值。

等价公式 Σ(λ_MPF + λ_S) / Σ(λ): 从另一个角度看SPFM。你的安全防线“成功拦截“的部分。多点故障(无论检测还是潜伏,都是“不能单独致命“的)加上安全故障(完全不致命的)。

4.1 工作实例:算一遍SPFM

假设你的转向ECU的硬件故障分析汇总如下(单位:FIT):

故障类型符号数值(FIT)
单点故障λ_SPF2.3
残余故障λ_RF1.7
多点故障(含潜伏)λ_MPF35.0
安全故障λ_S61.0
总失效率λ_total100.0

代入SPFM公式:

$$SPFM = 1 - \frac{2.3 + 1.7}{100.0} = 1 - \frac{4.0}{100.0} = 1 - 0.04 = 0.96 = 96%$$

96%。对照ISO 26262-5:2018 Table 4的目标值,这个结果不理想:

ASIL等级SPFM最低要求
ASIL B≥ 90%
ASIL C≥ 97%
ASIL D≥ 99%

96%:ASIL B的要求轻松满足(90%),但离ASIL C的97%差1个百分点,离ASIL D的99%差整整3个百分点。如果你对标的是ASIL D(转向系统通常如此),你需要在FMEDA表上把某些元器件的诊断覆盖率从“中“提到“高“。这就是SPFM对硬件设计的反向驱动作用:计算不通过,打回。

4.2 SPFM如何“逼“你加安全机制

回到那47个元器件。假设你仔细审视FMEDA表格,发现一个特定的MOSFET驱动器(λ=8.0 FIT, 当前K_DC,RF=90%)贡献了0.8 FIT的RF:

在原方案中改用更高诊断覆盖率的安全机制(比如从“90%中覆盖“提升到“99%高覆盖“),RF将从0.8 FIT降至0.08 FIT,节省0.72 FIT。每挤出一个0.1 FIT的RF,你的SPFM就在向99%靠近一步。

这正是SPFM作为设计迭代驱动指标的价值:它不是事后检验的“成绩单“,而是在设计过程中持续告诉你:“这里还需要补安全机制,那里可以收手了”。

五、SPFM与诊断覆盖率的关系

SPFM公式本身并不显式包含“诊断覆盖率(Diagnostic Coverage, DC)“这个参数。但现实中,你无法绕开DC来谈SPFM,因为:

$$\lambda_{RF} = \lambda \times \left(1 - \frac{K_{DC,RF}}{100%}\right)$$

这里的 K_DC,RF 就是对残余故障的诊断覆盖率。ISO 26262-5:2018 Annex D将诊断覆盖率分为三个等级:

等级覆盖率范围典型实现机制
低(Low)≈ 60%仅检测引脚开路/短路
中(Medium)≈ 90%增加范围检查、合理性检查
高(High)≈ 99%冗余比较、Lockstep核心、ECC内存

对于ASIL D系统,如果你的安全机制只能达到“中“覆盖(~90%),意味着每个硬件元素还要留下大约10%的RF尾巴。在前述的例子中,如果总λ=100 FIT,光RF就得占几个FIT,SPFM很难达到99%。因此,ASIL D对关键安全路径上的元件通常要求“高“诊断覆盖率作为前提。

但这里有一个容易被误解的地方:SPFM计算中的λ_RF是所有硬件元素的RF之和,而诊断覆盖率是按单个元素逐个评估的。 你不能说“我用了99%覆盖的安全机制所以SPFM就是99%“:SPFM是全系统的加权平均值,取决于每个元器件的失效模式分布和你对每个模式分别施加的覆盖率。

六、免疫系统映射:SPFM作为功能安全的免疫基线

如果你把整个硬件系统当作一个有机体来理解,这四类故障和SPFM的免疫学对应关系就异常清晰了:

功能安全概念免疫学对应
单点故障(SPF)免疫缺陷:某个组织的局部完全没有免疫监视,病原体一旦出现就必然致病
残余故障(RF)免疫逃逸:疫苗诱导的抗体对病毒变种的覆盖不完全,少数病毒颗粒能躲过中和
多点故障(MPF)机会性感染潜伏:结核杆菌在肉芽肿中潜伏,个体免疫功能正常时不发病,须等免疫力下降才爆发
安全故障(S)无害共生/凋亡:皮肤角质细胞脱落、肠道菌群正常代谢——不构成威胁
SPFM免疫覆盖率基线:机体在面对所有已知病原体时,有多大比例能被免疫系统有效清除或无害化处理
安全机制抗体和免疫细胞:专门识别并清除特定威胁的效应分子与细胞
诊断覆盖率抗体亲和力/识别广度:抗体对特定抗原表位的结合效率,及对不同变种的交叉保护范围

SPFM = 99% 可以理解为: 你的免疫系统能识别并清除99%的已知威胁。剩下1%要么是免疫缺陷区域(SPF),要么是逃逸突变的残余风险(RF)。这1%就是你设计上必须接受并在其他层面(软件、流程、驾驶员警告)弥补的“残余风险“。

这个比喻还可以进一步延伸:ASIL D的SPFM≥99%相当于要求“群体免疫阈值“:一个有机体必须在面对绝大多数常见病原体时具备接近完美的即时免疫能力,因为它所处的环境(车辆行驶在高速公路上)不允许“先感染再产生抗体“的渐进免疫过程。故障必须被预防性检测,而不是反应性修复

本篇小结

  1. 硬件安全需求(HSR)从FSR推导而来,每条HSR包含:控制对象、检测机制、响应时间、安全状态、诊断覆盖率
  2. 硬件随机故障分四类:SPF、RF、MPF、S,总和为λ
  3. SPFM = 1 − Σ(λ_SPF + λ_RF) / Σ(λ)
  4. ASIL B/C/D的SPFM目标:≥90% / ≥97% / ≥99%
  5. SPFM驱动安全机制设计:不满足目标 → 提升诊断覆盖率或增加冗余

【下集预告】: SPFM盯着的是“一步致命“的故障,但有一种故障更阴险:它自己什么都不做,安静地潜伏着,等另一个故障出现时联手作案。你的外部看门狗芯片如果悄悄死了,系统不会报任何错——直到主MCU跑飞的那一天。下一节看LFM如何逼你给每一个“沉默的守护者“做定期体检。