一、概述
Legacy RX FIFO 是 CAN 总线通信中常见数据存储和处理机制,Legacy RX FIFO 模式与 CANFD MB 结构使用到相同 RAM 空间所以不能同时开启。所以在 Legacy RX FIFO 基础上,进行功能扩展和优化的接收缓冲区结构,推出 Enhanced RX FIFO,其具有更大的 FIFO 缓冲区,可储存更多 CANFD 消息。
二、MB structure
在 CAN 和 CANFD 通信中 MB(Message Buffer,消息缓冲区) 是 CAN 控制器中用于存储和处理 CAN 消息的一块独立 RAM 存储区域,负责暂时存放接收到的 CAN 消息或者准备发送的 CAN 消息,每个 MB 都有其独特的标识符和相关的控制信息,用于区分不同的消息和管理消息的处理流程,MB 结构会根据相关配置而变化。
2.1 标准 CAN 模式
2.1.1 结构
以 NXP S32K358 芯片为例,在标准CAN 配置下 FlexCAN_0、FlexCAN_1 和 FlexCAN_2 最大支持 96MBs(FlexCAN_3 - FlexCAN_7 最大支持 64MBs,也就是 FlexCAN_0/1/2 相较于其他 FlexCAN MB 的 RAM 空间大小不一样,其功能更加强大),标准 CAN 模式下 MB 结构如下:
2.1.2 内存分布
FlexCAN_0/1/2 从 0x80 到 0x67F 的内存区域(FlexCAN_3-7 邮箱使用从 0x80 到 0x47F 内存区域)每个 8-byte payload MB 占用 16 字节(0x10) 大小 RAM 空间,按 FlexCAN_0/1/2 MB 内存空间就可以划分出 96 个 MBs。
2.2 开启 CANFD 模式
2.2.1 结构
开启 CANFD 后,MB 结构也发生了改变,与标准 CAN MB 结构基本相同,在 Data 段上结构会有所不同,例如 64-byte payload 的 MB 结构如下:
2.2.2 内存分布
启用 CANFD 后,会将 FlexCAN RAM 分区为 512 字节的每个块,每个块都可以通过 MBDSRx 单独配置为不同长度的 payload,因为 MB RAM 空间大小是固定的,划分出的 MB 数量也会根据 payload 的大小变化。
每个 Block 为按照不同长度 payload 后划分 MBs 数量(MBs 之间内存空间连续)
例如. Block0 配置 8-byte payload、Block1 配置 16-byte payload、Block2 配置 32-byte payload
2.3 开启 Legacy RX FIFO 模式
Legacy Rx FIFO 有 6 条消息深度,CPU 通过重复读取 Legacy FIFO 来按顺序读取接收到的消息,该模式与 CANFD 不能同时开启。
2.3.1 结构
当寄存器 CAN_MCR [RFEN]=1 时开启 Legacy RX FIFO ,MB 的结构就会改变,FlexCAN RAM 0x80-0xDF(通常由 MBs0-5 使用) 就会被 Legacy RX FIFO 引擎占用。
2.3.2 内存分布
1、FIFO 占用情况
FlexCAN RAM 0x80-0xDF 被用作 Legacy RX FIFO,再往后 0xE0-0x2DF 就变成了 Filter table element 内存空间,Filter table element 数量通过寄存器 CAN_CTRL2.RFFN[3:0] 配置(最大可配置 128 个,最小 8 个)。
2、Filter 占用情况
每个 Filter table element 占用 0x4 大小空间,每 4 个就相当于一个标准 CAN MB 大小,如果激活 128 ,就会占用相当于 32MBs 的 RAM 空间,所剩可用空间就是相当于 58(96-32-6) 个 MBs 的大小空间。
2.4 开启 Enhanced RX FIFO 模式
为了解决 Legacy RX FIFO 模式与 CANFD 不能同时开启问题,推出的增强型功能 Enhanced RX FIFO,作为 6-message RxFIFO 的替代方案,K3 FlexCAN 支持 Enhanced RxFIFO(最多储存 20 条 CANFD 消息)
2.4.1 结构
下面是 Enhanced RX FIFO structure:
2.4.2 内存分布
1、相较于 Legacy 模式 Enhanced RX FIFO 用到的内存空间和 MB 用到的 RAM 是两段空间,使用到内存空间地址偏移 2000h-0x263Fh ,FlexCAN 内存 0x2000h-204Fh 被用作第一个 Enhanced RX FIFO。
2、Enhanced RX FIFO 过滤器空间从 0x3000-0x31FC,根据过滤器被配置成 Extended ID类型和 Standard ID类型计算有多少过滤器。
三、过滤机制
CAN 通信过滤机制的作用包括减少数据冗余、提高数据处理效率、优化通信质量、增强系统安全性等,通过合理配置过滤机制,可使 CAN 网络中的节点更高效地处理和传输数据,确保关键数据的可靠传输,降低网络拥塞和错误的发生概率。
NXP S32K3xx 系列支持:
IDHIT:标识符接收帧的接收过滤命中指示器寄存器
Legacy RX FIFO ID 过滤器:能够匹配传入 ID(128 个拓展 ID、256 个标准 ID 或 512 个部分 (8-bit) ID),具有 32 个独立屏蔽能力。
Enhanced RX FIFO ID 过滤器:能够匹配传入 ID(64 个拓展 ID、128 个标准 ID 过滤元素),具有三种过滤模式(掩码过滤器、范围和两个无掩码过滤器)
3.1 标准邮箱的过滤器
接收进程中在 MB 被激活后,他就可以接收与过滤器匹配的帧消息。
3.1.1 匹配过程:
1、当接收到消息帧,它就被存储至一个隐藏的辅助 MB 中,称为串行消息缓冲区 RX SMB(Receive Serial Message Buffer),RX SMB 与 MB 具有相同结构。
2、如果该消息在 FIFO 表或者激活的 MB 中找到匹配的 ID,则 move-in 进程将 RX SMB 中的内容传输至匹配的 FIFO 或者 MB 中。
3、匹配过程扫描 RX FIFO 所以元素和激活的 MB,该过程会搜索与正在 CAN 总线上接收帧的 RX SMB 的匹配元素的成功比对情况。
4、匹配情况由 IDE(1bit)、RTR(1bit)、ID(29bit),通过这三个特征和 MASK 仲裁。
a. 对于 MB structure:如果系统管理块(SMB)中的 [IDE(标识符扩展位)] 为 1,标识符(ID)为 29 位(标准标识符加上扩展标识符)。如果 SMB 中的 [IDE] 为 0,标识符(ID)为 11 位(标准标识符)。对于传统的接收先进先出(RX FIFO)结构,标识符取决于标识符屏蔽寄存器(IDAM)。
b. cmp:比较操作,将接收的系统管理块(RX SMB)的内容与消息缓冲区(MB)的内容进行比较,而不考虑屏蔽码。
c. no_cmp:不进行比较,接收的系统管理块(RX SMB)的内容不与消息缓冲区(MB)的内容进行比较。
d. (cmp_msk):带屏蔽比较,将接收的系统管理块(RX SMB)的内容与消息缓冲区(MB)的内容进行比较,同时考虑屏蔽码。
e. 当标识符屏蔽寄存器(IDAM)为 C 类型时:不考虑系统管理块(SMB)中的 [IDE(标识符扩展位)] 和 [RTR(远程请求发送位)]。
5、在扫描结束时从这些结构中选择匹配成功对象。
3.2 Legacy Rx FIFO 过滤器
当 Legacy RX FIFO 开启,由 CTRL2[RFFN] 配置 Filter table element 为 A\B\C 三种形式,三种形式不能共存
1、每个 Filter table element 占 4 个字节,会根据:
A 模式: 每个FilterElement支持过滤 1 帧(标准帧/扩展帧)报文
B 模式: 每个FilterElement支持过滤 2 帧(标准帧/扩展帧)报文的高 13bits(29`16)
C 模式: 每个FilterElement支持过滤 4 帧(标准帧/扩展帧)报文的高 8bits
2、每个 FilterElement 的MASK是变化的,举个例子,如果我们设置了128个Filter表元素,那么前32个FilterElement 有自己的 Individual MASK,其余的 FilterElement 则共用一个 Global MASK。
3、FilterElement 结合 MASK 实现对 Legacy FIFO 的过滤规则。
3.3 Enhanced Rx FIFO 过滤器
1、Enhanced RX FIFO 的过滤器是通过 ERFFELn 寄存器来实现,然后根据 ERFFELn.NEXIF 位,过滤器存储空间可分为两个区域(一个用于存储扩展标识符过滤器元素,Extended ID 类型,另一个用于存储标准标识符过滤器元素,Standard ID 类型):
- NEXIF:Extended ID 过滤元素的数量
- NFE:Enhanced RX FIFO 滤波器元素数量
- Standard ID 过滤元素的数量:2 × (NFE - NEXIF + 1)
2、例如
- ERX_FIFO_FLT_ELEM = 128(CAN_ERFFEL 128 个)
- CAN ERFCR.NEXIF = 3(3 个 Extended ID 类型 filter elements 数量,每个占用内存相当于两个 Standard ID 类型)
- CAN_ERFCR.NFE = 63(122 个 Standard ID 类型 filter elements 数量(2 × (NFE - NEXIF + 1),每个占用内存 0x4 大小空间)
3、Extended ID 类型和 Standard ID 类型这两种类型可以同时存在,两种类型又都可以通过 ERFFELn.FSCH 配置成三种模式,Standard ID 类型:
Ⅰ. 基于掩码和滤波器:(当满足如下条件时,CAN 消息才能匹配过滤规则)
① CAN message is base-frame format (IDE = 0).
② (ID[n] = STD ID filter [n]) or (STD ID Mask[n] = 0) for each bit n from 0 to 10.
③ (RTR = RTR Filter) or (RTR MASK = 0).
Ⅱ. 基于 ID Fliter 范围:
① CAN message is base frame format (IDE = 0).
② ID ≥ STD ID Filter1.
③ ID ≤ STD ID Filter2.
④ (RTR = RTR filter) or (RTR MASK = 0).
Ⅲ. 基于两个固定的 ID Fliter 没有掩码:
① CAN message is base frame format (IDE = 0).
② (ID[n] = STD ID Filter1[n]) or (ID[n] = STD ID Filter2[n]) for each bit n from 0 to 10.
③ (RTR = RTR Filter1) or (RTR = RTR Filter2).
Ⅳ. Extended ID 类型模式和 Standard ID 类型模式使用上用法相同,只是结构上不同:
四、参考资料
《S32K3xx Reference Manual》
Sign in to NXP.com | NXP Semiconductors
《小猫爪:S32K3学习笔记02-S32K3之FlexCAN》