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工具
工具只是工具,关键是人。我总结了几条经验:
- 先做架构分析,再做FMEDA。 很多人上来就填表,结果架构都没定。先画功能框图,标出安全相关路径,再开始计算。
- 失效率要有来源。 不要自己编。用SN 29500、IEC 62380、或者供应商的实测数据。评审时,专家会问:「这个失效率哪里来的?」
- 诊断覆盖率要有依据。 仿真数据、故障注入测试、或者供应商提供的文档。不要写「假设90%」。
- 区分单点故障和潜伏故障。 这是FMEDA的核心。单点故障是「一发生就出事」,潜伏故障是「发生了但没被发现,等另一个故障一起出事」。
- 做敏感性分析。 改变失效率、覆盖率、测试间隔,看看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不达标。
怎么办?我们做了三件事:
- 优化诊断代码,把测试间隔从200ms降到50ms
- 增加一个额外的安全机制,覆盖原来没覆盖到的故障模式
- 做故障注入测试,验证诊断覆盖率
最终,LFM提升到了91.5%,通过了评审。
你看,FMEDA不是填表游戏。它需要你对硬件、软件、系统架构都有深入理解。工具只是辅助,真正的价值在于分析过程。
嗯,今天就聊到这里。下次咱们聊聊「软件功能安全的常见陷阱」,到时候见。