1 FDCAN
- STM32H7 的 CAN FD 符合 ISO 11898-12015 标准,
符合 CAN 协议 2.0 版 A,B - 可访问的 10 KB RAM 内存,最多可分配
2560个字。 接收区(Rx FIFO 0,Rx FIFO 1 和 Rx Buffer):可配置的接收 FIFO,多达 64 个专用接收缓冲区,每个缓冲区都对应1个元素发送区(Tx event FIFO,Tx Buffers):多达 32 个专用发送缓冲区, 多达 32 个TX事件FIFO, 一共有64个元素,对应64个报文, 每个缓冲区都对应1个元素- FDCAN外设可以配置
三种传输机制:Tx buffer ,Tx queue 和 Tx FIFO, 并可以通过Rx buffer 和 Rx FIFO接收。 - 过滤区(11bit 过滤和 29bit 过滤)
- FDCAN一个报文,对应一个元素,一个元素包含64Byte有效数据+8Byte(2 words Header信息) = 72Byte,
这就是FDCAN的优势,一次报文最大能够传输72Byte数据
2 消息RAM
- 必须配置每条消息的字节数,以确定每条消息所需的内存大小。 CAN-FD 上有效负载的增加可以更有效的将内存都利用起来,并允许更多消息要存储在分配的存储空间中。总的专用 RAM 大小是2560 个32bit 数据。
- CAN-FD 扩展帧允许单个消息中发送
64个有效数据 - CAN 2.0
有效数据最多可以发送8个字节。 - CAN-FD -> 64Byte有效数据+8Byte(2 words Header信息) = 72Byte
- CAN 2.0 -> 8Byte有效数据+8Byte(2 words Header信息) = 16Byte
3 CAN 发送区
- 在CAN专属的消息RAM中,存在32个TX缓冲区,32个TX事件FIFO。每个缓冲区都对应1个元素,
TX缓冲区+TX事件FIFO一共有64个元素,对应64个报文。官方定义这样一个报文整体叫element,总结起来,element等于一系列的标志位+数据段 - 专用发送缓冲区可完全CPU的控制下发送消息。每个专用发送缓冲区都配置了特定的消息 ID。如果多个发送缓冲区配置为使用同一消息 ID,则会先发送缓冲区编号最小的发送缓存区中的消息。
3.1 TX缓存区又可以分为3钟类型,专门发送缓存区、发送FIFO、发送队列。
- 在CAN专属的消息RAM中,**存在32个TX缓冲区, 每个缓冲区都对应1个元素
3.1.1 专门发送缓存区
- 发送分两步,一步是装数据,第二步请求发送。
3.1.2 发送FIFO
3.1.3 发送队列
- 发送队列中存储的消息是先从消息 ID 最小(优先级最高)的消息开始发送的。如果多个队列缓冲区配置为使用同一消ID,则会先发送缓冲区编号最小的队列缓冲区。
3.1.4 TX缓冲区 VS 专门发送缓存区 VS 发送FIFO
3.2 发送缓冲区部分会被划分为一组专用发送缓冲区和一个发送 FIFO
3.3 发送缓冲区会被划分为一组专用发送缓冲区和一个发送队列
4 CAN 接收 FIFO
- 消息 RAM 中有两个接收 FIFO。
5 CAN 的波特率及位同步
- 由于 CAN 属于异步通讯,没有时钟信号线,连接在同一个总线网络中的各个节点会像串口异步
通讯那样,节点间使用约定好的波特率进行通讯,特别地,CAN 还会使用“位同步”的方式来抗
干扰、吸收误差,实现对总线电平信号进行正确的采样,确保通讯正常。
6 案例实战
6.1 专门发送缓存区实战
- 初始化
- 专门发送缓存区
- 时序
- 发送代码
- 接收代码
6.2 发送FIFO实战
- can1初始化
- can2初始化
- 发送代码
- 接收代码