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之间的时间间隔,通过时间间隔控制接收数据的速率;
多帧发送三种情况:
1. 不停止接收:开始→FF→(接收方)FC→CF→结束;
2. 指定数据长度接收:开始→FF→(接收方)FC→CF(部分数据) →(接收方)FC→CF(部分数据) →(接收方)FC→CF(部分数据) →….. (接收方)FC→CF(部分数据)→结束;
3. 数据异常,不接收:开始→FF→(接收方)FC→结束;