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

  • Post author:
  • Post category:其他





一、五种

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、





总线关闭






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





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





版权声明:本文为qq_22433397原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。