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协议为定义了三种状态,主动错误状态、被动错误状态和总线关闭状态,三种状态依靠接收错误计数器和发送错误计数器进行状态转换。
计数器的增减依据的原则如下:
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个隐性位,释放总线控制权,使总线进入空闲状态,其它节点可重新竞争总线控制权。