文章目录
概述
本文总结归纳NXP S32K1系列的FlexCAN模块,概括其特征,讲解其MBs(message buffers)及其他处理、配置过程,以便更高效的开发CAN、CAN FD相关应用。
FlexCAN是NXP实现了ISO 11898-1 standard and CAN 2.0 B 协议的CAN控制器模块IP,不仅存在于S32K1系列MCU上,也存在于S32K3等MCU上,不同型号含有不同数量的FlexCAN实例数,其MailBox数量也不同。S32K1一般含有1-3个FlexCAN,不全支持CAN FD(up to 8 Mb/s),一般含有16,32或54个消息邮箱。
FlexCAN模块框图
协议引擎Protocol Engine (PE)
PE用于管理CAN总线上的串行通讯: 请求RAM访问用于接收、发送消息帧;验证接收的消息; 运行错误处理; 探测CAN FD帧。
控制器主机接口Controller Host Interface (CHI)
CHI用于管理接收、发送的消息缓存( message buffer),负责仲裁和ID匹配。
总线接口单元Bus Interface Unit (BIU)
BIU用于控制访问内部总线,建立与CPU和其他模块的联系。包括时钟、寻址、数据总线、中断、DMA的访问都是通过BIU.
操作模式
- Normal mode
- Freeze mode
配置其他寄存器时常需要进入此模式,此时,没有发送、接收,总线同步丢失。 - Loop-Back mode
用于自发自收。RX pin输入被忽略,TX pin隐性。 - Listen-Only mode
发送失能,错误计数器冻结,模块处于CAN Error Passive mode。 - CAN FD Active mode
FD没有RX FIFO、Rx FIFO DMA和Pretended network support。 - Stop mode
模块自生处于 inactive state,时钟可断掉。 - Pretended Network mode
CHI 时钟断掉,PE时钟保持,Rx接收处理依旧可以过滤将到来的消息。
MBs结构
寄存器占128Bytes, 地址偏移从0x80 to 0x27F 分配给32个128位(4字)的MBs消息邮箱。
上图是含有64个载荷数据时的MS结构。头部固定8Bytes,根据CAN消息的载荷 8, 16, 32, or 64,每个消息邮箱被分配组织为 16, 24, 40, or 72 bytes。
地址偏移从0x80 to 0x27F 分配给32个128位(4字)的MBs消息邮箱–>对于8bytes载荷的CAN帧,正好有32个MBs,载荷增多,MBs个数也就减少了。
载荷 | MBs个数 |
---|---|
8 | 32 |
16 | 21 |
32 | 12 |
64 | 7 |
Rx FIFO结构
当FIFO使能时