云途MCU CAN_FIFO介绍
GaoSheng Lv4

本文简要介绍一下云途CAN的FIFO
在经典CAN模式下,消息缓冲区可被分配为邮箱模式FIFO使能模式

邮箱模式:
每个缓冲区块占用512 byte。内含32个邮箱(8字节负载),每个邮箱占用4个字(32位)的空间。云途MCU不同系列缓冲区块数量RAM Block Number可能不同,需要查看对应的手册
图片1

下面是对于邮箱结构内部段的介绍:
EDL:区分经典CAN帧和CANFD帧. -0:经典CAN帧; -1:CANFD帧
BRS:指示是否为可变波特率帧 -0:非可变波特率 ;-1可变波特率
ESI:错误状态指示,仅用于发送邮箱 -0:无错误;-1发生错误
CODE:邮箱控制或状态代码,详细参见参考手册 FlexCAN 章节 Message Buffer Structure 小结
SRR:当被用作发送邮箱时,此时必须置1
IDE:扩展帧标识 -0:标准帧;-1扩展帧
• RTR:当用于发送邮箱时,指示为远程帧;当用于接受邮箱时,作为远程帧滤波器
– 0 :当用于发送邮箱时,此邮箱为非远程帧发送邮箱;当用于接收邮箱时,此邮箱仅接受非远程帧
– 1 :当用于发送邮箱时,此邮箱为远程帧发送邮箱;当用于接收邮箱时,此邮箱仅接受远程帧
• DLC:指示数据长度信息
• TIME STAMP:发送或接收时间戳
• PRIO:邮箱仲裁优先级
• ID:接收时,作为该邮箱接收滤波器接收码;发送时,作为发送报文 ID
• DATA 0~DATA 63:CAN 帧数据段

图片2

  • mb_idx:邮箱编号
  • tx_info:邮箱配置信息结构体(主要配置邮箱发送数据帧的类型以及数据长度信息)
  • msg_id:发送报文ID

FIFO使能模式:
当 FIFO 使能时,前 6+n 个邮箱被分配为接收 FIFO,接受 FIFO 包含接受消息队列和接收滤波器接收码。消息队列固定占用 6 个消息邮箱(MB 0-5)

当 FIFO 使能时,滤波器组中的滤波器可通过 MCR[IDAM] 被设置为 3 中不同的格式
图片3
图片4

id_format:滤波器形式,FIFO模式下可选择A(单滤波器)、B(双滤波器)、C(四滤波器)三种形式;
id_filter_table:滤波器配置数组。

FIFO占用的消息邮箱的个数取决于配置的接受滤波器的个数,每个MB空间可以定义4个filter
图片5

例如,设置8个滤波器,即CTRL2[RFFN]=0,此时FIFO占用了8个邮箱,因此FIFO使能的话邮箱0~邮箱7不能配置为收发邮箱,只能使⽤邮箱编号为8及以后的邮箱。

那最少的定义(RFFN=0)MB6, 7 会被用做filter 的设置。 MB 6-7的空间能容纳8个filter, 这样RXIMR[0…7] 也有8个mask 与之对应, 所以就用不到 Rx FIFO global mask 了。

如果 RFFN = 1, 再加两个MB空间用作filter,即一共是6-9,那么会有16个filter, 但是 0-9 只有10个RXIMR 与之对应, 这样还有6个filter (10…15)没有mask 与其对应,那么这时RX FIFO global mask就发挥作用,就跟这6个filter 合作,过滤收到的ID。
图片6
这里可能有些难理解,先做一个小总结:
Q:为什么全局掩码在RFFN=0时不生效?
A:因为所有 8 个过滤器均有对应的独立掩码(RXIMR[0…7]),无需全局掩码介入。
Q:如果过滤器数量超过 RXIMR 数量,会发生什么?
A:超出的过滤器(如 Filter 10-15)必须使用全局掩码,否则无法有效过滤(可能默认拒绝或接收所有报文,取决于硬件设计)。独立掩码不够时,全局掩码补位

在CAN FD模式下不能使用Legacy FIFO,只能使用enhanced FIFO,filterScheme项可以配置滤波器的格式,有以下三种⽅式可选(范围接收、ID + 掩码接收、双ID接收):
图片7
在CAN控制器被配置为CANFD模式下,每个缓冲区的可被配置为不同的邮箱负载大小。当缓冲区被定义大小后,每个邮箱的数据结构及占用的RAM空间大小不同,那么每个缓冲区块所包含的邮箱个数也不同。当开启CANFD模式时,FIFO功能被禁用
图片8

滚动查询发送邮箱的状态,使用空闲邮箱发送报文
图片9

配置MailBox36的接收ID和掩码值,用于接收0x600~0x67F的范围ID报文
图片10

本站由 提供部署服务