3、功能安全生命周期:概念阶段、产品开发阶段、生产与运维阶段

聊到功能安全生命周期,我脑子里第一个蹦出来的词就是「全流程」。说白了,这不是一个点上的事,而是从你脑子里刚有个想法,一直到产品报废回收,整个链条都得管起来。

ISO 26262 把生命周期切成了三大块:概念阶段产品开发阶段生产与运维阶段。我习惯把这比作「想清楚、做出来、管到底」。咱们一个一个说。

3.1 概念阶段:把安全「想清楚」

这个阶段,说白了就是回答三个问题:
- 这东西要干嘛?
- 出啥事会要命?
- 怎么避免要命?

我个人习惯,在这个阶段花的时间越多,后面返工的次数就越少。你想想看,如果概念阶段没想明白,等到芯片都 Tape Out 了才发现安全目标定错了……那酸爽,我经历过一次就再也不想经历了。

3.1.1 项目定义与危害分析(HARA)

项目定义,就是把你做的这个电子系统到底是什么、用在什么车上、怎么用,全部写清楚。比如你做一个 NVIDIA DRIVE Orin 的域控制器,你得说清楚它接管了哪些功能、传感器怎么接入、执行器怎么控制。

然后就是 HARA(Hazard Analysis and Risk Assessment)。这一步我建议团队里一定要有懂车辆动力学的人参与。为什么?因为很多电子工程师觉得「软件崩了重启一下就行」,但在车上,软件崩了可能车就撞了。

HARA 的核心输出:
  • 危害事件列表(什么场景下、什么故障、导致什么后果)
  • ASIL 等级评定(QM / ASIL A / B / C / D)
  • 安全目标(Safety Goal)

举个例子,我记得在做一个 L2+ 的自动紧急制动项目时,HARA 分析发现「制动请求信号丢失」这个故障,在高速场景下 ASIL 等级直接飙到了 D。当时团队里还有人觉得「丢个信号而已,不至于吧」——嗯,等你看过事故报告就至于了。

3.1.2 功能安全概念(FSC)

有了安全目标,接下来就是怎么实现它。功能安全概念(Functional Safety Concept)就是把安全目标分解成具体的功能安全要求

比如安全目标是「制动请求信号丢失时,车辆必须在 200ms 内进入安全状态」。那功能安全要求可能包括:

  • 信号丢失检测机制(比如看门狗、心跳包)
  • 降级策略(比如切换到冗余通道)
  • 驾驶员告警(仪表盘亮灯 + 声音提示)

这里有个坑,我曾经踩过:功能安全概念写得过于抽象。比如「系统应检测故障并响应」,这种话写了等于没写。要写就写清楚:用什么检测、检测到什么程度算故障、响应时间是多少、响应动作是什么。

我的小技巧:写 FSC 的时候,脑子里想象一个测试工程师拿着这份文档,能不能写出测试用例。如果写不出来,说明不够具体。

3.2 产品开发阶段:把安全「做出来」

概念阶段是「纸上谈兵」,产品开发阶段就是「真刀真枪」了。这个阶段又分两条线:系统层面硬件/软件层面

3.2.1 系统层面:技术安全概念(TSC)

技术安全概念(Technical Safety Concept)是把功能安全要求翻译成具体的技术实现方案。说白了,就是告诉硬件工程师和软件工程师:「你们要做什么,以及做到什么程度。」

比如功能安全要求说「信号丢失要在 200ms 内检测到」,那技术安全概念就要写清楚:

  • 使用什么通信协议(比如 CAN FD 还是以太网)
  • 检测周期是多少(比如每 10ms 检查一次)
  • 冗余机制是什么(比如双通道交叉校验)

我记得在 NVIDIA 的一个项目中,技术安全概念里明确要求了 GPU 计算结果的锁步校验。当时硬件团队觉得「GPU 做锁步太浪费算力了」,但安全分析表明,如果不做锁步,单点故障覆盖率达不到 ASIL B 的要求。最后我们折中了一下:关键路径做锁步,非关键路径做软件自检。

3.2.2 硬件层面:安全机制与诊断覆盖

硬件安全机制,说白了就是「硬件自己怎么知道自己坏了」。常见的包括:

安全机制 说明 典型应用
ECC(纠错码) 检测并纠正内存单比特错误 DRAM、SRAM、Cache
锁步(Lockstep) 双核冗余执行,比较结果 CPU 核心、GPU 关键路径
BIST(内建自测试) 上电或运行时自检 逻辑电路、存储器
看门狗(Watchdog) 监控程序是否正常运行 MCU、SoC

