CAN总线以“帧(Frame)”形式进行通信。“数据帧(Data Frame)”,顾名思义,是用来传输数据的。CAN总线的数据帧有标准格式(Standard Format)和扩展格式(Extended Format)的区分,标准帧的格式如下图:
数据帧可以分为七段:
1)帧起始(Start Of Frame-SOF): 1bit,固定为显性位,即逻辑0,表示数据帧(或远程帧)的开始。帧起始只有在总线空闲期间节点才能够发送。
作用:用于同步,总线空闲期间的任何隐性到显性的跳变都将引起节点进行硬同步
2)仲裁段(Arbitration Field):包括两部分:标识符位(Identifier field-ID)和远程发送请求位(Remote Transfer Request-RTR)。而扩展帧在标准帧的基础上,则多了SRR和IDE
- 标识符位,是一个功能性的地址(Functional address),CAN接收器通过标识符来过滤数据帧。标准格式的数据帧的标识符(CAN-ID)长度为11位(11 bits),ID10~ID0,ID10为最高权重位(MSB),ID0为最低权重位(LSB),按照ID10~ID0的顺序进行传输。CAN协议还规定:前7位最高权重位(ID10~ID4)不能都为“隐性”信号。
- 远程发送请求位,简称“RTR”,1 bit。虽然这个位的名字很长,但它的功能很简单,用于区分该帧是数据帧还是远程帧:“显性信号(0)”代表数据帧(Data Frame);“隐性信号(1)”代表远程帧(Remote Frame)。
- RTR作用:在ID相同的情况下,保证数据帧优先级高于远程帧
作用:仲裁场主要作用在于区分哪个节点更优先,让更优先的节点掌握发送权,其他节点在静默等待总线空闲再进行下一回合的仲裁。
仲裁过程:在CAN总线中有一种回读机制,指节点在发送到总线报文的同时也对总线上当前的报文进行回读(为了判断自己发出的东西与总线上的东西是否一致);
还有一种线与机制,指总线上接收到多节点报文时,显性位(逻辑0)能覆盖隐形位(逻辑1)
3)控制段(Control Field):包括6个位(6 bits),分别是扩展标识符位(Identifier Extension bit-IDE,1 bit);保留位0(Reseved bit0-r0,1 bit);数据长度编码位(Data Length Code-DLC,4 bits),如下图:
说明:数据帧和远程帧的控制段结构相同
IDE:扩展标识符,用来表示该帧是标准格式还是扩展格式
r/r1和r0:保留位,必须以显性,即逻辑0发送
DLC:代表数据场的数据长度(byte),对没有数据场的远程帧,DLC表示该远程帧对应的数据帧的数据场的字节数;DLC编码规则如下:(其中“d”表示显性信号;“r”表示隐性信号;)
4) 数据段(Data Field):发数据场就是我们节点携带的数据,需要相互交互的数据信息,0-64位,具体数据长度由控制场DLC决定
数据场里低字节先发(Byte0....Byte7)
每个字节是高位先发(Bit7....Bit0)
超过一个字节的数据可以把低有效位放在前(Intel格式),也可以把高有效位放在前(Motorola格式)
5) CRC场:CRC场包含CRC校验序列(CRC Sequence)和CRC界定符DEL(恒为隐形,即逻辑1),通过多项式生成CRC值,比较发送节点与接受节点CRC是否一致,来确保帧的有效性,计算范围包括发送节点【帧起始、仲裁场、控制场、数据场】是否与接收节点【帧起始、仲裁场、控制场、数据场】是否一致
6) 确认段(ACK Field):包括ACK槽(ACK SLOT)和界定符(Delimiter,DEL)两位,表示确认是否正常接收。
7) 帧结束(End of Frame-EOF):7位(7 bits),隐性信号,表示帧的结束。
说明:固定7个隐性位,即逻辑1构成
帧间隔:
说明:固定为3个隐形位,即逻辑1构成。
当连续11位为隐性时,总线为空闲状态,节点可发送帧起始来让总线忙碌起来,接着就开始仲裁,又是一个忙碌的小总线
扩展帧仲裁段多的SRR和IDE:
<<SRR:在扩展帧中(数据帧或远程帧),SRR横为隐性,即逻辑1,扩展帧的SRR位刚好对上标准帧的RTR位。
SRR作用:在前11位ID相同的情况下,标准数据帧优先级高于扩展数据帧。
IDE:在扩展帧中恒为隐性,即逻辑1; 在数据帧中IDE位于控制段,且横为显性,即逻辑0;刚好标准帧的IDE和扩展帧的IDE位置对应上
IDE作用:在前11位ID相同的情况下,标准远程帧优先级高于扩展远程帧。>>
扩展帧控制段与标准帧不同的是:
扩展帧有两个保留位r1 和r0,这两个保留位均需要发送显性信号;
CAN协议规定了好几种帧类型,但是对于我们应用来说,只有数据帧和远程帧可以通过软件编程来控制。(其他几种帧都是由CAN控制器硬件实现的,我们也管不了)。而数据帧和远程帧最大的区别在于:远程帧没有数据域。数据帧分为标准数据帧和扩展数据帧,它们之间最大的区别在于:仲裁场的不同。
CAN总线的升级版本:百度安全验证