4. 系统级开发:系统级开发流程、技术安全概念、系统架构设计
好,咱们进入系统级开发这个环节。
说实话,很多工程师觉得功能安全就是写文档、做分析。其实不是的。系统级开发才是真正把安全要求落到实处的第一步。你想想看,如果系统架构搭歪了,后面V模型走得再漂亮,也是白搭。
4.1 系统级开发流程——别急着写代码
我个人习惯,拿到一个项目需求后,先不急着看功能怎么实现。我会先问自己三个问题:
- 这个系统最坏情况下会出什么故障?
- 故障发生后,对驾驶员和乘客有什么影响?
- 我们需要做到ASIL哪个等级?
系统级开发流程,说白了就是回答这三个问题的过程。ISO 26262第4部分讲的就是这个。流程大致分几步:
- 定义系统边界——哪些东西归我管,哪些是外部依赖
- 识别危险事件——HARA分析,这个咱们前面聊过
- 制定安全目标——每个危险事件对应一个安全目标
- 分配安全要求——把安全目标拆解到硬件和软件
- 系统架构设计——画出框图,明确模块分工
核心要点:系统级开发不是一次性的。它是一个迭代过程。我见过太多团队,架构设计完就扔那儿了,等到集成测试才发现安全机制没地方放。嗯,那时候改架构,成本就高了。
4.2 技术安全概念——把安全目标翻译成技术语言
安全目标写的是「车辆不能非预期加速」,对吧?但工程师需要知道的是:怎么检测非预期加速?检测到了之后怎么办?
这就是技术安全概念(TSC)要做的事。
我记得有一次做EPS(电动助力转向)项目。安全目标是「转向不能反向助力」。听起来简单吧?但落到技术层面,你得考虑:
- 扭矩传感器信号怎么校验?
- 电机控制器的输出怎么监控?
- 如果检测到异常,是降级还是关断?
技术安全概念通常包含以下要素:
| 要素 | 说明 | 我的经验 |
|---|---|---|
| 故障检测机制 | 怎么发现故障 | 别只依赖一种检测手段,冗余更可靠 |
| 故障响应措施 | 发现故障后做什么 | 降级模式要设计得平滑,别让驾驶员吓一跳 |
| 故障容错时间 | 从故障发生到响应,能容忍多久 | 这个时间窗口很关键,我吃过亏 |
| 安全状态 | 系统最终要进入什么状态 | 安全状态不一定是停机,有时候降级更合理 |
我的小技巧:写技术安全概念的时候,我习惯画一张时序图。把故障发生、检测、响应、进入安全状态的时间点都标出来。这样评审的时候,大家一眼就能看出时间够不够。
4.3 系统架构设计——搭好骨架,后面才不慌
系统架构设计,说白了就是画框图、分模块、定接口。但功能安全给架构设计加了很多约束。
你想想看,如果两个ASIL D的模块共用同一个电源,电源一坏,两个模块都完蛋。这就是「共因失效」。架构设计的时候,就要想办法避免这种情况。
我常用的架构设计原则:
- 独立性原则——高ASIL的模块要跟低ASIL的模块隔离开
- 冗余原则——关键功能要有备份,比如双通道架构
- 多样性原则——冗余不能一模一样,否则共因失效照样翻车
- 故障传播控制——一个模块坏了,别把隔壁也带崩了
举个例子,我之前做的一个线控制动项目:
系统架构(简化版):
┌─────────────────────────────────────┐
│ 主控制器(ASIL D) │
│ ┌──────────┐ ┌──────────┐ │
│ │ 主通道 │ │ 监控通道 │ │
│ │ 执行制动 │ │ 校验结果 │ │
│ └──────────┘ └──────────┘ │
└─────────────────────────────────────┘
│ │
▼ ▼
┌─────────────────────────────────────┐
│ 执行器(冗余设计) │
│ ┌──────────┐ ┌──────────┐ │
│ │ 电机A │ │ 电机B │ │
│ │ 独立供电 │ │ 独立供电 │ │
│ └──────────┘ └──────────┘ │
└─────────────────────────────────────┘
这个架构里,主控制器内部有主通道和监控通道,互相校验。执行器用了两个电机,各自独立供电。就算一个电机坏了,另一个还能顶上去。
注意:架构设计的时候,一定要考虑「故障注入测试」。我曾经有一个项目,架构设计得很完美,但故障注入一测,发现监控通道的响应时间比预期慢了50毫秒。就这50毫秒,差点导致安全目标不满足。所以,架构设计完了,一定要用仿真或实测验证一下时序。
4.4 系统级开发的输出物
说了这么多,系统级开发到底要产出什么?我列个清单:
- 系统需求规格书——功能需求+安全需求
- 技术安全概念文档——TSC,详细描述安全机制
- 系统架构设计文档——框图、接口定义、模块划分
- 安全分析报告——FMEA、FTA、DFA等
- 系统集成测试计划——怎么测、测什么、谁负责
这些文档不是写给别人看的,是给自己团队用的。我见过有些团队,文档写得天花乱坠,但代码实现跟文档完全对不上。嗯,那样的话,评审过不了,认证也过不了。
好了,系统级开发就聊到这儿。下一章咱们讲硬件级开发,到时候聊聊怎么选MCU、怎么做硬件安全机制。有什么问题,欢迎交流。