CAN总线通信——介绍下CAN通信的数据帧(Data Frame)。
CAN总线以“帧(Frame)”形式进行通信。“数据帧(Data Frame)”,顾名思义,是用来传输数据的。CAN总线的数据帧有标准格式(Standard Format)和扩展格式(Extended Format)的区分,标准帧的格式如下图:
数据帧可以分为七段:
1)帧起始(Start Of Frame-SOF): 1bit,显性信号,表示数据帧(或远程帧)的开始。
2)仲裁段(Arbitration Field):包括两部分:标识符位(Identifier field-ID)和远程发送请求位(Remote Transfer Request-RTR)。
标识符位,是一个功能性的地址(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)。
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),用来表示该帧是标准格式还是扩展格式;
保留位0(r0),保留,以后使用;
数据长度编码位(DLC),4位(4 bits),包括DLC3~DLC0,表示该帧实际发送的数据的长度(以字节为单位);DLC的编码规则如下:
其中“d”表示显性信号;“r”表示隐性信号;
4) 数据段(Data Field):发送数据的内容,最多8个字节。数据段与DLC的对应关系如下图:
5)循环校验段(CRC Field):包括循环校验序列(CRC Sequence)和界定符(Delimiter,DEL):
循环校验序列(CRC Sequence),15 bits,用于校验传输是否正确;
界定符(DEL),1 bit,隐性信号,表示循环校验序列的结束;
6) 确认段(ACK Field):包括确认位(ACK SLOT)和界定符(Delimiter,DEL),表示确认是否正常接收。
确认位(ACK),1 bit,节点收到正确的CRC序列时,发送端的ACK位被置位;
界定符(DEL),1 bit,隐性信号;
7) 帧结束(End of Frame-EOF):7位(7 bits),隐性信号,表示帧的结束。
以上是标准格式的数据帧,下面来看看扩展格式与标准格式有哪些不同,先看看下面这张图:
仲裁段与控制段有所不同:
1)仲裁段(Arbitration Field):扩展格式的仲裁段包括五个部分:
基本标识符位(Base identifier-Base ID),11 bits,与标准格式的标识符相同;
替代远程请求位(Substitute Remote Request Bit,SRR),1 bit,隐性信号;
扩展位(Identifier Extension bit,IDE),1 bit,标识扩展帧还是标准帧;
扩展标识ID位(Extended Identifier, Extended ID),18 bits,存放扩展标识ID;
远程发送请求位(Remote Transmission Request,RTR),1 bit,数据帧中为显性信号,远程帧中为隐性信号;
2)控制段(Control Field):6 bits,与标准帧不同的是:用保留1(r1)取代了标准帧的IDE,r0和DLC是一样的;也就是说,扩展帧有两个保留位r1 和r0,这两个保留位均需要发送显性信号;