2. RH850 CAN FD硬件架构解析

在RH850系列MCU(以RH850/F1x、RH850/C1M等常见车规型号为例)中,CAN FD通信并不是由CPU直接逐位操作完成的,而是由一套相对独立的硬件子系统承担:CAN FD控制器(也称CAN-FD模块,如RSCAN、RSCAN-FD、RCAN等)负责协议层与位流处理,消息RAM(Message RAM)负责报文缓冲,发送/接收FIFO负责流量整形与批量收发,过滤器负责接收筛选,中断与DMA负责把事件和数据搬运到CPU或内存。理解这套硬件架构,是后续做故障注入的前提——因为故障注入本质上是在“可控的硬件边界”上制造异常,而不是随意改内存。

一、CAN FD控制器的内部功能划分

RH850的CAN FD控制器通常包含以下几个关键子模块:

  • 协议引擎(Protocol Engine):处理CAN FD帧格式、位填充、CRC、ACK、错误帧、仲裁与位定时。它直接连接CAN收发器(外部PHY),是物理层与协议层的交界。
  • 位定时逻辑(Bit Timing Logic):由寄存器配置波特率预分频、时间段1/2、同步跳转宽度等,决定仲裁段与数据段的速率。
  • 消息处理器(Message Handler):负责把协议引擎收到的帧写入消息RAM,或从消息RAM取出待发送帧送入协议引擎。
  • 寄存器接口:CPU通过外设总线访问控制寄存器、状态寄存器、中断寄存器、错误计数器和消息RAM窗口。

从故障注入视角看,协议引擎和位定时逻辑属于“难以直接干预”的硬件,而寄存器接口和消息RAM则是“可触及”的边界。因此,后续注入点大多落在寄存器写入、消息RAM内容、FIFO指针和过滤器配置上。

二、消息RAM与FIFO的结构关系

消息RAM是CAN FD控制器内部的一块专用SRAM,通常按“报文槽(Message Buffer)”组织。每个槽包含:标识符(ID)、控制字段(DLC、FDF、BRS、ESI等)、数据字段(最多64字节)、时间戳和状态位。RH850的CAN FD模块一般把消息RAM划分为多个区域:

  • 发送缓冲区(TX Buffer):每个发送对象对应一个或多个槽,CPU写入数据后置位发送请求。
  • 接收缓冲区(RX Buffer):按过滤器匹配结果写入,可配置为FIFO或独立槽。
  • 发送FIFO(TX FIFO):多个待发报文按顺序排队,适合周期性报文批量发送。
  • 接收FIFO(RX FIFO):多个接收报文按到达顺序排队,减少CPU中断次数。
  • 过滤器区域:存放接收过滤规则,通常与接收FIFO配合使用。

消息RAM的访问通常通过“窗口寄存器”间接进行:先写地址寄存器指向某个槽,再读写数据寄存器。这种间接访问方式意味着,如果地址寄存器被错误修改,就可能读写到错误的槽——这正是故障注入可以模拟的一类硬件异常。

RH850 CAN FD 硬件数据通路与故障注入边界 CAN FD 总线 / 收发器 协议引擎 位填充 / CRC ACK / 错误帧 仲裁 / 位定时 消息处理器 TX/RX 调度 FIFO 指针管理 过滤器匹配 消息 RAM(Message RAM) TX Buffer 发送槽 TX FIFO 发送队列 RX Buffer 接收槽 RX FIFO 接收队列 过滤器区域(Filter / Mask) ID 匹配规则 CPU 寄存器访问 中断服务 DMA 数据搬运 不占CPU 寄存器配置 数据搬运 中断请求 故障注入可触及边界:寄存器写入 / 消息RAM内容 / FIFO指针 / 过滤器配置 / 中断使能位 不可直接干预:协议引擎内部状态、位定时模拟前端、物理层收发器

三、过滤器与接收路径

接收路径的核心是过滤器。RH850 CAN FD控制器通常提供多组过滤器,每组包含ID寄存器、掩码寄存器和FIFO选择位。当一帧到达时,消息处理器把帧ID与过滤器逐条比较,命中后写入对应的RX Buffer或RX FIFO。过滤器可以配置为“精确匹配”或“掩码匹配”,掩码为1的位参与比较,为0的位忽略。

例如,假设要接收ID为0x123的标准帧,可设置ID寄存器为0x123,掩码寄存器为0x7FF(11位全比较)。若要接收0x120~0x12F范围内的一批ID,可设置ID=0x120,掩码=0x7F0,这样低4位被忽略。这种配置在故障注入中很有用:通过修改掩码,可以让原本应被过滤掉的报文进入接收FIFO,模拟“过滤器失效”类故障。

四、中断与DMA通路

CAN FD控制器产生的中断事件通常包括:发送完成、接收完成、发送FIFO空/满、接收FIFO溢出、错误警告、总线关闭等。每个事件对应一个中断标志位,通过中断使能寄存器决定是否向CPU发出中断。RH850的中断控制器(INTC)支持优先级配置,CAN FD中断可分配到不同优先级。

DMA通路则用于把接收FIFO中的数据批量搬运到用户指定的内存缓冲区,或把发送数据从内存搬到发送FIFO。DMA请求通常由FIFO水位触发,例如接收FIFO中报文数达到阈值时触发一次DMA传输。这样CPU只需处理DMA完成中断,而不必为每帧报文单独响应。

从故障注入角度看,中断使能位和DMA触发阈值都是可写寄存器。如果错误地关闭了接收中断使能,或把DMA阈值设得过高,就会造成“报文已收到但CPU不知道”或“FIFO溢出”的现象。这类故障在真实系统中可能由软件配置错误引起,也可以通过注入复现。

五、故障注入可触及的硬件寄存器边界

综合来看,RH850 CAN FD硬件架构中,故障注入可以触及的边界主要包括:

边界对象 典型寄存器/区域 可注入的故障类型 观察现象
位定时配置 波特率预分频、TSEG1/TSEG2、SJW 波特率偏差、采样点偏移 错误帧增多、通信失败
消息RAM内容 TX/RX Buffer数据字段 数据位翻转、DLC错误 接收端数据校验失败
FIFO指针 TX/RX FIFO的put/get索引 指针越界、重复读取 报文丢失或重复
过滤器配置 ID寄存器、掩码寄存器 掩码错误、ID偏移 误收/漏收报文
中断使能 中断使能寄存器、标志寄存器 关闭接收中断、清标志失败 CPU不响应、中断丢失
DMA触发阈值 FIFO水位寄存器 阈值过高/过低 DMA不触发或频繁触发

需要强调的是,上述边界中,位定时配置和协议引擎内部状态属于“半可触及”区域:寄存器可以写,但写错后往往导致总线关闭,恢复需要重新初始化。而消息RAM、FIFO指针、过滤器和中断使能则属于“完全可触及”区域,适合做精细化的故障注入实验。

在实际工程中,建议先通过读取寄存器确认当前配置,再写入注入值,最后通过回读和总线监视器(如CANoe、PCAN-View)观察现象。每次注入只改变一个变量,便于定位因果关系。
直接修改消息RAM或FIFO指针可能导致控制器进入不可预测状态。注入前应确保有复位或重新初始化路径,避免总线关闭后无法恢复。