CAN总线错误类别
错误类型
•错误共有5种: 位错误、填充错误、CRC错误、格式错误、应答错误

位错误: 一般是发送方,有回读机制,当读到发送的与总线上回读的不一致就 有位错误,注意它的范围,这其中(不包仲裁,仲裁的不是位错误)
填充错误:根据位填充规则,五位相同后后一位取反;若是六个一样则错误,过载帧or错误帧
格式错误: CAN有规定某些位必须为0or1;
ACK:发送数据帧与遥控帧有ACK应答区域(详细见第二节帧格式),若未应答则错误;
发生了错误那么,就会发送错误帧,数据就作废了;
错误状态
引入;
我们知道CAN中所有的设备都在监控着总线,若是异常则发送错误帧;
若是某个设备异常,一直发送错误帧,那么总线就无法使用了;
- 主动错误状态的设备正常参与通信并在检测到错误时发出主动错误帧()
- 被动错误状态的设备正常参与通信但检测到错误时只能发出被动错误帧
- 总线关闭状态的设备不能参与通信
- 每个设备内部管理一个TEC和REC,根据TEC和REC的值确定自己的状态
- 总的来说 设备默认处于主动错误状态,当TEC(Transmit Error count) 发送错误计数器>127或者 REC(Recive Error count) 接收错误计数器>127转为被动错误状态;当自己发送一次错误帧 那么TEC+1 正确发送就 TEC-1 ,当自己收到一个错误 REC+1 ,收到正确数据 REC - 1;
当TEC>255后 总线关闭;
当总线空闲很长时间后再回归 主动错误状态; 主动错误状态和被动错误状态可以相互转换具体如图
错误计数器
下表为 发送错误帧后所对应的TEC REC变化
可以看到第9点,REC>127 REC =127 对于设备接收错误不太一样
波形示例
可以观测到 一帧发完有3位帧间隔,这是为过载帧准备的,若是有过载帧 ,则发送;•设备处于主动错误状态,发送标准数据帧,正常传输
•设备处于主动错误状态,发送标准数据帧,检测到ACK错误
ACK槽那位 为 1(隐形电平),没有设备应答,随后就发送6个显性电平的错误帧 ;+ 8位错误界定符
•设备处于被动错误状态,发送标准数据帧,检测到ACK错误
ACK槽那位 为 1(隐形电平),没有设备应答,随后就发送6个隐性电平的错误帧 ;+ 8位错误界定符;被动状态下的设备有8位延迟传送





