3. RH850 CAN FD控制器架构
在RH850系列MCU中,CAN FD通信能力由片上CAN控制器模块提供。不同子系列和型号可能集成RSCAN、RCAN、RS-CANFD等不同代际的控制器,但它们的总体架构思想一致:协议引擎负责位流收发与帧格式解析,消息RAM负责报文缓冲,寄存器接口负责CPU配置与状态读取,中断系统负责事件通知。理解这四者的分工与协作,是后续编写CAN FD驱动和UDS诊断栈的基础。
一、核心原理:控制器内部四大功能域
RH850的CAN FD控制器可划分为四个功能域。第一是协议引擎(Protocol Engine),它实现CAN/CAN FD的位定时、位填充、CRC校验、帧格式识别与错误管理,支持经典CAN与CAN FD混合帧格式。第二是消息RAM(Message RAM),用于存放发送缓冲、接收FIFO、接收缓冲和过滤表,是控制器与CPU之间交换报文数据的核心区域。第三是寄存器接口(Register Interface),包括全局控制寄存器、通道控制寄存器、位定时寄存器、错误计数器和状态寄存器,CPU通过外设总线访问。第四是中断与事件系统,将发送完成、接收成功、错误状态变化、总线唤醒等事件汇总为中断源,通知CPU或DMA处理。
与经典CAN控制器相比,CAN FD控制器的消息RAM容量更大、结构更灵活,通常支持多个接收FIFO和发送队列,并可通过配置将消息RAM划分为不同区域。RH850的RSCAN/RCAN模块一般提供多通道(Channel)结构,每个通道可独立配置波特率、过滤规则和工作模式,适合网关或多路CAN FD并发的场景。
二、寄存器映射与消息RAM的组织方式
RH850的CAN FD控制器寄存器通常按“全局寄存器 + 通道寄存器 + 消息RAM”三层组织。全局寄存器控制模块整体使能、时钟、测试模式和全局中断;通道寄存器控制每个通道的位定时、过滤、FIFO配置和错误状态;消息RAM则通过基地址加偏移的方式访问。以RSCAN为例,常见寄存器包括:
- 全局控制寄存器:模块使能、时钟分频、全局中断使能。
- 通道控制寄存器:通道使能、工作模式(正常/睡眠/复位)、波特率预分频。
- 位定时寄存器:设置仲裁段和数据段的波特率,CAN FD需要分别配置。
- 错误计数与状态寄存器:读取TEC/REC、错误主动/被动状态、总线关闭标志。
- 消息RAM配置寄存器:定义发送缓冲、接收FIFO、接收缓冲和过滤表的起始地址与深度。
消息RAM是CAN FD控制器中最需要关注的资源。它通常被划分为发送区、接收FIFO区、接收缓冲区和过滤表区。发送区可配置为发送队列或发送FIFO,支持优先级发送;接收FIFO支持多帧连续接收,减少CPU中断次数;过滤表用于硬件过滤,只有匹配的报文才会被写入接收FIFO,从而降低CPU负载。在RH850中,消息RAM的容量和分区方式因型号而异,配置时必须参考对应型号的硬件手册。
三、中断系统与事件处理流程
RH850 CAN FD控制器的中断系统将多种事件映射到中断向量。常见中断源包括:发送完成中断、接收FIFO达到阈值中断、接收缓冲中断、错误中断、总线关闭中断和唤醒中断。中断处理流程一般如下:
- 控制器检测到事件,置位对应状态寄存器标志。
- 若该事件的中断使能位已打开,控制器向CPU发出中断请求。
- CPU进入中断服务程序,读取状态寄存器判断事件类型。
- 根据事件类型处理:发送完成则填充下一帧;接收成功则从消息RAM读取报文;错误则记录并恢复。
- 清除中断标志,退出中断。
在UDS诊断场景中,接收中断尤其关键。诊断请求通常通过接收FIFO到达,CPU需要在中断中快速读取报文并交给UDS协议栈解析。若中断处理过慢,可能导致FIFO溢出。因此,合理设置FIFO深度和中断阈值,是保证诊断响应实时性的重要手段。
四、案例与配置示例
以下是一个简化的RSCAN通道初始化流程,展示寄存器配置与消息RAM分区的基本顺序:
/* 1. 使能CAN模块时钟 */
CAN0.GCTRL.BIT.CLKE = 1;
/* 2. 配置消息RAM分区:发送区、接收FIFO、过滤表 */
CAN0.RAMCFG.TX_START = 0x000;
CAN0.RAMCFG.TX_DEPTH = 16;
CAN0.RAMCFG.RXFIFO_START = 0x100;
CAN0.RAMCFG.RXFIFO_DEPTH = 32;
CAN0.RAMCFG.FILTER_START = 0x300;
/* 3. 配置位定时:仲裁段500kbps,数据段2Mbps */
CAN0.CH0.NBTP = 0x...; /* 仲裁段位定时 */
CAN0.CH0.DBTP = 0x...; /* 数据段位定时 */
/* 4. 使能接收FIFO中断和错误中断 */
CAN0.CH0.RXFIE = 1;
CAN0.CH0.EIE = 1;
/* 5. 进入正常模式 */
CAN0.CH0.CTRL.BIT.MODE = 0;
在实际工程中,还需要配置过滤表以只接收特定CAN ID的UDS诊断报文,避免无关报文占用FIFO。例如,功能寻址ID和物理寻址ID应分别配置过滤规则。
五、常见误区与复盘
| 误区 | 现象 | 正确做法 |
|---|---|---|
| 只配置仲裁段波特率 | CAN FD数据段通信失败 | 分别配置NBTP和DBTP,确保数据段波特率正确 |
| 消息RAM分区重叠 | 报文错乱或覆盖 | 按手册计算各区域起始地址和深度,避免重叠 |
| 接收FIFO深度过小 | 诊断请求丢失 | 根据总线负载和诊断频率增大FIFO深度 |
| 中断标志未清除 | 中断反复触发 | 在ISR中按手册要求清除对应标志位 |
总结来说,RH850 CAN FD控制器的架构可以概括为“协议引擎管收发、消息RAM管缓冲、寄存器管配置、中断管通知”。掌握消息RAM的分区方法和中断处理流程,是后续实现CAN FD驱动和UDS诊断通信的关键基础。