这里我要强调一点:诊断覆盖率不是越高越好。你想想看,为了把覆盖率从 99% 提高到 99.9%,可能要多花 30% 的芯片面积和功耗。在汽车电子里,成本和功耗都是硬约束。所以我的建议是:够用就好,别过度设计

注意:硬件安全机制的设计,一定要考虑「共因失效」。我曾经见过一个设计,两个冗余通道用的是同一颗晶圆上的两个核心——结果一个电压波动,两个核心同时挂了。这叫什么?这叫「冗余了个寂寞」。

3.2.3 软件层面:安全架构与实现

软件层面的功能安全,核心是隔离监控

隔离,就是把安全相关的软件和非安全相关的软件隔离开。在 NVIDIA 的平台上,我们通常使用 Hypervisor 来做分区隔离。安全相关的功能跑在安全域(Safety Domain),非安全相关的功能跑在性能域(Performance Domain)。

监控,就是软件要时刻知道自己是不是还「活着」。常见的做法包括:

  • 程序流监控:检查关键代码的执行顺序和时间
  • 数据流监控:检查关键数据的完整性和时效性
  • 堆栈监控:防止堆栈溢出导致的安全问题

我举个例子,在实现 ASIL D 的软件组件时,我们用了三层监控:

  1. 硬件看门狗(最底层,保证系统不会死锁)
  2. 软件看门狗(中间层,检查任务是否按时执行)
  3. 逻辑监控(最上层,检查计算结果是否合理)

这三层监控,每一层都有自己的超时时间和恢复策略。我曾经在调试一个偶发性的死锁问题时,就是靠这三层监控的日志才定位到问题的——嗯,没有监控的话,这种问题基本没法复现。

3.3 生产与运维阶段:把安全「管到底」

产品开发完了,是不是就完事了?当然不是。功能安全生命周期里,生产和运维阶段同样重要。

3.3.1 生产阶段:安全相关的制造与测试

生产阶段的核心是:确保生产出来的每一颗芯片、每一块板子,都符合设计时的安全要求

这包括:

  • 生产测试:比如 ATE(自动测试设备)测试、老化测试、温度循环测试
  • 安全相关的特殊工艺:比如某些安全关键焊点需要 X 光检测
  • 可追溯性:每一颗芯片都能追溯到它的晶圆批次、封装批次、测试结果

我记得有一次,产线上反馈某批次芯片的 ECC 错误率偏高。我们花了三天时间,从晶圆厂到封装厂一路追溯,最后发现是某台测试机的探针接触不良导致的。如果没有可追溯性,这种问题根本查不出来。

我的建议:在生产阶段,一定要做「安全相关的 FMEA(失效模式与影响分析)」。不是分析产品本身,而是分析生产过程——比如「如果这台测试机坏了,会漏掉什么故障?」

3.3.2 运维阶段:监控、维护与召回

运维阶段,说白了就是产品到了用户手里之后,你怎么保证它一直安全。

这包括:

  • OTA 升级:安全相关的软件升级,必须保证升级过程本身是安全的(比如签名校验、回滚机制)
  • 故障监控:通过车联网收集安全相关的故障数据
  • 召回管理:如果发现设计缺陷,怎么安全地召回和修复

这里我要特别说一下 OTA 升级的安全问题。你想想看,如果一辆车正在高速上跑,突然收到一个 OTA 升级包……嗯,这绝对不能发生。所以我们的做法是:OTA 升级只能在停车状态下进行,而且升级过程中如果检测到异常,必须能回滚到上一个安全版本

重要提醒:运维阶段的安全数据,一定要反馈到下一轮产品的概念阶段。这就是功能安全生命周期的「闭环」。我见过一些公司,运维数据收集了一大堆,但从来没人分析——那收集了有啥用呢?

3.4 小结

功能安全生命周期,说白了就是三个字:想、做、管

  • 概念阶段:想清楚要做什么、有什么风险、怎么避免
  • 产品开发阶段:把安全要求变成硬件和软件的实现
  • 生产与运维阶段:确保生产出来的产品是安全的,并且在生命周期内一直安全

我个人觉得,这三个阶段里最容易出问题的反而是概念阶段。为什么?因为大家都急着「做东西」,不愿意花时间「想东西」。但我在项目里吃过太多亏了——概念阶段省下来的时间,到了开发阶段和测试阶段,会加倍还回去。

所以我的建议是:别急,想清楚了再动手。功能安全这件事,慢就是快。