3. 硬件随机失效的陷阱:低估了单点故障度量(SPFM)和潜在故障度量(LFM)的计算复杂度

各位做功能安全的同行,今天咱们聊聊FMEDA。说实话,这个工具看起来就是个表格,填填失效率、算算覆盖率,好像挺简单。但我见过太多项目,最后栽在这张表上。

为什么?因为SPFM和LFM的计算,远比你想象的要复杂。我刚开始做ISO 26262那会儿,也以为拿个Excel模板就能搞定。结果呢?评审会上被安全专家问得哑口无言。嗯,今天就把我踩过的坑,一个一个说给你听。

3.1 你以为的FMEDA vs 实际的FMEDA

很多人觉得FMEDA就是:

  • 把每个元器件的失效率填进去
  • 标出安全机制覆盖了哪些故障
  • 自动算出SPFM和LFM
  • 完事

但实际做起来,你会发现:

  • 失效率从哪里来?SN 29500?IEC 62380?还是供应商数据?
  • 安全机制的诊断覆盖率怎么定?拍脑袋还是仿真?
  • 潜伏故障和单点故障怎么区分?
  • 多比特故障怎么处理?

你看,问题一下子就多了。我有个项目,团队花了两周填表,结果评审时发现覆盖率全是估的,没有一条有数据支撑。最后全部返工,多花了两个月。

3.2 SPFM计算的三个常见误区

误区一:把诊断覆盖率当成SPFM

这是最典型的错误。SPFM不是简单的诊断覆盖率,它计算的是:

SPFM = 1 - (单点故障残余风险 / 所有单点故障风险)

说白了,你要考虑的是故障发生的概率,不是故障种类。举个例子:

故障类型 失效率(FIT) 诊断覆盖率 残余风险(FIT)
电阻短路 10 90% 1
电容开路 5 99% 0.05
芯片引脚故障 100 95% 5

你看,芯片引脚故障虽然覆盖率95%,但它的失效率高,残余风险反而最大。SPFM计算时,这个故障的权重就很大。

关键点:SPFM是加权平均,不是简单平均。高失效率的故障,哪怕覆盖率很高,也要重点关注。

误区二:忽略安全相关失效的占比

不是所有故障都影响安全。FMEDA里有个概念叫「安全相关失效占比」。我见过有人把所有故障都算进去,结果SPFM低得吓人。

实际上,你应该先筛选出:

  • 会导致违反安全目标的故障 → 算进去
  • 不影响安全的故障 → 排除
  • 被安全机制覆盖的故障 → 算残余风险

我在一个项目中,发现某个电源芯片的故障率很高,但仔细分析后发现,这些故障只会导致系统降级,不会违反安全目标。嗯,那就排除掉。SPFM一下子从85%跳到了97%。

误区三:低估了多比特故障的影响

SPFM计算时,多比特故障是个大坑。ISO 26262要求:

  • 如果安全机制能检测到多比特故障 → 算单点故障,被覆盖
  • 如果安全机制只能检测单比特 → 多比特故障算残余风险

举个例子,你用了ECC内存。ECC能纠正单比特错误,检测双比特错误。但如果是三比特错误呢?ECC检测不到,这就是残余风险。

注意:很多FMEDA工具默认只算单比特故障。如果你不手动配置多比特故障的失效率,SPFM会被高估。我曾经吃过这个亏,评审时被安全专家当场指出,场面一度非常尴尬。

3.3 LFM计算的隐藏难点

LFM比SPFM更复杂。为什么?因为它涉及时间因素。

LFM = 1 - (潜伏故障残余风险 / 所有潜伏故障风险)

这里的「潜伏故障」指的是:故障已经发生,但安全机制没检测到,而且驾驶员也没发现。说白了,就是「隐藏的炸弹」。

LFM计算有几个难点:

  • 诊断测试间隔:你的安全机制多久跑一次?每次跑多久?这直接影响潜伏故障的暴露时间。
  • 多重故障:两个潜伏故障同时发生,会不会导致安全目标违反?
  • 维修周期:车辆多久进一次4S店?这决定了潜伏故障的最大存在时间。

我记得有个项目,LFM怎么算都达不到90%。后来发现,是因为诊断测试间隔设得太长——每100ms跑一次,但故障暴露时间需要10ms。嗯,把测试间隔缩短到10ms,LFM就达标了。

我的建议:LFM计算时,一定要明确诊断测试的周期和覆盖率。不要用「假设每100ms检测一次」这种模糊说法。要写清楚:哪个安全机制,在什么条件下,多长时间检测一次,覆盖率是多少。

3.4 如何正确使用FMEDA工具

工具只是工具,关键是人。我总结了几条经验:

  1. 先做架构分析,再做FMEDA。 很多人上来就填表,结果架构都没定。先画功能框图,标出安全相关路径,再开始计算。
  2. 失效率要有来源。 不要自己编。用SN 29500、IEC 62380、或者供应商的实测数据。评审时,专家会问:「这个失效率哪里来的?」
  3. 诊断覆盖率要有依据。 仿真数据、故障注入测试、或者供应商提供的文档。不要写「假设90%」。
  4. 区分单点故障和潜伏故障。 这是FMEDA的核心。单点故障是「一发生就出事」,潜伏故障是「发生了但没被发现,等另一个故障一起出事」。
  5. 做敏感性分析。 改变失效率、覆盖率、测试间隔,看看SPFM和LFM的变化。这能帮你找到最关键的参数。

避坑指南:我曾经在一个项目中,FMEDA算出来SPFM=99%,LFM=95%,看起来完美。但评审时专家问:「你的安全机制之间有没有共因失效?」我愣住了。后来发现,两个安全机制用了同一个时钟源,一个失效两个都失效。嗯,共因失效分析是FMEDA的补充,千万别漏了。

3.5 一个实际案例

最后,分享一个我实际做过的案例。一个EPS(电动助力转向)系统,ASIL D等级。

刚开始,团队用Excel做了FMEDA,SPFM=98.5%,LFM=92.3%。看起来达标了。但评审时,专家指出:

  • 扭矩传感器的失效率用了供应商的典型值,但实际应用中温度更高,失效率应该乘以1.5
  • 诊断覆盖率是基于仿真,没有故障注入测试验证
  • 潜伏故障的测试间隔写的是「每100ms」,但实际代码里是每200ms

修正后:SPFM=96.2%,LFM=88.7%。LFM不达标。

怎么办?我们做了三件事:

  1. 优化诊断代码,把测试间隔从200ms降到50ms
  2. 增加一个额外的安全机制,覆盖原来没覆盖到的故障模式
  3. 做故障注入测试,验证诊断覆盖率

最终,LFM提升到了91.5%,通过了评审。

你看,FMEDA不是填表游戏。它需要你对硬件、软件、系统架构都有深入理解。工具只是辅助,真正的价值在于分析过程。

嗯,今天就聊到这里。下次咱们聊聊「软件功能安全的常见陷阱」,到时候见。