4. RH850 CAN FD寄存器级编程基础

在RH850系列MCU上使用CAN FD,寄存器级编程的核心不是“把外设打开”,而是让控制器在正确的时钟、正确的位时序和正确的接收规则下进入可通信状态。RH850的CAN FD模块(通常称为RS-CANFD)围绕通道(Channel)组织,每个通道拥有独立的控制、位时序、过滤和FIFO寄存器组。理解这些寄存器之间的依赖顺序,是避免“配置写了但总线不通信”的关键。

初始化流程:先复位,再配置,最后使能

RH850 CAN FD通道的初始化必须遵循“进入复位模式→配置全局参数→配置位时序→配置接收规则→退出复位模式→使能通道”的顺序。若在未进入复位模式时修改位时序寄存器,写入可能被忽略或产生不可预期的总线行为。

典型初始化步骤如下:首先通过CFDCnCTR寄存器将通道置入复位/停止状态,等待CFDCnSTS中的状态位确认已进入复位;然后配置全局时钟源与预分频,确定CAN FD协议时钟(通常为40MHz或20MHz);接着写入位时序寄存器CFDCnBTR与数据段位时序寄存器CFDCnBTRD;再配置全局过滤和接收规则;最后清除复位位,等待通道进入正常模式。整个过程需要检查状态位,而不是仅靠延时。

RH850的CAN FD模块通常要求先配置CFDCnCFG中的时钟分频和FD使能位,再配置位时序。若顺序颠倒,位时序计算所依据的时钟可能尚未稳定。

位时序配置:把总线时间切成段

CAN FD的位时间由四个段组成:同步段(Sync)、传播段(Prop)、相位缓冲段1(Phase1)和相位缓冲段2(Phase2)。在RH850中,这些段通过CFDCnBTR(仲裁段)和CFDCnBTRD(数据段)中的TSEG1、TSEG2、SJW和BRP字段设置。仲裁段使用标称位速率,数据段使用更高的数据位速率。

位时间计算公式为:

t_bit = (1 + TSEG1 + TSEG2) × t_q
t_q   = BRP / f_can_clk
采样点 = (1 + TSEG1) / (1 + TSEG1 + TSEG2) × 100%

其中TSEG1包含传播段和相位缓冲段1,TSEG2为相位缓冲段2,SJW为同步跳转宽度,BRP为波特率预分频。RH850的寄存器字段通常以“实际值减1”编码,例如写入TSEG1=15表示16个时间份额。

波特率与采样点设置:以500k/2M为例

假设CAN FD协议时钟f_can_clk = 40MHz,目标仲裁段波特率500kbps、数据段2Mbps,采样点均设为80%。

仲裁段:位时间t_bit = 1/500k = 2000ns。取t_q = 25ns,则BRP = 40MHz × 25ns = 1,总时间份额= 2000/25 = 80。采样点80%意味着(1+TSEG1)/80 = 0.8,得TSEG1 = 63,TSEG2 = 16。写入寄存器时TSEG1字段填62,TSEG2字段填15,SJW可取4~8。

数据段:位时间t_bit = 1/2M = 500ns。同样t_q = 25ns,总时间份额= 20。采样点80%得TSEG1 = 15,TSEG2 = 4。写入时TSEG1填14,TSEG2填3。

实际配置中,采样点需根据总线长度和收发器延迟调整。长总线或高延迟收发器应适当提高采样点至85%~90%,但数据段采样点通常不超过80%,否则SJW余量不足。

RH850 CAN FD 位时序与采样点配置示意(仲裁段 500k / 数据段 2M) 仲裁段位时间(500 kbps,t_q = 25 ns,共 80 t_q) Sync TSEG1 = 63 t_q(Prop + Phase1) TSEG2 = 16 t_q 采样点 80% 数据段位时间(2 Mbps,t_q = 25 ns,共 20 t_q) Sync TSEG1 = 15 t_q TSEG2 = 4 t_q 采样点 80% 寄存器写入值(字段编码为实际值减1): CFDCnBTR:BRP=0,TSEG1=62,TSEG2=15,SJW=3 | CFDCnBTRD:BRP=0,TSEG1=14,TSEG2=3,SJW=1

全局过滤与接收规则配置

RH850 CAN FD的接收过滤分为全局过滤和通道级接收规则。全局过滤通过CFDGAFL寄存器组配置,每个过滤条目包含ID、掩码、IDE/RTR匹配位以及目标FIFO或接收缓冲区的指向。接收规则则决定匹配后的报文进入哪个接收FIFO(CFDRF)或接收缓冲区(CFDRM)。

配置时,先通过CFDGAFLCTR使能全局过滤功能,再逐条写入CFDGAFLID、CFDGAFLM和CFDGAFLP。每条规则需要明确:标准帧还是扩展帧、是否匹配RTR、掩码覆盖哪些位、匹配后路由到哪个FIFO。例如,只接收ID为0x123的标准数据帧,可设置ID=0x123,掩码=0x7FF,IDE匹配位设为标准帧,路由到接收FIFO0。

接收FIFO的深度和中断使能也需要同步配置。若使用接收FIFO,需在CFDRFCC中设置FIFO深度和中断阈值;若使用接收缓冲区,则配置CFDRMCC。过滤规则与FIFO的对应关系一旦写错,报文会被丢弃或进入错误的缓冲区,表现为“总线有波形但软件收不到”。

全局过滤条目数量有限(通常16~32条),且部分条目可能被系统保留。配置前应确认可用条目数,避免覆盖保留条目导致接收异常。

配置检查与常见问题

完成上述配置后,建议按以下顺序检查:确认通道已退出复位模式且CFDCnSTS显示正常;用示波器或CAN分析仪观察总线是否有正确帧;检查采样点是否与总线其他节点一致;确认过滤规则的目标FIFO与中断配置匹配。若通信失败,优先排查位时序寄存器是否在复位模式下写入、BRP与时钟是否匹配、采样点是否偏离总线要求。

寄存器级编程的价值在于可控性:每一个时间份额、每一条过滤规则都可以精确计算和验证。掌握初始化顺序、位时序计算和过滤路由这三条主线,就能在RH850上稳定地建立CAN FD通信基础,为后续故障注入和异常测试提供可靠的底层平台。