一.CAN总线当中帧的种类
CAN总线当中通信是通过以下 5 种类型的帧进行的。
• 数据帧
• 遥控帧
• 错误帧
• 过载帧
• 帧间隔
数据帧和遥控帧有标准格式和扩展格式两种格式。标准格式有11个位的标识符,扩展格式有29个位的ID。
二.五种类型帧用途说明
帧类型 帧用途 数据帧 用于发送单元向接收单元传送数据的帧 遥控帧 用于接收单元向具有相同ID的发送单元请求数据的帧 错误帧 用于当检测出错误时向其它单元通知错误的帧 过载帧 用于接收单元通知其尚未做好接收准备的帧 帧间隔 用于将数据帧及遥控帧与前面的帧分离开来的
三.数据帧的组成
数据帧是五种类型帧当中最为常用的帧。它结构上由7段组成:帧起始+仲裁段+控制段+数据段+CRC段+ACK段+帧结束
No 名称 介绍 01 帧起始 表示帧的开始,由一个的显性电平组成 02 仲裁段 表示帧的优先级, 由标识符(ID)和传送帧类型(RTR)组成 03 控制段 表示数据的字节数,由6个bit构成 04 数据段 可发送0~8 个字节的数据 05 CRC段 用于校验传输是否正确 06 ACK段 表示确认是否正常接收 07 帧结束 由7个连续的隐形位组成
1)帧起始
表示数据帧开始的段
无论是标准数据帧还是扩展数据帧都包含这两个段。帧起始标志着数据帧和远程帧的起始,由一个单独的显性位(逻辑0)组成。总线空闲时,发送节点发送帧起始,其他接收节点同步于该帧起始位。(总线空闲时为隐性位,故帧起始以显性位非常好识别)
2)仲裁段
表示该帧优先级的段, 标准格式和扩展格式在此的构成有所不同。
标准格式的ID有11个位。从ID28到ID18被依次发送。禁止高7位都为隐性。(禁止设定:ID=1111111XXXX)
扩展格式的ID有29个位。基本ID从ID28到ID18,扩展ID由ID17到ID0表示。基本ID和标准格式的ID相同。禁止高7位都为隐性。(禁止设定:基本ID=1111111XXXX)
3)控制段
控制段共6位。
标准帧的控制段由扩展帧标志位IDE、保留位r0和数据长度代码DLC组成;
扩展帧控制段则由r1、r0和DLC组成。
IDE:标准帧中该位位于控制段,为显性0。扩展帧中属于仲裁段,为隐性1。
保留位(r0、r1) 保留位必须全部以显性电平发送。但接收方可以接收显性、隐性及其任意组合的电平
4)数据段
标准、扩展格式相同) 数据段可包含 0~8 个字节的数据。从 MSB(最高位)开始输出
5)CRC段
为了保证报文的正确传输,CAN的报文包含了一段15位的CRC校验码,一旦接收节点算出的CRC码跟接收到的CRC码不同,则它会向发送节点反馈出错信息,利用错误帧请求它重新发送。CRC部分的计算一般由CAN控制器硬件完成.
CRC界定符恒为隐性1。
6)ACK段
用来确认是否正常接收。由ACK槽(ACK Slot)和ACK界定符2个位构成。
应答槽:
发送节点:发送隐性电平1
接受成功的节点:发送显性电平0
总线电平与与节点的发送结果对比:显性发送成功,隐性发送失败。
应答标识:一个隐性电平1
7)帧结束
表示该帧的结束的段,由7个连续的隐形位(1111111)组成
四.遥控帧的组成
帧起始+仲裁段+控制段+ CRC段+ACK段+帧结束。和数据帧相对比,远程帧是没有数据段的。
比较内容 数据帧 远程帧 ID 发送节点的ID 被请求发送节点的ID SRR 显性电平 隐性电平 RTR 显性电平 隐性电平 DLC 发送的数据长度 接收的数据长度 是否有数据段 有 没有 CRC校验范围 起始帧+仲裁段+控制段+数据段 起始帧+仲裁段+控制段
RTR 远程发送请求位
SRR 代替远程请求位
DLC 数据长度位
CRC 校验位
五.错误帧的组成
用于在接收和发送消息时检测出错误通知错误的帧,错误帧由错误标志和错误界定符构成,其中错误界定符由 8 个位的隐性位构成。
1)主动错误状态
可以正常参加总线通信的状态,处于主动错误状态的单元检测出错误时,输出主动错误标志。
2)被动错误状态
是易引起错误的状态。处于被动错误状态的单元虽能参加总线通信,但为不妨碍其他单元通信,接收时不能积极地发送错误通知;处于被动错误状态的单元即使检测出错误,而其它处于主动错误状态的单元如果没发现错误,整个总线也被认为是没有错误的。处于被动错误状态的单元检测出错误时,输出被动错误标志。另外,处于被动错误状态的单元在不能马上再次开始发送。在开始下次发送前,在间隔帧期间内必须插入“延迟传送”(8个位的隐性位)。
3)总线关闭态
总线关闭态是不能参加总线上通信的状态。信息的接收和发送均被禁止。这些状态依靠发送错误计数和接收错误计数来管理,根据计数值决定进入何种状态。
处于总线关闭态的单元,检测到128次连续11个位的隐性位的时候,发送错误计时器和接收错误计时器都将置为0。
单元错误状态 发送错误计数值(TEC) 接收错误计数值(REC) 主动错误状态 0~127 且 0~127 被动错误状态 128~255 或 128~255 总线关闭态 256~ 256~
4)CAN-Bus错误类型
1.CRC错误
发送节点计算得到的CRC值与接收到的CRC值不同时发送该错误
2.格式错误
传输的数据帧格式与任何一种合法的帧格式不符合时发生该错误
3.应答错误
发送节点在ACK阶段没有接收到应答信号时发生该错误
4.位发送错误
发送节点在发送时发现总线电平与发送电平不相同时发生该错误
5.位填充错误
通信线缆上传输信号违反位填充规则时发生该错误
六.过载帧的组成
当某个接收节点没有做好接收下一帧数据的准备时,将发送过载帧以通知发送节点;
1)过载帧的构成
过载帧由过载标志(6个位的显性位)和过载界定符(8个位的隐性位)构成。
过载界定符的构成与错误界定符的构成相同,过载标志的构成与主动错误标志的构成也相同。
2)过载帧原理
对于过载帧的帧结构我们可以这样理解:接收节点达到接收极限时,就会发出过载帧到总线上,显然,过载标志的6个连续显性位会屏蔽掉总线上其它节点的发送,也就是说这个时候的接收节点通过发送过载帧的方式来破坏其它节点的发送,这样在接收节点发送过载帧期间,
其它节点就不能成功发送报文,于是就相当于把其它节点的发送推迟了,也就是说接收节点在其发送过载帧的这段时间得以“休息”。
3)有3种情况会引起过载帧
1.接收节点自身原因。接收节点由于某种原因需要延迟接收下一个数据帧或者遥控帧。
2.在帧间隔的间歇段的第一位和第二位检测到一个显性位(正常的间歇段都是隐性位)。帧间隔的间隔段本应是三个连续的隐性位,如果接收节点在间隔段检测到显性位,那么就意味着此时有报文发向接收节点,但这个时候是不应该有报文发来的,于是接收节点发送过载帧。
3.CAN节点在错误界定符或过载界定符的第八位(最后一位)听到一个显性位0,节点会发送一个过载帧,且错误计数器不会增加。接收节点在错误界定符和过载界定符的最后一位听到显性位,也意味着有报文发向接收节点,但这个时候是不应该有报文发来的,于是接收节点发送过载帧。
七.间隔帧的组成
帧间隔是用于分隔数据帧和遥控帧的帧。数据帧和遥控帧可通过插入帧间隔将本帧与前面的任何帧(数据帧、遥控帧、错误帧、过载帧)分开。
过载帧和错误帧前不能插入帧间隔。
来自汽车以太网技术研究实验室公众号