1.四种报文类型(简洁明了)
请记住对于CAN报文来说,可以通过识别每条CAN的首个字节来确定它的类型,4种:
单帧 0
首帧 1
连续帧 2
流控帧 3
2. 单帧(SF,Single Frame)
0X 单帧首个字节:0(4bit)+ Data Length(4bit),控制信息占用1个字节
举例:
报文:01 B0 00 00 00 00 00 00
解析:
0:这是个单帧
1:有1个有效字节就是B0
剩下的自动填充
3.首帧(FF,First Frame)
1X XX前两个字节为1(4bit)+ Data Length(12bit),控制信息共占用2个字节。
数据长度最大:111111111111=2的12次方-1=4095 此时报文格式1F FF
举例:
报文:10 0C 70 07 04 C7 6E D2
解析:
1:这是个首帧
00C:代表着数据长度为12个字节
剩余的都是数据,因为DLC=8字节,所以首帧还可以带6个数据字节,剩余的6个数据怎么办呢?看流控帧
4.流控帧(FC,Flow Control)
3X 流控帧:前三个字节为FC :3(4bit)+流状态(FS,4bit)+块大小(BS,8bit)+最小间隔时间(STmin,8bit),控制信息共占用三个字节。
FC:3才能代表着这是流控帧
FS:
0:继续发送,Continue To Send(CTS)可无限发送
1:为Wait(WT)
2:为Overflow(OVFLW)
BS: 块大小,允许一次发送连续帧CF的个数。如果BS = 0,代表在数据传输的时,接收端不再发送流控帧了。发送端应当连续不断的发送数据,可无限制发送。
STmin: 上一个连续帧的确认接收(ACK)到新的连续帧开始发出的最小间隔时间
举例:
报文:30 08 02 00 00 00 00 00
解析:
3:这是个流控帧
0:继续发送流控帧
08:允许一次发送数据块的数量是8
02:间隔时间是2ms
5. 连续帧(CF,Consecutive Frame)
2X 连续帧:第一个字节为2+SN(最多16个SN,溢出后从0开始重新计数),控制信息占用1个字节。
需要注意的是,首帧虽然没有SN的区域,但是在首帧也占一个SN,因此首帧之后的连续帧需要从1开始计数。
第一个连续帧自然是0x21,之后一直到0x2F,下一个是0x20,循环。
举例:
报文:
21 E0 C4 89 CB 7B 78 68
22 47 14 DD 30 3C FE D1
解析:
2:代表着连续帧
1,2,3,4,5…F,1,2:序列
6.传输格式及其实例
这些报文看起来是不是熟悉多了。
7.总结
现在真的只想吃现成的,越快的掌握看懂才爽,所以不写太多文字,只把比较主要的标注一下。个人学习使用。
这个写的非常好,超级推荐更深入一点的朋友