4. CAN FD通信配置流程
在RH850平台上完成CAN FD通信,核心不是“打开外设”这么简单,而是要让控制器时钟、位时序、波特率、过滤器以及邮箱资源形成一条自洽的配置链。任何一环参数不匹配,都会表现为总线无法进入正常通信、采样点偏移、报文丢失或邮箱不触发。本节以RH850 CAN FD模块(如RSCANFD/RS-CANFD)为例,梳理从时钟到邮箱初始化的完整工程流程。
一、核心原理:配置链的先后依赖
CAN FD控制器的配置必须遵循“先时钟、再位时序、后波特率、再过滤器、最后邮箱”的顺序。原因是:位时序寄存器中的分频和段参数直接依赖CAN时钟频率;波特率由时钟与位时序共同决定;过滤器依赖接收规则和FIFO/邮箱分配;邮箱初始化又依赖前四项已经稳定。若顺序颠倒,常见现象是写入位时序后实际波特率与预期不符,或过滤器未生效导致所有报文被丢弃。
二、时钟配置:确定CAN FD的时间基准
RH850的CAN FD模块通常从系统时钟分频得到CAN时钟(CANCLK)。第一步是确认时钟源和分频系数,使CANCLK落在模块允许范围内。以常见的40MHz CANCLK为例,若目标仲裁段波特率为500kbps、数据段为2Mbps,则一个位时间分别对应80个和20个CANCLK周期。时钟配置阶段需要完成:选择时钟源、设置分频器、使能CAN模块时钟、释放复位。
/* 示例:CAN FD时钟配置思路 */
CAN0CKSR = 0x00; /* 选择CAN时钟源 */
CAN0BRP = 0x00; /* 预分频,得到CANCLK = 40MHz */
CAN0CTR = 0x00; /* 进入配置模式 */
CAN0CTR |= (1 << 6); /* 使能CAN模块时钟 */
CAN0CTR &= ~(1 << 7); /* 释放复位 */
注意:不同RH850型号的寄存器名和位定义不同,实际工程中应以对应硬件手册为准。时钟配置完成后,建议先读回寄存器确认CANCLK频率,再进入位时序计算。
三、位时序计算与波特率设置
CAN FD的位时间由同步段(SYNC)、传播段(PROP)、相位缓冲段1(PBS1)和相位缓冲段2(PBS2)组成。采样点通常设置在75%~80%之间。以CANCLK=40MHz、仲裁段500kbps为例,位时间TQ总数为80,可取SYNC=1TQ、PROP=31TQ、PBS1=32TQ、PBS2=16TQ,采样点=(1+31+32)/80=80%。数据段2Mbps时TQ总数为20,可取SYNC=1TQ、PROP=6TQ、PBS1=7TQ、PBS2=6TQ,采样点=70%。
| 参数 | 仲裁段(500kbps) | 数据段(2Mbps) |
|---|---|---|
| CANCLK | 40MHz | 40MHz |
| 位时间TQ总数 | 80 | 20 |
| SYNC | 1TQ | 1TQ |
| PROP | 31TQ | 6TQ |
| PBS1 | 32TQ | 7TQ |
| PBS2 | 16TQ | 6TQ |
| 采样点 | 80% | 70% |
波特率设置时,仲裁段和数据段分别写入对应的位时序寄存器。若使用CAN FD的BRS位切换速率,必须确保两段采样点均满足总线长度和收发器延迟要求。采样点过前会导致抗干扰能力下降,过后则容易在长线缆上产生位错误。
四、过滤器配置:让正确的报文进入邮箱
过滤器决定哪些CAN ID可以进入接收邮箱或FIFO。RH850通常提供全局过滤器和通道过滤器,支持标准帧、扩展帧以及掩码匹配。配置步骤为:设置过滤规则编号、指定ID和掩码、绑定到接收FIFO或邮箱、使能过滤。若过滤器未使能,接收邮箱可能永远收不到报文;若掩码设置过宽,则会出现大量无关报文占用CPU。
/* 过滤器配置示例:接收标准ID 0x123 */
RCAN0_GAFLIDL0 = 0x123 << 18; /* ID */
RCAN0_GAFLMLL0 = 0x7FF << 18; /* 掩码,全匹配 */
RCAN0_GAFLP0_0 = 0x00000000; /* 绑定接收FIFO0 */
RCAN0_GAFLECTR = 0x01; /* 使能过滤器 */
五、发送与接收邮箱初始化步骤
邮箱初始化是配置流程的最后一步,也是工程中最容易出错的部分。发送邮箱需要设置ID、DLC、数据区、发送优先级和发送请求;接收邮箱需要设置接收规则、FIFO深度、中断使能和水印。典型步骤如下:
- 进入配置模式,停止CAN通道。
- 配置发送邮箱:设置ID、DLC、数据指针、优先级,清除发送请求。
- 配置接收邮箱/FIFO:设置接收规则、深度、水印、中断。
- 使能邮箱和FIFO,退出配置模式。
- 进入正常模式,等待总线同步,开始收发。
六、案例与复盘:常见误区
某项目在RH850上配置CAN FD时,仲裁段500kbps、数据段2Mbps,但实际通信中数据段频繁报错。排查发现:位时序寄存器中PBS2被误写为5TQ,导致数据段采样点变为75%,而收发器延迟较大,最终在2Mbps下出现位错误。修正PBS2为6TQ后通信恢复正常。另一个常见误区是过滤器未绑定到接收FIFO,导致接收邮箱始终为空;还有工程师在未退出配置模式时就写入发送请求,结果报文无法发出。
综上,RH850 CAN FD配置流程是一条强依赖链:时钟决定时间基准,位时序决定采样点,波特率决定通信速率,过滤器决定报文入口,邮箱决定收发通道。工程中建议将上述参数整理成配置表,逐项核对后再进入正常模式,可显著降低调试周期。