CAN协议帧结构-part1

前面内容介绍了CAN总线特点,也提到了CAN帧结构,接下来这部分将展开详细介绍。CAN协议帧主要有4种类型,如下图8。基于帧类型间的关系,将帧结构分成两部分介绍,一部分为数据帧和遥控帧(数据帧与遥控帧的最大差别在于遥控帧没有数据段,故将两者放在一起),另一部分为错误帧和过载帧。下面将介绍第1部分数据帧和遥控帧。

图8 帧类型,引自[1]

 
2.1 数据帧和遥控帧概览

根据 CAN 2.0A 和 CAN 2.0B 标准可知,数据帧(Data Frame)和遥控帧(Remote Frame)有标准格式(Standard)扩展格式(Extended),这2种格式都具有相同的帧结构,如下图9。

图9 帧格式,引自[3]

 

数据帧由7个段(Field)构成,分别为帧起始,仲裁段,控制段,数据段,CRC段,ACK段和帧结束。遥控帧由6个段构成,即数据帧的7个段去除数据段。先看数据帧

 

图10 数据帧结构及其两种格式,引自[1]

 

这里根据采集CAN总线的实际电压信号来形象地了解下标准格式的数据帧。

 

图11 标准数据帧的电压表现形式,引自[2]

 

再看遥控帧(也叫远程帧):

 

图12 遥控帧结构及其两种格式,引自[1]

 

对比上述的图10和12的数据帧和遥控帧结构有: 

 


2.2 数据帧与遥控帧的段

通过上文的介绍对数据帧和遥控帧有了基本认识,下面具体了解每个段。

1) 帧起始(SOF, Start of frame)

表示帧开始的段1个位的显性位。(总线空闲时为隐性位,故帧起始以显性位非常好识别),对于数据帧和遥控帧的标准/扩展格式均如此。

 

图13 帧起始结构,引自[1]

 

2) 仲裁段(Arbitration field)

表示数据的标识符(Identifier, ID)的段,标准格式和扩展格式在此的构成不同。如前面所述:该段确定信息发送的优先级。标准帧的仲裁段由11位基本ID和1个RTR位组成,而扩展帧的仲裁段由11位基本ID,18位扩展ID,1个SRR位,1个IDE位和1个RTR位组成,下图14。

图14 仲裁段结构,引自[1]

 

为了便于仲裁标准帧与扩展帧,做如下定义:

 

引自[1]

 

仲裁段既然用于仲裁,那么具体是怎么执行仲裁呢?

首先,说明下数据帧和遥控帧各自的两个格式下某些位的数值差别,如下所示:

 

然后,进行仲裁,

情况1:在ID的前11位就能结束仲裁,如下图15,在ID25仲裁就结束。

图15 仲裁情况1

 

当在ID的前11位未结束仲裁,即说明前11位ID相同。这时需要进一步分为4种情况来讨论:

情况2:标准格式的数据帧与遥控帧仲裁,因为ID18后是RTR位,数据帧的RTR位恒为显性,遥控帧的RTR位恒为隐性。此时数据帧将仲裁胜出,即前11位ID号相同时,标准数据帧的优先级高于标准遥控帧

图16 仲裁情况2

 

情况3:扩展格式的数据帧与遥控帧仲裁

当前11位ID和后18位ID全相同时,由于这种情况下的SRR位和IDE位均为隐性,故也是看RTR位。扩展数据帧的RTR位恒为显性,扩展遥控帧的RTR位恒为隐性,此时数据帧将仲裁胜出。即前11位ID号相同时,扩展数据帧的优先级高于扩展遥控帧

在前11位ID相同,后18位ID不相同时,仲裁过程与情况1一样。

图17 仲裁情况3

 

情况4:数据帧的标准格式与扩展格式仲裁,因为ID18后,标准格式的是RTR位,扩展格式的是SRR位,仲裁这两位,而标准格式的RTR位恒为显性,扩展格式的SRR位恒为隐性,故此时标准格式的数据帧仲裁胜出。即前11位ID号相同时,标准数据帧优先级高于扩展数据帧

图18 仲裁情况4

 

情况5:遥控帧的标准格式与扩展格式仲裁,因为ID18后两者均是IDE位,扩展格式的IDE位恒为隐性,标准格式的IDE位在控制段,恒为显性,故标准格式的遥控帧仲裁胜出。即前11位ID号相同时,标准遥控帧优先级高于扩展遥控帧

图19 仲裁情况5

 

通过上述分析,我们就知道了仲裁段的各种仲裁情况,尤其是在前11位ID号相同时,根据协议设定的RTR, SRR, IDE,就可以保证:

· RTR:保证数据帧优先级高于遥控帧;

· SRR :保证标准数据帧的优先级高于扩展数据帧;

· IDE :保证标准遥控帧的优先级高于扩展遥控帧。

 

2.3 控制段(Control field)

表述数据段的字节数,由6个位组成,标准格式和扩展格式的组成有所不同,如下图20所示。

 

图20 控制段结构,引自[1]

 

其中保留位必须全部以显性电平发送,但接收方可以接收显性、隐性及其任意组合的电平。数据长度码与数据的字节数的对应关系如下图21所示。数据的字节数必须为0-8字节,但接收方对DLC=9-15的情况并不视为错误,一般最终以DLC=8来处理。

 

图21 控制段与数据段的关系,引自[2]

 
2.4 数据段(Data Field)

数据段由数据帧中的发送数据组成,可包含0-8个字节的数据,每个字节包含了8个位,从MSB(最高位)开始发送。遥控帧没有此段。

 

图22 数据段结构,引自[1]

 

2.5 CRC段(Cyclic Redundancy Check Field)

CRC段由15个位的CRC序列序和1个位的CRC界定符(用于分隔位)组成,其中CRC界定符恒为隐性。

 

图23 CRC段结构,引自[1]

 

这里CRC序列是根据多项式生成的CRC值,其计算范围包括帧起始,仲裁段,控制段和数据段。

 

图24 CRC序列计算说明,引自[5]

附:en.wikipedia.org/wiki/C , 如何通俗的理解CRC校验并用C语言实现, zhuanlan.zhihu.com/p/77

 

2.6 应答段(Acknowledge Field, ACK)

应答段由应答槽(ACK Slot)和应答界定符(ACK Delimiter)2个位组成,其作用是用来确认是否正常接收。

 

图25 应答段结构及说明,引自[1]

图26 

发送与接收时的ACK槽状态,引自[6]

 

2.7 帧结束(End of Frame)

表示该帧的结束的段。由7个位的隐性位构成。

图27 帧结束结构,引自[1]

 

到此CAN协议帧结构的第1部分基础知识就介绍完了,下篇文章将结合OSI七层模型,标准协议ISO11898-1以及应用报文来进一步理解CAN协议帧结构。


Reference:

[1] CAN入门书.pdf

[2] https://elearning.vector.com/mod/page/view.php?id=333

[3] CANPES.pdf

[4] Understanding and Using the Controller Area Network Communicaiton Protocol, Theory and Practice.

[5] CAN总线协议中文版

[6] https://blog.csdn.net/weixin_40528417/category_7489864.html

文章来源:糊涂振  原文链接:https://zhuanlan.zhihu.com/p/268901221

作者:谦易行工程服务  版权归原作者所有,如需转载,请联系作者。 

原文链接:https://bbs.z-onesoft.com/omp/community/front/api/page/mainTz?articleId=7601

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值