2. RH850 硬件安全机制与软件接口
RH850 系列 MCU 在功能安全设计中,把大量安全机制直接做进了硬件。对软件工程师而言,关键不是“知道有这些机制”,而是理解每个机制在软件侧暴露了哪些寄存器、状态位、错误源和响应路径,以及软件必须在什么时机去读、去清、去响应。本节围绕锁步核、ECC、看门狗、时钟监控四类与软件接口最紧密的机制展开,并说明安全手册中哪些内容会直接落到驱动与自检代码上。
锁步核:软件看到的是“比较结果”,不是两套核
RH850 的安全核通常采用双核锁步(Lockstep)结构:主核与检查核执行相同指令流,硬件比较器逐周期比对输出。软件并不需要分别调度两个核,但必须理解锁步错误最终会以什么形式呈现。典型路径是:比较器发现不一致后,触发锁步错误信号,进入 ECM(Error Control Module)或直接产生异常。软件侧通常通过错误状态寄存器读取锁步错误标志,并在安全响应中执行复位或进入安全状态。
软件接口上需要关注三点:第一,锁步错误是否被使能到异常或复位;第二,错误标志是否具有锁存特性,必须显式清除;第三,是否存在锁步自检或延迟注入机制,用于在启动阶段验证比较器通路本身可用。安全手册中与软件直接相关的部分,通常会给出锁步错误响应时间要求和推荐的错误处理流程,软件需据此决定是立即复位还是先记录故障码。
ECC:从 RAM 到 Flash 的错误检测与纠正
RH850 对 SRAM、Flash、缓存等存储资源普遍配置 ECC。软件接口的核心是“读状态、清状态、区分可纠正与不可纠正”。以 SRAM ECC 为例,单比特错误通常可被 SECDED 纠正,双比特错误则不可纠正。软件需要周期性读取 ECC 错误状态寄存器,判断错误地址、错误类型和错误计数。
实际编程中,常见做法是在启动自检阶段对关键 RAM 区域做一次写-读-校验,确认 ECC 逻辑本身工作正常;在运行阶段则通过错误中断或轮询方式捕获 ECC 事件。对于可纠正错误,软件可记录并继续运行;对于不可纠正错误,必须进入安全响应,例如保存上下文后复位。安全手册会明确哪些 RAM 区域属于安全相关、需要 ECC 保护,以及错误注入测试的推荐方法。
看门狗:窗口与超时决定软件喂狗节奏
RH850 的看门狗通常支持窗口模式:喂狗过早或过晚都会触发复位。软件接口包括看门狗控制寄存器、计数器写入口和状态标志。软件必须在窗口内完成喂狗,且喂狗动作本身应作为程序流监控的一部分——如果任务调度异常、中断被长时间关闭或代码跑飞,喂狗就会错过窗口,从而触发复位。
工程上常见的做法是把喂狗放在主循环或安全任务中,并配合“程序流检查”:只有按预期顺序执行到特定检查点,才允许喂狗。安全手册中会给出看门狗超时时间、窗口边界和复位后的状态恢复要求。软件需要根据任务周期计算喂狗窗口,例如任务周期 10 ms、窗口设为 5~8 ms,则喂狗必须落在这个区间内。
时钟监控:失锁、超范围与备份时钟切换
时钟是安全机制的“心跳”。RH850 通常提供时钟监控单元,检测主时钟是否失锁、频率是否超出上下限。软件接口包括时钟监控状态寄存器、使能位和错误标志。当检测到时钟异常时,硬件可自动切换到备份时钟(如内部低速时钟),软件需要在异常处理中确认切换是否成功,并决定是否降级运行或复位。
软件侧的关键动作是:启动阶段配置时钟监控阈值,运行阶段周期性检查状态位,异常时读取错误源并执行响应。安全手册会说明哪些时钟源属于安全相关、监控阈值如何设定,以及切换备份时钟后软件需要重新初始化哪些外设。
安全手册中与软件直接相关的接口约定
安全手册不会只列硬件特性,它会明确给出软件必须实现的假设条件。例如:锁步错误必须在指定时间内响应;ECC 不可纠正错误必须触发复位;看门狗必须在窗口内喂狗且喂狗点必须位于程序流检查之后;时钟监控异常后软件必须在规定时间内确认备份时钟稳定。这些约定直接决定驱动层和安全监控层的设计。
一个常见的工程落地方式是建立“安全机制状态表”,把每个机制的使能位、状态位、清除方式、响应动作和验证方法集中管理。下面给出一个示例表格,字段可根据项目实际调整。
| 安全机制 | 关键寄存器/接口 | 软件动作 | 响应条件 | 验证方法 |
|---|---|---|---|---|
| 锁步核 | 锁步错误状态寄存器、异常使能位 | 启动自检、运行期读状态、清标志 | 比较不一致 → 记录并复位 | 错误注入测试比较器通路 |
| ECC | ECC 错误状态寄存器、错误地址寄存器 | 周期读状态、区分可纠正/不可纠正 | 不可纠正 → 保存上下文后复位 | RAM 写读校验、错误注入 |
| 看门狗 | 看门狗控制寄存器、计数器写入口 | 窗口内喂狗、程序流检查后喂狗 | 超时或过早 → 复位 | 故意错过窗口观察复位 |
| 时钟监控 | 时钟监控状态寄存器、切换控制位 | 配置阈值、周期检查、确认备份时钟 | 失锁/超范围 → 切换并降级 | 注入时钟异常观察切换 |
把四类机制放在一起看,软件侧的工作可以归纳为三条主线:启动阶段完成自检和使能配置;运行阶段周期读取状态并执行喂狗、时钟检查;异常阶段按安全手册要求记录、复位或降级。理解每条主线对应的寄存器和状态位,才能把硬件安全机制真正转化为可验证的软件安全行为。