错误种类
1、位检测->位错误
位检测范围一直到EOF结束
检测到总线位状态与自身送出的位不同
仲裁或者ACK位期间送出“隐性”位除外
2、填充检测->填充错误
发送节点进行位填充,位填充编码是发送5个连续相同的极性位后,自动插入一个极性相反的的位。
接收节点清除位填充。
检测到违背位填充规则,也就是接收到6个连续相同极性位。
填充检测范围是在CRC鉴定符DEL之前
3、CRC检测->CRC错误节点计算的CRC序列与接收到的CRC序列不同
4、格式检测->格式错误多非法位。
固定格式位场(如CRC界定符、ACK界定符、帧结束等)含有一个或者更
5、ACK检测->ACK错误发送节点在ACK位期间未检测到“显性”位
节点错误分类
发送节点会检测到:位错误、格式错误、ACK错误
接收节点会检测到:填充错误、格式错误、CRC错误
错误界定
节点错误状态的转换。
节点通过REC(接收错误计数器)和TEC(发送错误计数器)值,来实现
当接收错误产生时REC增加,正确接收到数据帧时,REC减少
在发送错误产生时TEC增加,正确发送数据帧,TEC减少
根据REC和TEC的值,主要有三种状态:主动错误、被动错误、Bus Off.
节点状态
![]()
Error Active主动错误
正常的进行总线通信,错误产生时,发送主动错误标志(6个连续显性位)
通俗地说,就是发现了别人的错误,站起来把这帧数据破坏掉。
Error Passive被动错误
能够进行总线通信,错误产生时,发送被动错误标志(6个连续隐性位)
限制(连续2次报文发送)
通俗的说,就是节点发现的错误有点多了,怀疑节点本身就是不可靠的,通知下大家自己有点不行了。
Bus Off
不能收发任何报文。已经不行了,这时候大概率就是节点有问题,脱离总线出来冷静一下,具体处理是重启MCU。