CAN 总线报文浅析

  • CAN 的报文格式

    在总线中传送的报文,每帧由 7 部分组成。CAN 协议支持两种报文格式,其唯一的不同是标识符(ID)长度不同,标准格式为 11 位,扩展格式为 29 位。

    在标准格式中,报文的起始位称为帧起始(SOF),然后是由 11 位标识符和远程发送请求位 (RTR) 组成的仲裁场。RTR 位标明是数据帧还是请求帧,在请求帧中没有数据字节。

    控制场包括标识符扩展位(IDE),指出是标准格式还是扩展格式。它还包括一个保留位 (ro),为将来扩展使用。它的最后四个位用来指明数据场中数据的长度(DLC)。数据场范围为 0~8 个字节,其后有一个检测数据错误的循环冗余检查 (CRC)。

    应答场(ACK)包括应答位和应答分隔符。发送站发送的这两位均为隐性电平(逻辑 1),这时正确接收报文的接收站发送主控电平(逻辑 0)覆盖它。用这种方法,发送站可以保证网络中至少有一个站能正确接收到报文。

    报文的尾部由帧结束标出。在相邻的两条报文间有一很短的间隔位,如果这时没有站进行总线存取,总线将处于空闲状态。

    如图 11 所示,具体某一位或某几位下面会详细介绍。

    图 11 CAN 总线报文结构


  • 数据帧

    数据帧是使用最多的帧,结构上由 7 段组成,其中根据仲裁段 ID 码长度的不同,分为标准帧(CAN2.0A)和扩展帧(CAN2.0B)。

    数据帧是由:帧起始,仲裁断,控制端,数据段,CRC 段,ACK 段和帧结束构成。

    如图 21 所示(具体的帧结构下面会详细介绍)。

    图 2–1 数据帧类型及结构


  • 帧起始和帧结束

    帧起始:由单个显性位组成,总线空闲时,发送节点发送帧起始,其他接收节点同步于该帧起始位。

    帧结束:由 7 个连续的隐形位组成。

    (注:显性电平和隐性电平是相对于 CAN_H 和 CAN_L 而言的差分信号电平,并非 TTL 电平上的高低电平,需要注意)如图 2-2 所示。

     

    图 2–2 帧起始和帧结束


  • 仲裁段

    CAN-bus 是如何解决多个节点同时发送数据,即总线竞争的问题?该问题由仲裁段给出答案。

    CAN-bus 并没有规定节点的优先级,但通过仲裁段帧 ID 规定了数据帧的优先级。根据 CAN2.0 标准版本不同,帧 ID 分为 11 位和 29 位两种。如图 23 所示

     

    图 2–3 数据帧结构

    如图 24 所示 CAN 控制器在发送数据的同时监测数据线的电平是否与发送数据对应电平相同,如果不同,则停止发送并做其他处理。

    图 2–4 仲裁处理

    假设节点 A、B 和 C 都发送相同格式相同类型的帧,如标准格式数据帧,它们竞争总线的过程是(如图 16 所示):

    图 2–5 仲裁机制

    从该分析过程得出结论是:帧 ID 值越小,优先级越高;

    对于同为扩展格式数据帧、标准格式远程帧和扩展格式远程帧的情况同理


  • 控制段

    控制段共 6 位,标准帧的控制段由扩展帧标志位 IDE、保留位 r0 和数据长度代码 DLC 组成;扩展帧控制段则由 IDE、r1、r0 和 DLC 组成如图 17 所示。

    图 2–6 数据帧结构


  • 数据段

    一个数据帧传输的数据量为 0~8 个字节,这种短帧结构使得 CAN-bus 实时性很高,非常适合汽车和工控应用场合如图 27 所示。

    图 2–7 数据段

    数据量小,发送和接收时间短,实时性高,被干扰的概率小,抗干扰能力强。


  • CRC 段

    CAN-bus 使用 CRC 校验进行数据检错,CRC 校验值存放于 CRC 段。 CRC 校验段由 15 位 CRC 值和 1 位 CRC 界定符构成如图 28 所示。

    图 2–8CRC 段


  • ACK 段

    当一个接收节点接收的帧起始到 CRC 段之间的内容没发生错误时,它将在 ACK 段发送一个显性电平如图 29 所示。

    图 2–9 ACK 段


  • 远程帧

    与数据帧相比,远程帧结构上无数据段,由 6 个段组成,同理分为标准格式和扩展格式,且 RTR 位为 1(隐性电平)如图 31 所示。

    图 3–1 远程帧结构

    如下图所示由于数据帧的 RTR 位为显性电平,远程帧的 RTR 位为隐性电平。

    所以帧格式和帧 ID 都相同情况下,数据帧的优先级比远程帧优先级高如图 32 所示:

    图 3–2 数据帧于远程帧仲裁机制

     

    图 3–3 数据帧远程帧比较

    数据帧与远程帧的区别如图 33 所示。

     


  • 错误帧

    尽管 CAN-bus 是可靠性很高的总线,但依然可能出现错误;CAN-bus 的错误类型共有 5 种(如图 41 所示)。

    图 4–1 错误帧类型

    当出现 5 种错误类型之一时,发送或接收节点将发送错误帧。错误帧的结构如下,其中错误标识分为主动错误标识和被动错误标识如图 42 所示。

    图 4–2 错误帧电平结构

    为防止自身由于某些原因导致无法正常接收的节点一直发送错误帧,干扰其他节点通信,CAN-bus 规定了节点的 3 种状态及其行为如图 43 所示。

    图 4–3 错误处理机制

    (注:这些错误处理的机制是由硬件自主完成的这样做的目的就是只要 CAN 在收到数据肯定是正确的数据)。

     


  • 过载帧与帧间隔


  • 过载帧

    当某个接收节点没有做好接收下一帧数据的准备时,将发送过载帧以通知发送节点;过载帧由过载标志和过载帧界定符组成如所示图 51。

    图 5–1 过载帧结构

    由于存在多个节点同时过载且过载帧发送有时间差问题,可能出现过载标志叠加后超过 6 个位的现象如所示图 52。

    图 5–2 过载帧具体结构


  • 帧间隔

    帧间隔用于将数据帧或远程帧和他们之前的帧分离开,但过载帧和错误帧前面不会插入帧间隔。

    帧间隔过后,如果无节点发送帧,则总线进入空闲。

    帧间隔过后,如果被动错误节点要发送帧,则先发送 8 个隐性电平的传输延迟,再发送帧。


  • CAN 总线发送总流程

    CAN-bus 整个链路层处理数据的流程是如图 61 所示:

    图 6–1CAN 总线发送总流程

     


  • 参考资料

    《项目驱动 –CAN-BUS 现场总线基础教程 —- 周立功,黄晓清》。

    《现场总线技术及其应用第二版–清华大学出版社》。

赞(0)
未经允许不得转载:大象juǎn » CAN 总线报文浅析