2. RH850 U2A硬件架构与HSM子系统

RH850 U2A 是瑞萨面向汽车域控制器与网关的高性能 MCU 系列,其安全能力并非外挂式附加,而是通过 HSM(Hardware Security Module,硬件安全模块)子系统与主 CPU 深度耦合实现。理解这一章的关键,不是记住模块名称,而是建立一张"谁在什么地址、通过什么总线、能访问什么资源"的空间地图。只有把地址映射、总线归属和隔离边界看清楚,后续的密钥装载、固件签名验证、安全启动调试才有落脚点。

一、主计算域:多核 CPU 与总线矩阵

U2A 的主计算域通常包含多个 RH850 G4MH 内核,按功能划分为性能核与锁步核。以常见的双核集群为例,CPU0 与 CPU1 可运行在锁步(Lockstep)模式,两个核执行相同指令流并逐周期比对结果,用于满足 ISO 26262 的 ASIL-D 诊断覆盖要求;也可配置为分离模式,各自承担独立任务。每个核拥有私有的指令缓存、数据缓存与本地 RAM,同时通过一致性互连共享全局存储。

总线层面,U2A 采用多层 AHB/AXI 矩阵结构。主设备包括 CPU 集群、DMA 控制器、以太网 MAC、CAN-FD 控制器以及 HSM 协处理器;从设备包括代码 Flash、数据 Flash、系统 RAM、外设寄存器区。总线矩阵的核心价值在于并行访问与访问权限过滤:不同主设备到不同从设备的路径可以独立仲裁,而访问权限由 MPU(内存保护单元)和总线防火墙共同约束。

这里需要明确一个参照约定:本文所有地址均以主 CPU 视角的物理地址为准,HSM 视角的地址若不同会单独标注。U2A 的代码 Flash 通常映射在 0x0000_0000 起始区域,系统 RAM 位于 0xFEBF_0000 附近的高地址段,外设寄存器集中在 0xFF00_0000 以上的外设区。这些数值属于该系列的典型布局,具体以对应型号的硬件手册为准。

二、HSM 子系统:独立内核与专属资源

HSM 子系统内部是一颗独立的安全核,常见为 ARM Cortex-M 系列或瑞萨自研安全核,运行频率低于主核,但拥有自己的 ROM、RAM、定时器、TRNG(真随机数发生器)、AES/SHA/ECC/RSA 加速引擎以及安全 Flash 区域。它不直接参与车辆控制逻辑,而是作为"可信执行环境"对外提供密码学服务和安全状态管理。

HSM 与主域之间的通信通过专用邮箱(Mailbox)和共享 SRAM 完成。典型交互流程是:主核把请求描述符写入共享 SRAM 的指定缓冲区,再向 HSM 邮箱寄存器写入命令字并触发中断;HSM 核读取描述符、执行密码运算、把结果写回共享缓冲区,最后通过状态寄存器或反向中断通知主核。整个过程主核无法直接读写 HSM 的私有 RAM 和密钥存储区,这是隔离机制的核心。

密钥管理是 HSM 最具工程价值的部分。用户密钥通常存放在 HSM 专属的安全 Flash 或 OTP 区域,主核只能通过 HSM 提供的服务接口间接使用,无法读出明文。例如做 AES-CMAC 校验时,主核提交待校验数据和密钥句柄,HSM 返回 MAC 值,密钥本身始终不出安全边界。这种"密钥不可导出"的设计,是防止固件被篡改后批量提取密钥的关键。

三、隔离机制与安全外设

U2A 的隔离不是单一手段,而是多层叠加。第一层是总线防火墙,按主设备 ID 和地址区间设置读/写/执行权限,越权访问会产生总线错误并记录到错误状态寄存器。第二层是 MPU,在核内对地址区间做细粒度保护,可区分特权态与用户态。第三层是 HSM 的物理隔离,安全核的私有存储不映射到主域地址空间。第四层是调试隔离,通过生命周期状态(Lifecycle)控制 JTAG 是否可访问安全区域。

