CAN总线的帧类型及结构

描述

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

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

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

帧类型 帧用途 备注
数据帧 用于发送单元向接收单元传送数据的帧 分为标准格式和扩展格式,标准格式有11位标识符,扩展格式有29位标识符
遥控帧 用于接收单元向具有相同ID的发送单元请求数据的帧
错误帧 用于当检测出错误时向其它单元通知错误的帧  
过载帧 用于接收单元通知其尚未做好接收准备的帧  
帧间隔 用于将数据帧及遥控帧与前面的帧分离开来的帧 过载帧和错误帧前不能插入帧间隔

数据帧

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

CAN总线

CAN总线

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

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个隐性位,但它不属于数据帧。帧间空间是用于将数据帧和远程帧与前面的帧分离开来的帧。数据帧和远程帧可通过插入帧间空间将本帧与前面的任何帧(数据帧、遥控帧、错误帧、过载帧)分开。过载帧和错误帧前不能插入帧间空间。

远程帧

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

CAN总线

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

  帧起始 仲裁段 控制段 数据段 CRC段 ACK段 帧结束
意义 表示帧开始 表示数据优先级 表示数据段的字节数        
数据帧 1位显性位 11位或29位(RTR位为显性) 6位 0~8个字节 15位CRC值和1位CRC界定符 1位ACK槽和1位ACK界定符 7位隐性位
遥控帧 1位显性位 可请求具有相同ID的数据帧(RTR位为隐性) 6位      

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

错误帧

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

CAN总线

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

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

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

错误界定符:8 个隐性位

过载帧

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

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

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

 CAN总线

帧间隔

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

CAN总线

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

主动错误状态的帧间隔

被动错误状态的帧间隔

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

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

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

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

      审核编辑:彭静
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分