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

描述

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

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

接着前面的章节,下面了解一下在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消息缓冲区的链接配置的解读:

fifo

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深度配置的解读:

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)。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分