引言:
一般我们在使用CAN通讯的时候,一帧数据包最多是8个字节,但是我们本身的协议或者数据可能会超出一帧的范围,这个时候就需要用到数据帧的拆包和组合。本文主要简单介绍思路,供后来者参考,希望前人指证。
具体思路:
1,确定数据分包的大小和数量。根据需要传输的数据量和传输时间(波特率),确定每个数据分包的大小和数量。
2,划分数据分包。将需要传输的数据按照每个数据分包的大小进行划分,并将每个数据分包进行编号。每包数据包含分包总数和数据分包编号, 如果防止出错则每包数据还需要增加校验。
3,封装CAN数据帧。 CAN数据帧包含CAN ID、数据长度、数据内容等信息。 将需要发送的数据连接至can发送端口。
简单例子:
假设要传输一个长度为20字节的数据,每个数据分包的大小为8字节,共分为4个数据分包,编号分别为1、2、3、4。每个数据包格式如下:
包总数 当前数据包编号1 数据1 数据2 数据3 数据4 数据5 本包校验和
包总数 当前数据包编号2 数据6 数据7 数据8 数据9 数据10 本包校验和
包总数 当前数据包编号3 数据11 数据12 数据13 数据14 数据15 本包校验和
包总数 当前数据包编号4 数据16 数据17 数据18 数据19 数据20 本包校验和
这样一个数据帧就通过四次发送到接收方,至于发送端和接收端的具体实现,需要读者自己搞一搞咯
分包数=数据总数/每包数据数
另外关于帧ID,也阔以和数据包总数挂钩,比如我收到这个ID,就知道有多少包数据过来,那样一包数据里面就可以多发1个数据。