嵌入式ARM芯片CAN 2.0&CAN FD总线控制器综合2

213 阅读3分钟

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数据

image.png

2 消息RAM

  • 必须配置每条消息的字节数,以确定每条消息所需的内存大小。 CAN-FD 上有效负载的增加可以更有效的将内存都利用起来,并允许更多消息要存储在分配的存储空间中。总的专用 RAM 大小是2560 个32bit 数据image.png image.png image.png
  • CAN-FD 扩展帧允许单个消息中发送64有效数据
  • CAN 2.0 有效数据 最多可以发送 8 个字节。
  • CAN-FD -> 64Byte有效数据+8Byte(2 words Header信息) = 72Byte
  • CAN 2.0 -> 8Byte有效数据+8Byte(2 words Header信息) = 16Byte image.png

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个元素 image.png image.png

3.1.1 专门发送缓存区

  • 发送分两步,一步是装数据,第二步请求发送。 image.png

3.1.2 发送FIFO

image.png

3.1.3 发送队列

  • 发送队列中存储的消息是先从消息 ID 最小(优先级最高)的消息开始发送的。如果多个队列缓冲区配置为使用同一消ID,则会先发送缓冲区编号最小的队列缓冲区。

3.1.4 TX缓冲区 VS 专门发送缓存区 VS 发送FIFO

image.png

3.2 发送缓冲区部分会被划分为一组专用发送缓冲区和一个发送 FIFO

image.png

3.3 发送缓冲区会被划分为一组专用发送缓冲区和一个发送队列

image.png

4 CAN 接收 FIFO

  • 消息 RAM 中有两个接收 FIFO。 image.png image.png image.png image.png

5 CAN 的波特率及位同步

  • 由于 CAN 属于异步通讯,没有时钟信号线,连接在同一个总线网络中的各个节点会像串口异步 通讯那样,节点间使用约定好的波特率进行通讯,特别地,CAN 还会使用“位同步”的方式来抗 干扰、吸收误差,实现对总线电平信号进行正确的采样,确保通讯正常。 image.png image.png image.png image.png image.png

6 案例实战

6.1 专门发送缓存区实战

  • 初始化 image.png
  • 专门发送缓存区 image.png image.png
  • 时序 image.png image.png
  • 发送代码 image.png image.png image.png image.png
  • 接收代码 image.png

6.2 发送FIFO实战

  • can1初始化 image.png image.png image.png
  • can2初始化 image.png
  • 发送代码 image.png image.png
  • 接收代码 image.png image.png image.png

7 CANOPEN

image.png