CAN协议学习(三)

1. 错误类型

CAN协议定义了五种错误类型,包括位错误、ACK错误、填充错误、CRC错误和格式错误。

(1)位错误:当CAN节点发送的电平与监视的总线电平不一致时,产生位错误。在仲裁段、ACK槽和发送被动错误时,不产生位错误。

(2)ACK错误:在ACK槽时间内,发送CAN节点没有检测到显性位,即没有一个节点成功接收该帧报文,产生ACK错误。

(3)填充错误:在位填充原则作用的区域内(数据帧和远程帧的起始段~CRC段)检测到连续6个相同的状态位,产生填充错误。

(4)CRC错误:接收节点计算的CRC与发送节点发送的CRC不一致时,产生CRC错误。

(5)格式错误:在协议规定的具有特定值的区域内,检测到非法值,产生格式错误。协议规定了特定值的区域包括,数据帧和远程帧的CRC界定符、ACK界定符、错误帧界定符、过载帧界定符。

位错误、ACK错误、填充错误和格式错误在检测到错误的位的下一位开始发送错误帧;CRC错误在紧随的ACK界定符的后一位开始发送错误帧。

2. 错误状态

 为防止节点由于某些原因一直发送错误帧,干扰其它节点的正常通信,CAN协议为定义了三种状态,主动错误状态、被动错误状态和总线关闭状态,三种状态依靠接收错误计数器和发送错误计数器进行状态转换。

                  CAN协议学习(三)

计数器的增减依据的原则如下:

CAN协议学习(三) 

3. 错误帧

错误帧包括错误标志和错误界定符,总线上的错误帧是各个节点发送错误帧的叠加状态,因此在错误标志后有0~6个bit的重叠区域。节点发送完6bit的错误标志后,发送第一个错误界定符,等待检测到总线电平为隐性后,再发送剩余的7个错误界定符。

错误标志重叠部分 错误界定符
错误标志(6bit) (0~6bit) 8(bit)

处于主动错误状态的节点,错误标志为6个显性位。处于被动错误的节点,错误标志为6个隐性位。错误界定符为8个隐性位。

4.过载帧

 当接收节点未做好接收下一帧数据的准备时,将发送过载帧。过载帧由过载标志符和过载界定符组成,由于可能存在多个节点同时过载,且过载帧发送存在时间差,故存在过载标志超过6bit的情况。

过载标志重叠部分 过载界定符
过载标志(6bit) (0~6bit) 8(bit)

过载标志为6个显性位,过载定界符位8个隐性位。

5. 帧间隔

帧间隔出现在数据帧和远程帧前面,用于将本帧与紧邻的前面的一帧(数据帧、远程帧、错误帧、过载帧)区分开。主动错误状态和被动错误状态下的帧间隔有所差异:

主动错误状态帧间隔
间隔段(3bit) 空闲段(0~∞bit)
被动错误状态帧间隔
间隔段(3bit) 暂停段(8bit) 空闲段(0~∞bit)

帧间隔所有段都为隐性位。在间隔段,发送节点不允许发送数据帧或远程帧,在这期间监听到显性位,接收节点就会发送过载帧。

处于主动错误状态的节点发送3个bit的间隔段后,总线控制权仍在该节点,节点可继续发送数据;由于处于被动错误状态的节点的可靠性低,为不影响其它处于主动状态的节点使用总线,在间隔段后增加8bit的暂停段,即连续输出11个隐性位,释放总线控制权,使总线进入空闲状态,其它节点可重新竞争总线控制权。