UDS-CAN网络层传输协议

UDS-CAN网络层传输协议,第1张

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

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)多帧传输的连续帧

例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→结束

018DA10FA X 8 03 22 08 01 FF FF FF FF 686.920250 R

018DAFA10 X 8 03 7F 22 31 FF FF FF FF 686.920890 R

018DA10FA X 8 03 22 01 08 FF FF FF FF 807.113590 R

018DAFA10 X 8 07 62 01 08 FF FF FF FF 807.114750 R

18DA10FA:10为目标地址,FA为源地址

10的回复中7F为否定响应,03表示字节仿春长度,22为读

62为22读的肯定响应,在原来的上边加40;07为字节长度

0108为DID

注悄大隐意在写程序的时候,高位在前,所以是启厅这样写

int如何分解为十六进制,请参考之前的文章


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/12513262.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2025-08-25
下一篇2025-08-25

发表评论

登录后才能评论

评论列表(0条)

    保存