CAN总线学习总结——错误帧和错误状态

judy的头像

一、五种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、总线关闭

错误太多,是我的问题,我停止收发并脱离总线;

总线上数据的收发都被禁止;

来源:https://www.cnblogs.com/tianqiang/p/8422226.html