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

1共享FIFO缓冲区的模式配置
配置寄存器:通过CFDCFCCn.CFM[1:0]位设置共享FIFO缓冲区的模式。
00b(RX模式):默认模式,仅允许从RX FIFO或配置为RX的共享FIFO读取消息(消息存储基于AFL条目)。
01b(TX模式):消息可以读写到以TX模式配置的共享FIFO缓冲区中,写入的消息会被发送到对应CAN通道。
10b(GW模式):仅允许读取消息,但CPU读取操作不改变读写指针(指针由CANFD模块自动管理)。
11b(保留模式):禁止写入,否则可能导致未定义行为。
2GW模式下的缓冲区满处理策略
行为控制位:由CFDCFCCEn.CFMOWM位决定缓冲区满时的操作:
CFMOWM=0:丢弃新消息,并置位CFDCFSTSn.CFMLT标志。
CFMOWM=1:覆盖最旧数据,读指针自动指向下一个旧消息,并置位CFDCFSTSn.CFMOW标志。
错误处理:
在发送缓冲区满且发生总线错误或仲裁丢失时,消息丢失且不重传,读指针自动后移。
3关键注意事项
硬件复位后状态:所有共享FIFO缓冲区默认处于RX模式,需配置完成后再启用。
指针管理:
GW模式:指针仅由CANFD模块控制(如新消息存储或发送完成时)。
TX/RX模式:指针由CPU读写操作直接管理。
保留值风险:不可配置为11b,否则可能引发系统异常。
配置建议
1模式选择:
RX模式:适用于纯接收场景(如传感器数据采集)。
TX模式:适用于需主动发送消息的场景(如控制指令下发)。
GW模式:适用于网关或数据转发场景(需自动管理缓冲区)。
2溢出策略:
若需保留历史数据,选择CFMOWM=0(丢弃新消息)。
若需保证最新数据,选择CFMOWM=1(覆盖旧数据)。
3错误处理:
在GW模式下,需结合总线监控机制,避免因仲裁丢失或错误导致关键消息丢失。
潜在问题
指针不一致:在GW模式下,若手动操作指针可能导致数据错乱,需严格依赖模块自动管理。
配置顺序错误:未完成模式配置前启用FIFO缓冲区,可能导致消息路由异常。
关于FIFOTX消息缓冲区的链接配置的解读:

1FIFO TX消息缓冲区链接的必要性
应用场景:当共享FIFO配置为TX模式或GW模式时,必须将其链接至一个Normal TX消息缓冲区,以参与CAN通道的传输扫描。
核心作用:通过链接实现FIFO缓冲区与CAN通道的通信调度,确保数据传输的协调性。
2关键配置规则
唯一性约束:
每个共享FIFO必须链接到唯一的TX消息缓冲区,禁止多个FIFO共享同一缓冲区(避免数据冲突)
操作限制:
禁止向已链接的TX消息缓冲区直接写入数据。
链接的TX消息缓冲区不可加入TX队列(避免干扰FIFO传输逻辑)。
3配置方法
寄存器设置:通过CFDCFCCn.CFTML[4:0]位(5位字段)配置链接的TX消息缓冲区编号。
可选范围:
0x00→TX Message Buffer 32
0x01→TX Message Buffer 33
...
0x1F→TX Message Buffer 63
缓冲区总数:共32个专用TX消息缓冲区(编号3263)。
4注意事项
配置冲突风险:若两个FIFO链接到同一缓冲区,可能导致数据覆盖或传输错误。
范围限制:必须确保CFDCFCCn.CFTML[4:0]的值在0x000x1F范围内(超出会导致未定义行为)。
配置流程建议
1分配缓冲区:
根据系统需求,为每个TX/GW模式的共享FIFO分配唯一的TX消息缓冲区(从32到63中选择)。
2寄存器写入:
通过CFDCFCCn.CFTML[4:0]位设置对应的缓冲区编号。
3验证隔离性:
确保链接的缓冲区未加入TX队列,且未被其他FIFO占用。
潜在问题与解决
传输失败:若未正确链接缓冲区,可能导致FIFO无法参与传输扫描,需检查CFDCFCCn.CFTML配置。
数据丢失:若多个FIFO共享同一缓冲区,需重新分配缓冲区编号并更新寄存器设置。
示例配置
FIFO1:配置为TX模式,链接至TXMessageBuffer32(CFTML[4:0]=0x00)。
FIFO2:配置为GW模式,链接至TXMessageBuffer33(CFTML[4:0]=0x01)。
其他FIFO:依此类推,确保编号唯一。
下面是关于FIFO深度配置的解读:

1FIFO深度配置
(FIFO Depth Configuration)
配置寄存器:
RX FIFO:通过CFDRFCCn.RFDC[2:0]位设置深度。
共享FIFO:通过CFDCFCCn.CFDC[2:0]位设置深度。
关键限制:
RAM分配上限:总消息数(RX消息缓冲区+FIFO缓冲区)不得超过((n+1)*256),n为CAN通道数或其他参数)。
用户需自行确保配置不超限,否则可能导致内存溢出或数据丢失。
链接有效性条件:
当共享FIFO深度≥4消息时,其TX消息缓冲区链接始终有效(无论FIFO是否启用)。
若深度为0,链接无效。
2FIFO有效载荷大小配置
(FIFO Payload Size Configuration)
配置寄存器:
RX FIFO:通过CFDRFCCn.RFDC[2:0]位设置深度。
共享FIFO:通过CFDCFCCn.CFDC[2:0]位设置深度。
默认值:8字节(寄存器值000b)。
配置注意事项
1深度与链接关系:
若需使用共享FIFO的TX消息缓冲区链接,必须确保其深度≥4消息。
深度为0时,FIFO无法启用且链接无效。
2性能与容量权衡:
增加FIFO深度可缓存更多消息,但会占用更多RAM。
增大有效载荷支持更大数据帧,但可能降低实时性(需匹配总线速率)。
潜在问题与解决方案
配置超限风险:若总消息数超过RAM上限,需减少FIFO深度或调整RX消息缓冲区数量。
无效链接操作:若深度<4时尝试启用链接,需检查CFDCFCCn.CFDC[2:0]值并重新配置。
数据截断:若接收帧超过配置的有效载荷大小,需结合CFDGCFG.CMPOC位设置处理策略(见前文解析)。
示例配置
1共享FIFO配置:
模式:TX模式(CFDCFCCn.CFM[1:0]=01b)。
深度:16消息(CFDCFCCn.CFDC[2:0]=011b)。
有效载荷:64字节(CFDCFCCn.CFPLS[2:0]=111b)。
TX缓冲区链接:TXMessageBuffer32(CFDCFCCn.CFTML[4:0]=0x00)。
2RXFIFO配置:
深度:32消息(CFDRFCCn.RFDC[2:0]=100b)。
有效载荷:32字节(CFDRFCCn.RFPLS[2:0]=101b)。
全部0条评论
快来发表一下你的评论吧 !