3. 功能安全软件架构设计原则
功能安全软件架构不是把安全机制堆在一起,而是把安全需求逐层拆解、分配到具体执行单元,并保证这些单元之间互不破坏。RH850 系列(如 RH850/P1x、RH850/U2A、RH850/F1x)提供了锁步核、ECC、MPU、SMU、时钟/电压监控、看门狗等硬件基础,软件架构的任务是把这些资源组织成可验证、可降级、可诊断的结构。本节围绕四条原则展开:安全需求分解、安全机制分层、免于干扰(FFI)、安全状态与降级策略。
一、安全需求分解:从安全目标到可执行单元
安全需求分解的核心是把整车或系统级安全目标(如 ASIL D 的“避免非预期扭矩输出”)逐级转化为软件可实现的约束。典型分解路径是:安全目标 → 功能安全需求(FSR)→ 技术安全需求(TSR)→ 软件安全需求(SSR)→ 软件组件级需求。分解时必须为每条需求标注 ASIL 等级、分配对象(核、任务、驱动、外设)和验证方法。
以电机控制为例,安全目标“防止逆变器输出非预期大扭矩”可分解为:FSR1 检测扭矩指令与反馈偏差;TSR1.1 在 10 ms 内识别偏差超限;SSR1.1.1 由 ADC 采样通道周期性校验;SSR1.1.2 由锁步核比较主从核计算结果;SSR1.1.3 由 SMU 汇总错误并触发 PWM 关断。分解后每条 SSR 都对应 RH850 上的具体资源,例如 ADC 自诊断、锁步比较器、SMU 报警输入、TAUJ 定时器、PWM 输出禁用寄存器。
二、安全机制分层:硬件、驱动、OS、应用四层协同
RH850 上的安全机制天然具有层次性。最底层是硬件安全机制:锁步核(Lockstep)、Flash/RAM ECC、时钟监控(CVM)、电压监控(LVD)、看门狗(WDTA)。第二层是驱动与 MCAL 层:ADC 自检、SPI 通信 CRC、PWM 输出回读、端口测试。第三层是 OS 与运行时层:任务超时监控、栈溢出检测、MPU 分区保护、SMU 错误分发。第四层是应用层:合理性检查、交叉比较、安全状态请求。
分层的关键是“下层向上层提供可信基础,上层向下层提出诊断请求”。例如 SMU 作为错误汇聚单元,接收 ECC 双比特错误、锁步比较错误、时钟失锁等报警,再按预配置的错误输出路径触发中断或直接复位。软件架构中应明确每层机制的响应时间预算:硬件报警通常在微秒级,驱动诊断在毫秒级,应用级降级决策在 10~100 ms 级。
三、免于干扰(FFI):空间与时间双重隔离
免于干扰要求不同安全等级或不同功能之间不能相互破坏。RH850 上主要通过 MPU 实现空间隔离:为每个任务或分区配置可访问的地址范围,禁止越界读写。例如把 ASIL D 的电机控制任务放在受保护区域,QM 级通信任务只能访问自己的缓冲区,二者通过受控的共享内存或消息队列交互。时间隔离则依赖 OS 调度和看门狗:高安全等级任务必须在截止时间内执行,低等级任务不得长时间占用 CPU 或中断。
实际落地时,需要为每个分区定义:起始地址、结束地址、读/写/执行权限、以及违规后的处理动作(触发异常 → SMU → 降级)。RH850 的 MPU 通常支持多个区域,配置时要注意栈、堆、外设寄存器映射区都要显式声明,避免默认放行。FFI 的验证方法是注入越界访问,观察是否触发保护异常并进入预期安全状态。
四、安全状态与降级策略:分级响应而非一刀切
安全状态不是简单的“全部断电”。在 RH850 电机控制场景中,合理的降级策略是分级的:一级故障(如单次 ADC 采样偏差)先限制扭矩并记录 DTC;二级故障(如锁步比较连续错误)进入受限运行,降低 PWM 占空比上限;三级故障(如时钟失锁或 ECC 双比特错误)立即关断 PWM 并请求复位。每级都要定义进入条件、响应时间、恢复条件和退出路径。
实现上,安全状态管理通常由一个独立的安全任务或 SMU 中断服务程序承担。它读取错误标志、判断等级、调用对应的执行函数(如禁用 PWM 输出、切换至安全扭矩、置位故障引脚),并写入非易失存储。关键参数包括:故障确认次数、去抖时间、降级超时。例如设定“连续 3 次采样偏差超过 5% 且持续 20 ms”才进入一级降级,避免误触发。
五、落地检查要点
- 每条 SSR 是否映射到 RH850 的具体外设、寄存器或核资源,并有对应验证方法。
- 四层安全机制是否都有明确的输入、输出和响应时间预算。
- MPU 分区是否覆盖所有任务,越界访问是否触发预期异常并进入降级。
- 安全状态分级是否定义进入条件、恢复条件和最大响应时间,并与 FTTI 对齐。
- SMU 错误路径是否经过验证,确保报警能到达安全任务而非被静默丢弃。
这四条原则在 RH850 上不是孤立存在的:需求分解决定机制分配,机制分层决定 FFI 边界,FFI 决定降级路径的可信度,而降级策略又反过来验证需求分解是否完整。架构设计阶段就应把这条闭环画清楚,后续的验证工程才有据可依。