目录
前言
FlexCAN介绍
特点
- 灵活的邮箱,可配置为存储0到8、16、32或64字节的数据长度。
- 接收或发送结构未使用的RAM可以用作通用RAM空间。
- 用于CAN FD的增强型FIFO,存储容量最多可容纳20个CAN FD帧和自动内部具有DMA支持的指针处理。
- 可编程传输优先级方案:ID最低,缓冲区数最低,优先级最高。
- CAN0中最大96 mbs,CAN1、2中最大64 mbs。(S32K3x4)。
方框图
时钟


工作模式
英文 | 中文 | 说明 |
Normal mode(user or supervisor)
| 正常模式 | 一般用或者 |
Freeze mode | 冻结模式 | 冻结模式才可以修改参数 |
Loop back mode | 回环模式 | 自检 |
Listen only mode | 仅听模式 | |
CAN FD active mode | CANFD激活模式 | 激活FD |
Low-power operation | 低功耗操作模式 | |
Module disable mode | 模块禁用模式 | 在模块禁用模式下,该模块会向CAN协议引擎和控制器主机接口子模块发出禁用时钟的请求。 |
FLEXCAN内存分区
CANFD
- FlexCAN FD内存以块的形式划分
--一共有 96(3个块,每个块32)x8字节的有效负载缓冲区
--SoC可以实例化0-2个块
- 每个块由相当于32个16字节MB( 为何是16?因为8bit邮箱信息+8bit数据)(即512字节,0x200)的内存空间组成
- 每个块都可以配置为具有定义大小的消息缓冲区(MB),以存储有效负载为8字节、16字节、32字节或64字节的消息。消息缓冲区数据大小区域位字段:FDCTRL[MBDSRn] = 0bxx
- 一个块中的消息缓冲区的数量取决于有效负载的大小。每个块可以(通过软件)配置如下:
每个块有以下的MB个数(一共有3个块 0 1 2,所有总MB个数*3)
32个MBs 8字节载荷
21个MBs 16字节负载
12个MBs 32字节负载
7个MBs 64字节负载
MB结构
下图是具有64字节有效负载的消息缓冲区结构示例
前8字节(0x00-0x08)用于存储一些邮箱信息(FD帧之类的):表示了CAN规范(2.0版本B部分)中使用的扩展(29位标识符)和标准(11位标识符)帧。紧接着是64字节的数据。所以一个MB能存储具有一个ID的特定消息,以及时间戳、数据长度等等信息。且还具有以下特点:
- 每个MB都可配置为Rx或Tx;
- 基于ID优先级或本地优先级的Tx;
- 每个Rx MB都具有单独的ID和掩码;
下图是64字节负载消息消息缓冲区(MB)的存储地址偏移值,可以看出一个块有21个64字节Mb
一个块512b,当一个块被分为21个MBs 16字节负载(或者其他),21*16=336,可以发现512b并没有用完,但是,官方说明:
关于8bit的邮箱信息描述如下:
FlexCAN基本:传输、仲裁、移动、匹配和接收
1.CAN2.0A:也称为标准CAN(Classical CAN),是最常见的CAN总线通信协议。它使用11位标识符(D)字段,并支持最高传输速率为1Mbps。
2.CAN2.0B:与CAN2.0A类以,但采用29位标识符(ID)字段,提供了更多的D编码空间。支持最高传输速率为1MbpS。
A B区别:
数据帧标识符:CAN2.0A的标识符长度为11位,而CAN2.0B的标识符长度为29位。因此,CAN2.0B可以支持更多的节点和更大的网络拓扑结构。
错误检测机制:CAN2.0A使用CRC(循环冗余校验)来检测错误,而CAN2.0B使用了更加复杂的错误检测和纠正机制,包括CRC、ACK(确认应答)和重传机制等,从而提高了数据传输的可靠性和稳定性。
3.CAN FD (Flexible Data Rate):CAN FD是一种升级版的CAN总线协议,它提供了更高的数据传输速率和更大的数据包容量。CAN FD支持传输速率高达8MbpS,并可实现更大的数据包大小。
CAN最大传输速率1Mbps,CAN-FD速率可变,仲裁比特率最高1Mbps(与CAN相同),数据比特率最高8Mbps。BRS位速率切换为,BRS位为0时CANFD速率保持恒定速率、BRS位为1时CANFD的数据段会被切换到高速率。
摘自官方培训PPT:
传统CAN
普通(经典)CAN
普通CANFD
增强型CAN CANFD
• When set CTRL2[BTE], CAN FD nominal bit timing is configured in ENCBT, data bit timing in EDCBT. FDCBT will be read as 0.
CT组件
↓
CT组件 FlexCAN
1、Name
2、Config Time Support
3、FlexCAN configurations
- FlexCAN Hardware Channel
- Name:配置结构体的变量名
使用CT配置工具,每个外设都会生成一个结构体,这个结构体用于初始化函数。如下:
将FlexCAN_Config0传入FlexCAN初始化函数中即可完相关外设的初始化FlexCAN_Ip_Init(INST_FLEXCAN_0, &FlexCAN_State0, &FlexCAN_Config0); - Number Of MB:(消息缓冲区)数量
- FlexCAN Rx FFO filters number
- Enable Legacy RxFiFO
- Enable FD Can:使能CAN FD
- FlexCAN operation modes:CAN工作模式
- Payload Size (bytes):有效负载数 ,传输的数据长度 普通CAN只有8字节,FD才有12字节以上
- Rx FIFO Transfer Type
- DMA ChannelUsed
- Enable EnhancedCBT Can:使能增强型Can
- Enable BitRate Switch:使能速率切换,CANFD才有
- Can FD ISO
- Auto Bus Off
- Remote Request Store
- TimeStamp Free Runing Timer SourceTimeStamp Timer SourceTimeStamp HR Capture Config
- FlexCAN Protocol Clock:Clock CAN的时钟频率,要和CT——时钟中配置的一样,不一样按照时钟那里的配置。(这里是个坑,原以为这两地方应该会统一的,结果不是。感觉CT—外设模块里面的最多也就是给参数,算一下波特率,采样点给用户看,不知道后续的版本会不会统一)
FlexCAN bitrate
位速率配置。普通CAN只需要配置这(第一)个
- Name
- Synchronization segment
- Propagation segment
- Phase segment 1
- Phase segment 2
- Prescaler division factor
- Resync jump width
- Bitrate (Kbps)
- Sampling point (%)
需要注意的是,CAN 位速率的每一个(时间段)选项的配置范围,根据使用情况而定。
FlexCAN CBT bitrate
同上,不过只有CANFD才有。
启用CAN FD后,用于配置CAN FD 的数据域,FlexCAN bitrate 则用于配置仲裁域,且速率不一样需要勾选Enable BitRate Switch。
回调函数以及FIFO配置
- CallBack
- Error CallBack
- The number of enhanced ID filter elements
- The number of enhanced extended IDfilter elements
- The number of enhanced Rx FIFOwatermarks/The number of MessageBuffers Transferred by DMA
- Enable/Disable the Enhanced Rx FIFOfeature
FlexCAN General
Timeout Configuration
开发注记:
关于邮箱和FIFO
1.两者共用一个RAM空间 注意不能重?
2.配置时:
好像每一个MB需要配置一次接收 FlexCAN_Ip_Receive
在中断里面也是,每次接收到can报文,要重新调用FlexCAN_Ip_Receive 再配置一次MB
至于原理,具体看源码:FlexCAN_Ip_Receive 源码里面对接收的数据存在哪里进行配置,将接收到的CAN帧存在你指定的数据缓存区。此外还开启了接收的相关配置。
文章:
小猫爪:S32K3学习笔记02-S32K3之FlexCAN_legacy rx fifo_小猫爪的博客-CSDN博客
NXP S32K3系列学习笔记——FlexCAN驱动开发_s32k3 can-CSDN博客
CANfd 一次采样点和二次采样点_canfd采样点计算-CSDN博客
【图解CAN总线】-10-详解CANFD的TDC以及SSP(收发器延迟补偿和第二采样点)_canfd tdc-CSDN博客
Vector