目录
经典CAN数据链路层最大能够支持8个字节,但ISO 14229并不仅仅是为了CAN总线设计的,最大容量达到4095个字节。比如VIN码是17个字节,CAN总线必然需要传递3帧才能传完VIN码,那么如何科学、快捷、安全地将多个字节通过经典CAN来进行传输,就成了一个需要解决的问题,ISO 15765-2协议由此诞生。
传输层协议与网络层服务
1.1 数据帧格式
UDS诊断报文收发相关的网络层协议一般采用 ISO 15765 - 2,ISO 15765 - 2采用4种数据帧,分别是单帧(SF)、首帧(FF)、连续帧(CF)、流控帧(FC);
下图为ISO 15765 - 2 中定义的4种数据帧的帧格式:
1.1.1 单帧(SF)
当诊断报文的长度大于0,小于8 bytes时,选用单帧进行传输;
单帧(SF)的格式如下图所示:
其中,SF_DL表示单帧的数据长度,如:诊断仪发送85 02服务请求,其诊断报文为:02 85 02 CC CC CC CC CC,CC为填充字节;
1.1.2 首帧(FF)
当诊断报文的长度大于等于8 bytes时,采用首帧、流控帧、连续帧的形式进行传输;
首帧(FF)的格式如下图所示:
其中,首字节高四位为1,低四位和Byte2组成FF_DL,FF_DL表示多帧传输数据的有效数据的长度;
1.1.3 连续帧(CF)
连续帧(CF)的格式如下图所示:
其中,首字节高四位为2,低四位组成SN,SN为多帧数据传输的帧序列号;
SN规则:
1. SN始终开始于0;
2. 第一个流控帧后的第一个连续帧SN 为1;
3. 在同一个多帧传输时,每增加一个连续帧,SN加1;
4. SN 的值不受后续流控帧的影响当SN的值达到15时,下一个连续帧的SN为0;
应用场合:
当诊断报文长度大于等于8时,再加上一个字节的PCI控制信息就是大于8,无法在单帧完成数据传输,在首帧和流控帧之后的数据连续帧;
1.1.4 流控帧(FC)
流控帧(FC)的帧格式如下图所示:
其中,首字节高四位为3,低四位组成FS,Byte2为BS,Byte3为Stmin;
FS:流控状态参数,控制多帧传输的状态
BS:块大小值,控制连续帧的连续传输的个数。例如:当BS设置成8时,表示接收流控帧之后,当发送完8个连续帧就需要再次接受流控帧。当值为0时,表示后续连续帧的发送不受流控帧的控制。
Stmin:连续帧之间最小时间间隔,接受方设置该参数,由连续帧发送实体实现。
应用场合:
当诊断报文长度大于等于8时,再加上一个字节的PCI控制信息就是大于8,无法在单帧完成数据传输,开始进行多帧传输,流控帧根据自身的接收能力控制发送端按照自身的能力发送连续帧。
例子:
响应报文ID为:0x7E2,为流控帧请求
FS:0,发送连续帧
BS:8,后续完成8个连续帧发送后,需要再次发送流控帧
Stmin: 0x14,连续帧的时间间隔最小为20ms;
1.2 数据传输流程
1.2.1 单帧传输流程
单帧传输,一帧单帧报文就可以完成:
1.2.2 多帧传输流程
1.发送方先发送首帧(FF),告诉对方我要发送FF DL长度的数据及N-2字节的数据;
2.接收方收到首帧后,发送流控帧(FC),告诉发送方流控的状态(FS)以及接收数据的能力 (ST)和下一次发送流控帧的间隔(BS);
3.发送方接收到流控帧后,就按照ST的时间间隔发送按SN计数的序列帧 (CF),每帧序列帧有N-1字节的数据;
4.发送方发送BS数量的序列帧(CF)后,等待流控帧,如果BS等于零,则此步骤省略;
5.发送方如果最后发送的序列帧数量小于BS,则不用等待流控帧,传输结束;
1.3 网络层参数
网络层参数包括N_As、N_Ar、N_Bs、N_Br、N_Cs、N_Cr;
其中N_Ar、N_Br、N_Cr为接收方时间参数,N_As、N_Bs、N_C发送方时间参数;
1.3.1 接收方时间参数
N_Ar:接收方数据帧经数据链路层传输的时间;
N_Br:接收方发送流控帧的时间间隔;(接收到发送请求到开始发送流控帧的时间间隔);
N_Cr: 接收方接收连续帧的等待时间;(即 NCr=NCs+NAs);
1.3.2 发送方时间参数
N_As:发送方数据帧经数据链路层传输的时间;
N_Bs:发送方接收流控帧的等待时间;
N_Cs:上一次连续帧发送成功到这一次连续帧开始发送的时间间隔;
实际开发过程中,需要对网络层时间参数和应用层时间参数进行配置,以满足需求;
应用层时间参数见上一篇文章《UDS诊断详解(一)》的第五章节:UDS相关的时间参数 - P2,P3,S3;