在工业自动化、智能交通、机器人等领域,CANFD(CAN with Flexible Data-Rate)技术正逐步取代传统CAN,以适应更高的数据速率和更复杂的通信需求。本文将深入解析RZ/N2L CANFD模块的缓冲区机制,帮助工程师更高效地管理CAN消息,提高系统性能。(下面的内容主要涉及RZN2L CANFD外设手册的解读,篇幅较长,感兴趣的读者可以收藏,以备日后不时之需)
RZN2L CAN-FD模块提供高达8 Mbps的数据速率,支持丰富的缓冲管理机制(独立缓冲、FIFO缓冲、共享缓冲),提供完整的消息过滤、错误检测、消息路由及传输管理,同时具备低功耗模式和测试功能,适用于工业控制、汽车电子、自动化系统等需要高可靠性和高性能通信的应用。
请先看一下RZN2L硬件手册中关于发送/接收缓冲区的描述:

以下是对该截图内容的进一步解析:
1概述
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消息缓冲区寄存器访问。
2FIFO模式说明
如果共享FIFO配置为TX模式,只能通过FIFO访问寄存器写入数据。
如果共享FIFO配置为RX模式或GW模式,只能通过FIFO访问寄存器读取数据。
未使用的消息缓冲区被读取时,值未知。
3该图展示了消息缓冲区的具体分布,
结构如下:
RX普通消息缓冲区
RXMB0~RXMB31
RX FIFO消息缓冲区
RX FIFO0~RX FIFO7
共享FIFO缓冲区
COM FIFO0~COM FIFO5(分别对应于Channel0和Channel1)
TX普通消息缓冲区
TXMB0~TXMB127(分别对应于Channel0和Channel1)
4重点理解
普通RX和TX缓冲区采用直接寄存器访问。
FIFO缓冲区需要FIFO访问寄存器进行读/写。
FIFO缓冲区的模式(RX/TX/GW)决定了其访问权限:
TX模式:仅可写
RX/GW模式:仅可读
未配置的缓冲区读取时,其值未知。
下面我们进一步深入了解一下硬件手册中34.6.2的FIFO缓冲区。

1FIFO缓冲区概述
CANFD模块提供固定数量的FIFO缓冲区,用于接收(RX)、发送(TX)和网关(GW)功能,适用于不同的CAN通道。
仅用于接收的FIFO缓冲区固定为8个。
每个CAN通道可配置3个共享FIFO缓冲区,这些缓冲区可用于:
发送消息(TX)
接收消息(RX)
网关(GW)
2FIFO缓冲区的配置选项
这些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通道中的存放位置。
3当接收帧超出数据字段大小时的处理
当接收到的CAN帧超出数据字段大小时,是否接收该帧取决于CFDGCFG.CMPOC位的配置,假如预设置的长度是32,消息拒绝的情况是整个数据帧全部不接收,截断的情况是只接收32长度的数据,超过的部分截断后不接收,仅保留配置好的长度数据载荷。
消息拒绝(Reject)
仅保留配置好的长度的数据载荷(Data payload cut)
4重点解析
固定8个RXFIFO,同时CANFD每个通道有3个可配置的共享FIFO(RX/TX/GW)。
FIFO具备丢失、覆盖、存储位置、中断等机制,可适应不同需求。
需要正确配置CFDGCFG.CMPOC以处理数据字段超长的情况。
这部分内容主要涉及CANFD FIFO机制的配置和管理,对于优化CAN通信和提升实时性具有重要作用。
下面我们解析一下普通消息缓冲区的一些基本用法:

1Normal RX Message Buffers功能
CANFD模块通过AFL(Acceptance Filter List,接收过滤器列表)将不同通道接收的帧路由到配置的Normal RX Message Buffers(常规接收消息缓冲区)。
缓冲区数量:
可配置范围:0x00(无缓冲区)至最大值=16×CAN通道数。
示例:2个CAN通道时,最大缓冲区数为32(0x20)。
配置寄存器:RX Message Buffer Number Register。
2关键配置限制
AFL条目与缓冲区的匹配:
AFL条目数量不可超过RX Message Buffer Number Register中配置的缓冲区数量。
风险提示:CANFD模块无内部检查机制,错误配置可能导致缓冲区溢出或消息丢失,需用户自行确保正确性。
3数据字段大小与溢出处理
数据字段配置:
通过CFDRMNB.RMPLS[2:0]位配置,默认8字节,最大支持64字节。
溢出处理策略:
若接收帧超过配置大小,行为由CFDGCFG.CMPOC位决定:
拒绝消息(Message Rejecting)或截断数据(Data Payload Cut)。
配置注意事项
缓冲区数量:需根据实际通道数计算最大值(如3个通道时,最大缓冲区为48)。
AFL条目:必须与缓冲区数量严格匹配,避免超限。
数据截断风险:若系统要求完整数据帧,需将数据字段大小设为64字节(最大值)并启用拒绝消息模式。
潜在问题
若AFL条目配置超过缓冲区数量,可能导致未定义行为(如覆盖其他缓冲区数据)。
增加缓冲区数量会占用更多内存,需根据系统实时性需求平衡配置。
-
缓冲区
+关注
关注
0文章
36浏览量
9462 -
寄存器
+关注
关注
31文章
5588浏览量
129031 -
CAN
+关注
关注
58文章
3010浏览量
471391 -
fifo
+关注
关注
3文章
406浏览量
45480
发布评论请先 登录
解析RZ/N2L CANFD模块的缓冲区机制(2)
瑞萨电子RZ MPU家族精品RZ/N2L产品介绍

解析RZ/N2L CANFD模块的缓冲区机制(1)
评论