应答错误:如果在ACK段发送节点没有接收到接收节点发出的应答(显性位),将发生应答错误(Acknowledgment Error),所以当单个节点发送数据帧时会发生该类错误。
错误帧在总线信号传输中起着信号灯的作用,接收和发送过程中如果检测到通信出错,便会发送错误帧,错误帧由错误标识符以及错误界定符构成。其中错误标识符分为两种:“主动错误”和“被动错误”。
主动错误状态下,只要检查到错误,它立即“主动地”发出错标识。所谓“出错标识“,它本身就是一个“错误的位序列”(连续的6个显性位,不满足CAN协议的“最多5个连续的同性位”要求),目的是“主动地”告诉大家:即使你们没有发现“刚才我已发现”的错误,现在我“以身作则”出错啦!你们该看到这个错误了吧!
如果处于被动状态下,检查到错误,它只能干瞪眼“被动地”等别人(主动报错站点)报错,等待的时候它可不能去动总线,直到识别出由主动报错站点发出 的“错误的位序列”,它才松了一口气:有人正式报错了!然后他就可以去竞争总线,该干啥干啥。
为了避免某个设备因为自身原因(例如硬件损坏)导致无法正常收发数据而不断地破坏数据帧,从而影响其他正常节点通讯,CAN-bus规范中规定每个CAN控制器都有一个发送错误计数器和一个接收计数器。根据计数值不同CAN节点会处于不同的设备状态,状态之间的转换关系见下图: