前面内容介绍了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