CAN2.0B 数据帧详解

时间:2024-03-21 19:48:10

CAN的帧类型分为数据帧、遥控帧、错误帧、过载帧以及帧间空隙,本文将对数据帧的帧结构展开说明:

引言:

  • CAN2.0协议分为A版本和B版本,A版本协议为11位标识符(标准帧),B版本在兼容11位ID标识符的同时,向上扩展到29位ID标识符。
  • 显性电平和隐性电平:

    总线上的电平有显性电平和隐性电平两种,显性电平的逻辑值为“0”,隐性电平为“1”。“显性”具有“优先”的特性,只要有一个单元输出显性电平,总线上即为显性电平,并且,“隐性”具有“包容”的特性,只有所有的单元都输出隐性电平,总线上才为隐性电平。(显性电平比隐性电平更强)


CAN2.0B 数据帧详解

如上图所示,CAN数据帧分为以下7个部分。

  • Start of Frame
  • Arbitration Field
  • Control Field
  • Data Field
  • CRC Field
  • ACK Field
  • End of Frame


1. Start of Frame:

它指示一帧的开始,由1bit的显性位组成,必须在Bus Idle状态发出,网络上所有节点在“下降沿”执行一次同步;


2. Arbitration Field

CAN2.0B 数据帧详解

标准帧和扩展帧的仲裁域是不同的:

  • 标准帧包含11bit的Identifier以及RTR-Bit,Identifier分布于ID28到ID18,禁止高7bit全都为隐性
  • 扩展帧包含29bit的Identifier,SRR-Bit,IDE-Bit以及RTR-Bit。Identifier分布于ID28到ID0,同样禁止高7bit全都为隐性。

  • RTR-Bit:RemoteTransmission Request BIT,远程请求位,显性表示数据帧,隐性表示远程帧。
  • SRR BIT:Substitute Remote Request BIT,替代远程请求位,它在扩展帧中,位于标准帧RTR的位置上,始终处于隐性。因此一旦标准帧与扩展帧发生冲突,将以标准帧的优先级高于扩展帧而结束。
  • IDE BIT:Identifier Extension Bit,标识符扩展位,它在标准帧中位于控制场,始终处于显性。在扩展帧中位于仲裁场,始终处于显性。


仲裁域表示数据的优先级别,标识符组成的数值越小优先级越高。


3. Control Field

CAN2.0B 数据帧详解

由6个bit组成,指示要传输信息的数据字节数。包含预留位IDE/r1、r0(2bit),DLC(4bit)。

  • r0、r1:保留位必须以显性电平传送,然而,在接收侧可以接收显性、隐性集任意组合的电平。
  • DLC:数据的字节数必须是0-8个字节,但接收方对DLC=9-15的情况并不视为错误。
标准帧和扩展帧的控制场是不同的,在标准帧中r1的位置为IDE-Bit,是一个常态显性位。
CAN2.0B 数据帧详解

4. Data Field

由0到8个字节组成,用于负载传输的数据,数据输出开始于MSB。


5. CRC Field

CAN2.0B 数据帧详解

由15bit CRC Sequence和1bit CRC Delimiter组成,用来检查帧是否有传输错误。

CRC Sequence:CRC序列,计算范围是SOF,仲裁域,控制域和数据域。

CRC Delimiter:CRC界定符,是一个常态隐性位。


6. ACK Field

CAN2.0B 数据帧详解

ACK(应答场)长度为2 个bit。包括ACK Slot和ACK Delimiter。

  • ACK Slot:应答间隙,发送节点送数据时,会将ACK Slot及ACK Delimiter全部置为隐性,接收节点计算CRC Sequence正确无误后,会在ACK Slot期间向发送方发送一个显性位以示应答。
  • ACK Delimiter:ACK界定符,是一个常态隐性位。

如果总线上有2个以上的接收节点,只要它们当中任意一个正常接收到消息,就会有ACK被返回,如果总线上没有节点能够正常接收信息,则NO ACK被返回。另外发送节点不发送ACK。


7. End of Frame

指示帧的结束,由7个隐性位组成。