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 通常提供时钟监控单元,检测主时钟是否失锁、频率是否超出上下限。软件接口包括时钟监控状态寄存器、使能位和错误标志。当检测到时钟异常时,硬件可自动切换到备份时钟(如内部低速时钟),软件需要在异常处理中确认切换是否成功,并决定是否降级运行或复位。

软件侧的关键动作是:启动阶段配置时钟监控阈值,运行阶段周期性检查状态位,异常时读取错误源并执行响应。安全手册会说明哪些时钟源属于安全相关、监控阈值如何设定,以及切换备份时钟后软件需要重新初始化哪些外设。

RH850 硬件安全机制与软件接口关系图 硬件安全机制层 锁步核 主核 + 检查核 比较器逐周期比对 ECC SRAM / Flash / 缓存 SECDED 纠错 看门狗 窗口模式 超时 / 过早喂狗复位 时钟监控 失锁 / 频率超范围 备份时钟切换 软件接口层(寄存器 / 状态位 / 中断) 锁步错误状态寄存器 错误标志 / 锁存清除 异常或复位使能 ECC 错误状态寄存器 错误地址 / 类型 / 计数 可纠正 / 不可纠正 看门狗控制寄存器 计数器写入 / 窗口配置 状态标志 时钟监控状态寄存器 失锁 / 超范围标志 备份时钟切换状态 软件响应层(安全手册要求) 启动自检 锁步通路验证 RAM 写读校验 运行监控 周期读状态 窗口内喂狗 错误响应 记录故障码 复位或安全状态 恢复与降级 备份时钟确认 外设重新初始化 错误反馈 / 复位

安全手册中与软件直接相关的接口约定

安全手册不会只列硬件特性,它会明确给出软件必须实现的假设条件。例如:锁步错误必须在指定时间内响应;ECC 不可纠正错误必须触发复位;看门狗必须在窗口内喂狗且喂狗点必须位于程序流检查之后;时钟监控异常后软件必须在规定时间内确认备份时钟稳定。这些约定直接决定驱动层和安全监控层的设计。

一个常见的工程落地方式是建立“安全机制状态表”,把每个机制的使能位、状态位、清除方式、响应动作和验证方法集中管理。下面给出一个示例表格,字段可根据项目实际调整。

安全机制 关键寄存器/接口 软件动作 响应条件 验证方法
锁步核 锁步错误状态寄存器、异常使能位 启动自检、运行期读状态、清标志 比较不一致 → 记录并复位 错误注入测试比较器通路
ECC ECC 错误状态寄存器、错误地址寄存器 周期读状态、区分可纠正/不可纠正 不可纠正 → 保存上下文后复位 RAM 写读校验、错误注入
看门狗 看门狗控制寄存器、计数器写入口 窗口内喂狗、程序流检查后喂狗 超时或过早 → 复位 故意错过窗口观察复位
时钟监控 时钟监控状态寄存器、切换控制位 配置阈值、周期检查、确认备份时钟 失锁/超范围 → 切换并降级 注入时钟异常观察切换
软件接口设计的核心原则:每个安全机制都要有“使能—监控—响应—验证”四个环节。只使能不监控,等于没有安全机制;只监控不响应,等于把故障留给下一次运行。
锁步错误和 ECC 不可纠正错误通常要求快速复位。软件在错误处理中应避免长时间阻塞,例如不要在异常上下文中执行耗时日志写入。故障码应先存入保留 RAM 或备份寄存器,复位后再由启动代码读取并上报。

把四类机制放在一起看,软件侧的工作可以归纳为三条主线:启动阶段完成自检和使能配置;运行阶段周期读取状态并执行喂狗、时钟检查;异常阶段按安全手册要求记录、复位或降级。理解每条主线对应的寄存器和状态位,才能把硬件安全机制真正转化为可验证的软件安全行为。