依照瑞萨公司的《CAN入门书》的组织思路来学习CAN通信的相关知识,并结合网上相关资料以及学习过程中的领悟整理成笔记。好记性不如烂笔头,加油!
1 CAN 协议中的帧
在了解CAN总线的通信机制之前,首先需要了解CAN协议中五种类型的帧结构:
- 数据帧
- 遥控帧
- 错误帧
- 过载帧
- 帧间隔
在讲述五种帧结构的过程中,穿插讲述CAN总线的通信机制。
2 数据帧与遥控帧
在CAN协议中,数据帧和遥控帧有着诸多相同之处,所以,在这里,我们将数据帧和遥控帧放在一起来讲。
顾名思义,所谓数据帧,就是包含了我们要传输的数据的帧,其作用当然也就是承载发送节点要传递给接收节点的数据。
而遥控帧的作用可以描述为:请求其它节点发出与本遥控帧具有相同ID号的数据帧。
比如:在某一个时刻,节点Node_A向总线发送了一个ID号为ID_2的遥控帧,那么就意味着Node_A请求总线上的其他节点发送ID号为ID_2的数据帧。
节点Node_B能够发出ID号为ID_2的数据帧,那么Node_B就会在收到Node_A发出的遥控帧之后,立刻向总线上发送ID号为ID_2的数据帧。
数据帧 的帧结构如下图所示,包含七个段:帧起始、仲裁段、控制段、数据段、CRC段、ACK段、帧结束。
遥控帧 相比于数据帧,从帧结构上来看,只是少了数据段,包含六个段:帧起始、仲裁段、控制段、CRC段、ACK段、帧结束。
数据帧和遥控帧都分为标准帧(CAN2.0A)和扩展帧(CAN2.0B)两种结构。
遥控帧相比于数据帧除了缺少数据段之外,遥控帧的RTR位恒为隐性1,数据帧的RTR位恒为显性0。
2.1 帧起始
帧的最开始的一位是帧起始,也叫SOF(Start Of Frame),SOF恒为显性位,即逻辑 0 。
帧起始表示CAN_H 和 CAN_L上有了电位差,也就是说,一旦总线上有了SOF就表示总线上开始有报文了。
2.2 仲裁段
仲裁段是用来判定一帧报文优先级的依据,仲裁段中的ID号也是实现报文过滤机制的基础。仲