技术 | 带你解析RZN2L CANFD数据收发缓冲区及例程调试笔记(1)

来源: 瑞萨嵌入式小百科 作者:Deane 2025-05-15 14:17:23

 

在工业自动化、智能交通、机器人等领域,CANFD(CAN with Flexible Data-Rate)技术正逐步取代传统CAN,以适应更高的数据速率和更复杂的通信需求。本文将深入解析RZ/N2L CANFD模块的缓冲区机制,帮助工程师更高效地管理CAN消息,提高系统性能。(下面的内容主要涉及RZN2L CANFD外设手册的解读,篇幅较长,感兴趣的读者可以收藏,以备日后不时之需)

 

RZN2L CAN-FD模块提供高达8 Mbps的数据速率,支持丰富的缓冲管理机制(独立缓冲、FIFO缓冲、共享缓冲),提供完整的消息过滤、错误检测、消息路由及传输管理,同时具备低功耗模式测试功能,适用于工业控制、汽车电子、自动化系统等需要高可靠性和高性能通信的应用。

  
请先看一下RZN2L硬件手册中关于发送/接收缓冲区的描述:

  
以下是对该截图内容的进一步解析:

概述

CANFD模块的消息缓冲区包括:

RX普通消息缓冲区(Reception Normal Message Buffers)

RX FIFO消息缓冲区(Reception FIFO Access Message Buffers)

共享IFO消息缓冲区(Common FIFO Access Message Buffers)

TX普通消息缓冲区(Transmission Normal Message Buffers)

RX消息缓冲区通过RX消息缓冲区寄存器访问。

RX FIFO缓冲区共享FIFO缓冲区(RX模式、TX模式、GW模式)只能通过FIFO访问寄存器访问。

TX消息缓冲区,通过TX消息缓冲区寄存器访问。

FIFO模式说明

如果共享FIFO配置为TX模式,只能通过FIFO访问寄存器写入数据。

如果共享FIFO配置为RX模式或GW模式,只能通过FIFO访问寄存器读取数据。

未使用的消息缓冲区被读取时,值未知。

该图展示了消息缓冲区的具体分布,

结构如下:

RX普通消息缓冲区 RXMB0~RXMB31

RX FIFO消息缓冲区 RX FIFO0~RX FIFO7

共享FIFO缓冲区 COM FIFO0~COM FIFO5(分别对应于Channel0和Channel1)

TX普通消息缓冲区 TXMB0~TXMB127(分别对应于Channel0和Channel1)

重点理解

普通RX和TX缓冲区采用直接寄存器访问。

FIFO缓冲区需要FIFO访问寄存器进行读/写。

FIFO缓冲区的模式(RX/TX/GW)决定了其访问权限:

TX模式:仅可写

RX/GW模式:仅可读

未配置的缓冲区读取时,其值未知。

  
下面我们进一步深入了解一下硬件手册中34.6.2的FIFO缓冲区。

FIFO缓冲区概述

CANFD模块提供固定数量的FIFO缓冲区,用于接收(RX)发送(TX)网关(GW)功能,适用于不同的CAN通道。

仅用于接收的FIFO缓冲区固定为8个

每个CAN通道可配置3个共享FIFO缓冲区,这些缓冲区可用于:

  • 发送消息(TX)
  • 接收消息(RX)
  • 网关(GW)

FIFO缓冲区的配置选项

这些FIFO缓冲区可以启用或禁用,并且支持以下配置参数:

Size(大小):FIFO缓冲区的容量,即可存储多少个CAN帧。

Interrupt structure(中断结构):是否启用FIFO相关的中断及其触发机制。

Message lost mechanism(消息丢失机制):用于处理FIFO缓冲区满时的消息丢失策略。

Message over write mechanism(消息覆盖机制):当FIFO缓冲区满时,是否允许新消息覆盖旧消息。

Location of the TXFIFO or GWFIFO(TXFIFO或GWFIFO的存储位置):决定TXFIFO或GWFIFO在CAN通道中的存放位置。

 

当接收帧超出数据字段大小时的处理

接收到的CAN帧超出数据字段大小时,是否接收该帧取决于CFDGCFG.CMPOC位的配置,假如预设置的长度是32,消息拒绝的情况是整个数据帧全部不接收,截断的情况是只接收32长度的数据,超过的部分截断后不接收,仅保留配置好的长度数据载荷。

消息拒绝(Reject)

仅保留配置好的长度的数据载荷(Data payload cut)

重点解析

固定8个RXFIFO,同时CANFD每个通道有3个可配置的共享FIFO(RX/TX/GW)。

FIFO具备丢失、覆盖、存储位置、中断等机制,可适应不同需求。

需要正确配置CFDGCFG.CMPOC以处理数据字段超长的情况。 
 

这部分内容主要涉及CANFD FIFO机制的配置和管理,对于优化CAN通信和提升实时性具有重要作用。

  
下面我们解析一下普通消息缓冲区的一些基本用法:

Normal RX Message Buffers功能

CANFD模块通过AFL(Acceptance Filter List,接收过滤器列表)将不同通道接收的帧路由到配置的Normal RX Message Buffers(常规接收消息缓冲区)。  

缓冲区数量:

可配置范围:0x00(无缓冲区)至最大值=16×CAN通道数。

示例:2个CAN通道时,最大缓冲区数为32(0x20)。

配置寄存器:RX Message Buffer Number Register。

关键配置限制

AFL条目与缓冲区的匹配:

AFL条目数量不可超过RX Message Buffer Number Register中配置的缓冲区数量。

风险提示:CANFD模块无内部检查机制,错误配置可能导致缓冲区溢出或消息丢失,需用户自行确保正确性。

数据字段大小与溢出处理

数据字段配置:

通过CFDRMNB.RMPLS[2:0]位配置,默认8字节,最大支持64字节。

溢出处理策略:

若接收帧超过配置大小,行为由CFDGCFG.CMPOC位决定:

拒绝消息(Message Rejecting)或截断数据(Data Payload Cut)。

配置注意事项

缓冲区数量:需根据实际通道数计算最大值(如3个通道时,最大缓冲区为48)。

AFL条目:必须与缓冲区数量严格匹配,避免超限。

数据截断风险:若系统要求完整数据帧,需将数据字段大小设为64字节(最大值)并启用拒绝消息模式。

潜在问题

若AFL条目配置超过缓冲区数量,可能导致未定义行为(如覆盖其他缓冲区数据)。

增加缓冲区数量会占用更多内存,需根据系统实时性需求平衡配置。

https://community-ja.renesas.com/zh/forums-groups/mcu-mpu/

0
收藏
0