在工业自动化、智能交通、机器人等领域,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消息缓冲区寄存器访问。
2
FIFO模式说明
如果共享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缓冲区。
1
FIFO缓冲区概述
CANFD模块提供固定数量的FIFO缓冲区,用于接收(RX)、发送(TX)和网关(GW)功能,适用于不同的CAN通道。
仅用于接收的FIFO缓冲区固定为8个。
每个CAN通道可配置3个共享FIFO缓冲区,这些缓冲区可用于:
发送消息(TX)
接收消息(RX)
网关(GW)
2
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通道中的存放位置。
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通信和提升实时性具有重要作用。
下面我们解析一下普通消息缓冲区的一些基本用法:
1
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。
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条目配置超过缓冲区数量,可能导致未定义行为(如覆盖其他缓冲区数据)。
增加缓冲区数量会占用更多内存,需根据系统实时性需求平衡配置。
未完待续
如您在使用瑞萨MCU/MPU产品中有任何问题,可识别下方二维码或复制网址到浏览器中打开,进入瑞萨技术论坛寻找答案或获取在线技术支持。
https://community-ja.renesas.com/zh/forums-groups/mcu-mpu/
未完待续
推荐阅读
如何使用RZ/T2L RZ/N2L RSK J-Link OB
产品详解 | 瑞萨电子RZ/T2M MPU
瑞萨RZ/T2M产品及TSN功能支持介绍