硬件接口协议之“CAN总线报文”

本文主要介绍CAN总线的帧类型及结构。


CAN总线定义五种帧类型,分别为数据帧、远程帧、错误帧、过载帧和帧间隔。数据帧就是总线上传输用户数据的帧,其最高有效载荷是8字节(CAN FD为64字节),除了有效载荷外,数据帧还包括必要的帧头帧位部分以执行CAN标准通信,比如消息标识符(Identifier)、数据长度代码、校验信息等。远程帧是用来向总线上其它节点请求数据的帧,它的帧结构与数据帧相似,只不过没有有效载荷部分;错误帧是表示通信出错的帧;帧间隔是用来隔离数据帧或者遥控帧的。

数据帧和远程帧有标准格式和扩展格式两种格式。标准格式有11位的标识符,扩展格式有29位标识符。


帧类型

帧用途

备注

数据帧

用于发送单元向接收单元传送数据的帧

分为标准格式和扩展格式,标准格式有11位标识符,扩展格式有29位标识符

遥控帧

用于接收单元向具有相同ID的发送单元请求数据的帧

错误帧

用于当检测出错误时向其它单元通知错误的帧


过载帧

用于接收单元通知其尚未做好接收准备的帧


帧间隔

用于将数据帧及遥控帧与前面的帧分离开来的帧

过载帧和错误帧前不能插入帧间隔


数据帧

数据帧的帧结构如下图所示:





各个字段定义及长度分别为:

  • SOF:表示数据帧开始;(1bit)

  • Identifier:标准格式11 bit,扩展格式29 bit包括Base Identifier(11bit)和Extended Identifier(18bit),该区段标识数据帧的优先级,数值越小,优先级越高;

  • RTR:远程传输请求位,0时表示为数据帧,1表示为远程帧,也就是说RTR=1时,消息帧的Data Field为空;(1bit)

  • IDE: 标识符扩展位,0时表示为标准格式,1表示为扩展格式;(1bit)

  • DLC:数据长度代码,0~8表示数据长度为0~8 Byte;(4bit)

  • Data Field:数据域;(0~8Byte)

  • CRC Sequence:校验域,校验算法G(x) = x15 + x14 + x10 + x8 + x7 + x4 + x3 + 1;(15bit)

  • DEL:校验域和应答域的隐性界定符;(1bit)

  • ACK:应答,确认数据是否正常接收,所谓正常接收是指不含填充错误、格式错误、 CRC 错误。发送节点将此位为1,接收节点正常接收数据后将此位置为0;(1bit)

  • SRR:替代远程请求位,在扩展格式中占位用,必须为1;(1bit)

  • EOF:连续7个隐性位(1)表示帧结束;(7bit)

  • ITM:帧间隔,Intermission (ITM),又称Interframe Space (IFS),连续3个隐性位,但它不属于数据帧。帧间空间是用于将数据帧和远程帧与前面的帧分离开来的帧。数据帧和远程帧可通过插入帧间空间将本帧与前面的任何帧(数据帧、遥控帧、错误帧、过载帧)分开。过载帧和错误帧前不能插入帧间空间。


远程帧

一般情况,数据是由发送单元主动向总线上发送的,但也存在接收单元主动向发送单元请求数据的情况。远程帧的作用就在于此,它是接收单元向发送单元请求发送数据的帧。远程帧与数据帧的帧结构类似,如下图所示。



远程帧与数据帧的帧结构区别如下表所示:



帧起始

仲裁段

控制段

数据段

CRC

ACK

帧结束

意义

表示帧开始

表示数据优先级

表示数据段的字节数





数据帧

1位显性位

11位或29位(RTR位为显性

6

0~8个字节

15CRC值和1CRC界定符

1ACK槽和1ACK界定符

7位隐性位

遥控帧

1位显性位

可请求具有相同ID的数据帧(RTR位为隐性

6





当总线上具有相同标识符的数据帧和远程帧同时发送时,由于数据帧的 RTR 位是显性的,数据帧将在仲裁中赢得总线控制权。


错误帧

用于在接收和发送消息时检测出错误时,通知错误的帧。错误帧由错误标志和错误界定符构成。错误帧的帧结构如下图所示。


  • 错误标志:6-12 个显性/隐性重叠位

  • 主动错误标志(6个显性位):处于主动错误状态的单元检测出错误时输出的错误标志

  • 被动错误标志(6个隐性位):处于被动错误状态的单元检测出错误时输出的错误标志

  • 错误界定符:8 个隐性位


过载帧

过载帧是用于接收单元通知发送单元它尚未完成接收准备的帧。在两种情况下,节点会发送过载帧:

接收单元条件的制约,要求发送节点延缓下一个数据帧或远程帧的传输;
帧间空间(Intermission)的 3 bit 内检测到显性位

每个节点最多连续发送两条过载帧。过载帧由过载标志和过载界定符(8 个隐性位)构成。过载帧的结构如下图所示。

 


帧间隔

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




帧间隔有两种不同的形式:

  • 主动错误状态的帧间隔

  • 被动错误状态的帧间隔


间隔段:连续三个隐性位;间隔段期间,所有节点不允许发送数据帧或遥控帧,只要在这期间监听到显性位,接收节点就会发送过载帧。

空闲段:连续隐性位,个数不一定,0个或者多个都可以。总线空闲的时间是任意长的,只要总线空闲,节点就可以竞争总线。

暂停段:又叫做延迟传送段,只有处于被动错误状态的节点在发送帧间隔的时候,才会在帧间隔中插入8个连续隐性位的暂停段。


以上就是针对CAN总线的帧结构的介绍。

支持小编,请点在看