CAN总线学习笔记(4)- CAN协议过载帧和帧间隔

时间:2021-07-02 15:08:55

依照瑞萨公司的《CAN入门书》的组织思路来学习CAN通信的相关知识,并结合网上相关资料以及学习过程中的领悟整理成笔记。好记性不如烂笔头,加油!

1 过载帧

过载帧是接收节点向总线上其它节点报告自身接收能力达到极限的帧。
上面这句话可以这样理解:接收节点Node_A接收报文的能力达到极限了,于是Node_A就会发出过载帧来告诉总线上的其它节点(包括发送节点),我接收节点Node_A已经没有能力处理你们发来的报文了。

过载帧包括:过载标志过载界定符两个部分

  • 过载标志:连续6个显性位;
  • 过载界定符:连续8个隐性位。
  • 与错误帧类似,过载帧中有过载帧重叠部分,且形成过载重叠标志的原因与形成错误帧中的错误重叠标志的原因是相同的

CAN总线学习笔记(4)- CAN协议过载帧和帧间隔
对于过载帧的帧结构我们可以这样理解:接收节点Node_A达到接收极限时,就会发出过载帧到总线上,显然,过载标志的6个连续显性位会屏蔽掉总线上其它节点的发送,也就是说这个时候Node_A通过发送过载帧的方式来破坏其它节点的发送,这样在Node_A发送过载帧期间,其它节点就不能成功发送报文,于是就相当于把其它节点的发送推迟了,也就是说Node_A在其发送过载帧的这段时间得以“休息”。

有三种情况会引起过载帧:

  • 接收节点自身原因。接收节点由于某种原因需要延迟接收下一个数据帧或者遥控帧。
  • 在帧间隔的间歇段的第一位和第二位检测到一个显性位(正常的间歇段都是隐性位)
    帧间隔的间隔段本应是三个连续的隐性位,如果接收节点Node_A在间隔段检测到显性位,那么就意味着此时有报文发向接收节点Node_A,但这个时候是不应该有报文发来的,于是Node_A发送过载帧。
  • CAN节点在错误界定符过载界定符的第八位(最后一位)听到一个显性位0,节点会发送一个过载帧,且错误计数器不会增加。
    接收节点Node_A在错误界定符和过载界定符的最后一位听到显性位,也意味着有报文发向Node_A,但这个时候是不应该有报文发来的,于是Node_A发送过载帧。

2 帧间隔

帧间隔是用来隔离数据帧(或者遥控帧)的,也就是说,数据帧(或者遥控帧)通过插入帧间隔可以将本帧与先行帧(数据帧、遥控帧、错误帧、过载帧)分隔开来。

Tips: 过载帧和错误帧的前面不能插入帧间隔。

帧间隔有两种不同的形式:
主动错误状态的帧间隔:
CAN总线学习笔记(4)- CAN协议过载帧和帧间隔
被动错误状态的帧间隔:
CAN总线学习笔记(4)- CAN协议过载帧和帧间隔

间隔段:连续三个隐性位;间隔段期间,所有节点不允许发送数据这或遥控帧,只要在这期间监听到显性位,接收节点就会发送过载帧。
空闲段:连续隐性位,个数不一定,0个或者多个都可以。总线空闲的时间是任意长的,只要总线空闲,节点就可以竞争总线。
暂停段:只有处于被动错误状态的节点在发送帧间隔的时候,才会在帧间隔中插入8个连续隐性位的暂停段。