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

397 阅读2分钟

1 CAN 原理

image.png image.png image.png image.png image.png image.png

2 CAN 报文的结构。

回看图数据帧的结构 中的数据帧格式,可看到仲裁段除了报文 ID 外,还有 RTR、IDE 和 SRR 位

  • (1) RTR 位 (Remote Transmission Request Bit),译作远程传输请求位,它是用于区分数据帧和遥控帧的,当它为显性电平时表示数据帧,隐性电平时表示遥控帧。
  • (2) IDE 位 (Identifier Extension Bit),译作标识符扩展位,它是用于区分标准格式与扩展格式,当它为显性电平时表示标准格式,隐性电平时表示扩展格式。
  • (3) SRR 位 (Substitute Remote Request Bit),只存在于扩展格式,它用于替代标准格式中的 RTR 位。由于扩展帧中的 SRR 位为隐性位,RTR 在数据帧为显性位,所以在两个 ID 相同的标准格式报文与扩展格式报文中,标准格式的优先级较高。
  • (4) 控制段在控制段中的 r1 和 r0 为保留位,默认设置为显性位。它最主要的是 DLC 段 (Data Length Code) image.png
  • (5) 数据段,数据段为数据帧的核心内容,它是节点要发送的原始信息,由 0~8 个字节组成,MSB 先行。
  • (6) CRC 段,为了保证报文的正确传输,CAN 的报文包含了一段 15 位的 CRC 校验码,一旦接收节点算出的 CRC 码跟接收到的 CRC 码不同,则它会向发送节点反馈出错信息,利用错误帧请求它重新发送。CRC 部分的计算一般由 CAN 控制器硬件完成,出错时的处理则由软件控制最大重发数。在 CRC 校验码之后,有一个 CRC 界定符,它为隐性位,主要作用是把 CRC 校验码与后面的 ACK段间隔起来。
  • (7) ACK 段,ACK 段包括一个 ACK 槽位,和 ACK 界定符位。类似 I2C 总线,在 ACK 槽位中,发送节点发送的是隐性位,而接收节点则在这一位中发送显性位以示应答。在 ACK 槽和帧结束之间由 ACK 界定符间隔开。
  • (8) 帧结束,EOF 段 (End Of Frame),译为帧结束,帧结束段由发送节点发送的 7 个隐性位表示结束

3 STM32 的 CAN 架构剖析

image.png

3.1 CAN 测试模式

  • 为方便调试,STM32 的 CAN 提供了测试模式,配置位时序寄存器 CAN_BTR 的 SILM 及 LBKM寄存器位可以控制使用正常模式、静默模式、回环模式及静默回环模式,见图四种工作模式 image.png

3.2 CAN 波特率设置

image.png image.png

3.3 CAN 发送FIFO

image.png

  • 标识符寄存器 CAN_TIxR image.png

3.4 CAN 接收 FIFO

  • 跟发送邮箱类似,每个接收 FIFO 中包含有标识符寄存器 CAN_RIxR、数据长度控制寄存器CAN_RDTxR 及 2 个数据寄存器 CAN_RDLxR、CAN_RDHxR,它们的功能见表发送邮箱的寄存器。 image.png

3.5 CAN 验收筛选器

image.png image.png image.png image.png image.png

4 CAN FD总线控制器

image.png image.png image.png

5 CAN 2.0&CAN FD总线控制器对比

image.png image.png