一、五种CAN总线可能发生的错误
1、CRC错误:
接收节点计算出的CRC校验值,与发送节点计算的结果不一致;
2、格式错误:
传输的数据帧格式,与任何一种帧格式都不符;
3、应答错误:
ACK段,发送节点没有收到接收节点发出的应答(显性位);
单节点的CAN设备发送数据帧时为发生应答错误;
4、位发送错误:
发送过程中,发送节点发送的同时监听总线电平,如果总线电平和发送的不一致;
在仲裁域发现不同不报错,因为就是要仲裁掉优先级低的报文;
发送被动错误标志、主动错误标志期间检测总线电平有6个相同位时;
5、位填充错误:
帧起始到CRC之间,接收节点检测到有6个连续相同的位电平时,也就是违反5位相同位插入1位相反位的“位填充”原则;
因为ACK域和帧结束域电平固定,也无需填充;
二、三种错误状态
主动错误标识——6个显性位、由主动错误节点发出
被动错误标识——6个隐性位、由被动错误标志发出
错误界定符——8个隐性位
1、主动错误 :
因为主动错误标识由6个显性位组成,可以理解为破坏“位填充”原则,一个节点发现通信错误时,它会主动将帧彻底破坏掉,让其他节点知道它接收出错了;
CAN总线的特点是“广播”,也就是总线上一个节点发出,其余所有节点均能正确接收,如果有一个或多个节点由于某种原因出现接收错误,那么这个节点会主动站出来,通过发送不符合“位填充”规则的帧错误帧,来彻底把这一帧破坏掉,以通知其他节点“这一帧我接收错了,不算数,重来”,其他节点也许没有错,但是也会在收到主动错误标识后发出一个主动错误标识;发送节点在发送的同时也会监听总线数据,当发现数据被其他节点“破坏”后,会主动进行数据重发。
由CAN控制器自动完成。
错误不多,不是我导致的,我主动发送错误标识,通知其他节点放弃这一帧,我正常收发;
2、被动错误 :
错误比较多,很可能错误是由我导致的,我通知其他节点有错但是不干扰他们正常收发数据,也不要求重发,同时我不能连续发送了,得再插入8位隐性位的“延迟传送”段;这样是为了让其他正常节点(处于主动错误)优先使用总线;
被动错误的节点很可能存在硬件故障,不能让它拖累整个网络;
3、总线关闭:
错误太多,是我的问题,我停止收发并脱离总线;
总线上数据的收发都被禁止;