安全外设方面,除 HSM 内部的密码引擎外,主域还配有 CRC 计算单元、时钟监控、电压监控和看门狗。这些外设本身不执行密码运算,但为安全启动提供完整性度量和运行环境可信依据。例如启动时先由 HSM 校验主 Flash 中引导程序的签名,校验通过后才释放主核复位,主核再依次校验应用固件。

RH850 U2A 主域与 HSM 子系统隔离架构 主计算域(Main Domain) CPU 集群 CPU0 G4MH 核 CPU1 锁步/分离 多层 AHB/AXI 总线矩阵 + 总线防火墙 主设备 ID 过滤 · 地址区间读/写/执行权限 代码/数据 Flash 0x0000_0000 起 引导 + 应用固件 签名校验对象 系统 RAM 0xFEBF_0000 附近 共享 SRAM 缓冲区 HSM 通信载体 安全外设 CRC / 时钟监控 电压监控 / 看门狗 0xFF00_0000 以上 主域 ↔ HSM 通信通道 邮箱寄存器 命令字 / 状态位 共享 SRAM 请求/结果描述符 中断信号 双向触发 隔离边界 HSM 安全域 安全核 独立 ROM / RAM / 定时器 不映射到主域地址空间 密码学加速引擎 AES / SHA ECC / RSA TRNG 真随机数发生器 安全存储 安全 Flash / OTP 密钥区 密钥句柄访问,明文不可导出 主核仅见句柄,不见密钥 安全服务接口 签名验证 / MAC 计算 密钥装载 / 安全启动控制 生命周期状态管理

四、从架构到工程动作

把上述结构落到实际开发,第一步是确认地址映射。拿到芯片后,先查硬件手册的 Memory Map 章节,标出主核可访问的 Flash、RAM、外设区间,以及 HSM 邮箱寄存器的基地址。第二步是配置总线防火墙,把 HSM 私有区域从主核可访问范围中排除,同时给共享 SRAM 缓冲区设置只允许特定主设备访问的规则。第三步是建立通信协议,约定描述符格式,例如首字为命令码,次字为数据长度,后续为输入数据指针和输出缓冲区指针。

一个可参考的通信描述符示例如下,字段含义按实际项目调整:

typedef struct {
    uint32_t cmd;        // 命令码,如 0x01=AES-CMAC, 0x02=ECDSA验签
    uint32_t keyHandle;  // 密钥句柄,由HSM分配,非明文密钥
    uint32_t inAddr;     // 输入数据在共享SRAM中的地址
    uint32_t inLen;      // 输入数据长度(字节)
    uint32_t outAddr;    // 输出结果缓冲区地址
    uint32_t status;     // HSM回写状态:0=成功,非0=错误码
} hsm_req_t;

主核填充该结构后,写入邮箱命令寄存器并触发中断。HSM 处理完成后把 status 置位并回送中断。主核在中断服务程序中读取状态,若为 0 则从 outAddr 取结果,否则按错误码排查——常见错误包括密钥句柄无效、输入长度超限、HSM 忙等。

调试阶段建议先用最简单的命令(如读取 HSM 版本号或计算固定数据的 CRC)打通邮箱通信,确认中断方向、共享 SRAM 地址和状态位定义无误后,再接入密钥装载和签名验证。这样能把"通信不通"和"密码算法配置错误"两类问题分开定位。

五、隔离机制的实际验证

架构理解是否到位,可以用几个可观察的现象来验证。其一,主核直接读取 HSM 私有 RAM 地址应触发总线错误,错误状态寄存器中对应位被置起;其二,主核尝试访问未授权的 Flash 区域,MPU 应产生保护异常;其三,在生命周期状态为安全锁定后,JTAG 连接应无法读取安全区域内容。这三项检查分别对应总线防火墙、MPU 和调试隔离,是安全启动调试前值得先做的基线确认。

需要强调的是,HSM 的安全强度最终取决于密钥是否真正不可导出、安全启动链是否完整、以及生命周期状态是否被正确烧录。硬件架构提供了隔离的物理基础,但配置错误会让隔离形同虚设。因此在本章之后的学习中,应始终把"地址—权限—密钥"三者放在一起考虑,而不是孤立地看待某个模块。