UDS-CAN网络层传输协议

UDS-CAN网络层传输协议

CAN传输数据长度最大8个字节;

单帧发送:


单帧发送与接收

原始数据:27 09

SF(Single Frame) 例1:02 27 29 00 00 00 00 00;

SF第一字节的高4位为0,低4位为数据长度,其余字节为服务数据内容,没用到的数据可以按00或AA填充。

02: 

0:第一字节高4位默认为0,表示单帧数据.

2:数据长度,表示在02后面有两个数据长度;为27 29;

多帧发送:


多帧发送与接收

多帧发送方式:

FF(First Frame)多帧传输的第一帧;

FC(Flow Control)多帧传输的流控制帧;

CF(Consecutive Frame)多帧传输的连续帧;


原始数据:59 04 00 01 00 27 00 0B FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF;

例2:  FF 10  1E  59  04  00  01  00  27;

  FC 30  00  00  00  00  00  00  00;

  CF 21  00  0B  FF  FF  FF  FF  FF;

22  FF  FF  FF  FF  FF  FF  FF;

23  FF  FF  FF  FF  FF  FF  FF;

24  FF  FF  FF  AA  AA  AA  AA;

FF(First Frame)多帧传输的第一帧,其第一字节的高4位为1,低四位+第二字节为数据长度,其余字节为服务数据内容;

10 1E:

1:第一字节高四位默认为1;

01E:数据长度位30; 最大为FFF=4095可知传输数据最大长度为4095;

FC(Flow Control)多帧传输的流控制帧,其第一字节高四位为3,低四位为FS流控制状态;第二字节为BS数据块大小,第三字节为STmin间隔最短时长;

30:

3:第一字节高四位为3;

0;为FS流控制状态;

FS:

FS=0:表示允许发送方继续发送连续帧;

FS=1: 表示发送方需等待下一条流控制帧[1],该流控制帧称为等待流控制帧;

FS=2: 表示报文长度超出接收方的网络层缓存大小,此流控制帧将迫使发送方中断多帧报文的发送,并且发送方网络层使用N_USData.con向应用层报告N_Result = N_Buffer_Overflow。FS = Overflow的流控制帧接收方只能在接收到第一帧后发送。

第二字节BS=00;

BS=00: 表示允许发送方连续发送连续帧,而不需要等待接收方发出的流控制帧;

BS>=01||BS<=FF: 表示允许发送方连续发送连续帧的数目,发送完成相应数目的连续帧后,发送方必须等待接收方发出的流控制帧;

BS为当前接收数据的数据长度,通过控制数据长度来防止通道堵塞;

第三字节STmin=00;

STmin>=00||STmin<=7F: 两个连续帧之间的最小间隔时间,0~127ms;

STmin>=80||STmin<=F0:Reserved保留;

STmin>=F1||STmin<=F9: 两个连续帧之间的最小间隔时间,100~900us;

STmin>=FA||STmin<=FF: Reserved保留;

如果发送方收到一个FC,其STmin的值是Reserved,则发送方应默认STmin为7F(127ms);

STmin为两个CF之间的时间间隔,通过时间间隔控制接收数据的速率;


STmin时间

多帧发送三种情况:

1. 不停止接收:开始→FF→(接收方)FC→CF→结束;

2. 指定数据长度接收:开始→FF→(接收方)FC→CF(部分数据) →(接收方)FC→CF(部分数据) →(接收方)FC→CF(部分数据) →….. (接收方)FC→CF(部分数据)→结束;

3. 数据异常,不接收:开始→FF→(接收方)FC→结束;

你可能感兴趣的:(UDS-CAN网络层传输协议)