CAN总线协议:数据帧
CAN总线协议:数据帧
CAN总线(Controller Area Network)是一种用于汽车和工业控制领域的串行通信协议。它具有高可靠性和实时性,广泛应用于需要多个设备之间进行数据交换的场景。本文将详细介绍CAN总线协议中的数据帧结构,帮助读者深入理解CAN总线的数据传输机制。
一. 简介
CAN总线的数据传输需要遵循特定的协议规范。CAN协议定义了五种帧格式来实现数据传输,包括数据帧、遥控帧、错误帧、过载帧和帧间隔。其中,数据帧是最常用的一种帧格式,用于传输实际数据。
2. CAN总线协议
- CAN总线的数据帧格式
通过CAN总线传输数据是需要按照一定协议进行的。
CAN协议提供了5种帧格式来传输数据:数据帧、遥控帧、错误帧、过载帧和帧间隔。
我们常用的一种数据帧格式是 数据帧。
其中数据帧和遥控帧有标准格式和扩展格式两种,标准格式有11位标识符(ID),扩展格式有29个标识符(ID)。
这5中帧的用途见下表所示:
接下来分别来介绍这五种数据帧格式。
1. 数据帧
数据帧由7段组成:
① 帧起始,表示数据帧开始的段。
② 仲裁段,表示该帧优先级的段。
③ 控制段,表示数据的字节数及保留位的段。
④ 数据段,数据的内容,一帧可发送0~8个字节的数据。
⑤ CRC段,检查帧的传输错误的段。
⑥ ACK段,表示确认正常接收的段。
⑦ 帧结束,表示数据帧结束的段。
数据帧结构如下图所示:
上图中给出了数据帧标准格式和扩展格式两种帧结构,图中D表示显性电平0,R表示隐性电平1,D/R表示显性或隐性,也就是0或1,我们来简单分析一下数据帧的这7个段。
① 帧起始
帧起始很简单,标准格式和扩展格式都是由一个位的显性电平0来表示帧起始。
② 仲裁段
仲裁段表示帧优先级,仲裁段结构如下图所示:
标准格式和扩展格式的仲裁段不同,从上图可以看出,标准格式的ID为11位,发送顺序是从ID10到ID0,最高7位ID10~ID4不能全为隐性(1),也就是禁止 0X1111111XXXXX这样的ID。扩展格式的ID为29位,基本ID从ID28到ID18,扩展ID由ID17到ID0,基本ID与标准格式一样,禁止最高7位都为隐性。
③ 控制段
控制段由6个位构成,表示数据段的字节数,标准格式和扩展格式的控制段略有不同,如下图所示:
上图中r1和r0为保留位,保留位必须以显性电平发送。DLC为数据长度,高位在前,DLC段有效值范围为0~8。
④ 数据段
数据段也就是帧的有效数据,标准格式和扩展格式相同,可以包含08个字节的数据,从最高位(MSB)开始发送,结构如下图所示:64为bit,对应到字节就是0~8字节。
注意,上图中数据段的0
⑤CRC段
CRC段保存CRC校准值,用于检查帧传输错误,标准格式和扩展格式相同,CRC段结构如下图所示:
可以看出,CRC段由15位的CRC值与1位的CRC界定符组成。CRC值的计算范围包括:帧起始、仲裁段、控制段、数据段,接收方以同样的算法进行计算,然后用计算得到的CRC值与此CRC段进行比较,如果不一致的话就会报错。
⑥ ACK段
ACK段用来确认接收是否正常,标准格式和扩展格式相同,ACK段结构如图66.1.3.6所
示:
可以看出,ACK段由ACK槽(ACK Slot)和ACK界定符两部分组成。
发送单元的ACK,发送2个隐性位,而接收到正确消息的单元在ACK槽(ACK Slot)发送显性位,通知发送单元正常接收结束,这个过程叫发送ACK/返回ACK。
发送ACK的是所有接收单元中接收到正常消息的单元,所谓正常消息是指不含填充错误、格式错误、CRC错误的消息,这些接收单元既不处于总线关闭态,也不处于休眠态的所有接收单元中。
⑦ 帧结束
最后就是帧结束段,标准格式和扩展格式相同,帧结束段结构如下图所示:
可以看出,帧结束段很简单,由7位隐性位构成。