SAE J1939协议(五)
多包报文
采用多包报文,在连接管理报文的协调下进行多帧传输。
长度大于8字节的报文无法用单个CAN数据帧来装载。因此,它们必须被拆分为若干个小的数据包,然后使用单个的数据帧对其逐一传送。而接收方必须能够接收这些单个的数据帧,然后解析各个数据包并重组成原始的信息。
CAN数据帧包含一个8字节的数据域。由于组成长信息的单个数据包必须能被识别出来以便正确重组,因此把数据域的首字节定义为数据包的序列编号。每个数据包都会被分配到一个从1到255的序列编号。由此可知,多帧传输最大的数据长度是(255包×7字节/包=)1785个字节。
序列编号
序列编号是在数据拆装时分配给每个数据包,然后通过网络传送给接收方。接收方接收后,利用这些编号把数据包重组成原始信息。
序列编号从1开始,依次分配给每个数据包,直到整个数据都被拆装和传送完毕。这些数据包从编号为1的数据包开始按编号的递增顺序发送。
第一个数据传送包包含序列编号1和字符串的头7个字节,其后的7个字节跟随序列编号2存放在另一个CAN数据帧中,再随后的7个字节与编号3一起,直到原始信息中所有的字节都被存放到CAN数据帧中并被传送。
数据包
传送的每个数据包(除了传送队列中的最后一个数据包)都装载着原始数据中的7个字节。而最后一个数据包的数据域的8个字节包含:数据包的序列编号和参数组至少一个字节的数据,余下未使用的字节全部设置为“FF 16”。
多包广播报文的数据包发送间隔时间为50到200毫秒。对于发送到某个指定目标地址的多包消息,发送者将保持数据包(在CTS允许多于一个数据包时)发送间隔的最长时间不多于200毫秒。响应者必须知道这些数据包都具有相同的标识符。
数据包被顺序接收。按照序列编号的顺序把多包消息的数据包重新组合成一多字节字符串。这个字符串被作为长信息的应答传送给应用程序模块。
实例
下图是多帧传输机制的实例:
SAEJ1939协 相关文章:
- SAE J1939协议(三)(12-12)
- 基于CAN总线和SAE J1939协议的汽车仪表设计(11-26)
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)