【UDS-流控帧和连续帧】

📅 2026/7/16 3:50:32 👁️ 阅读次数 📝 编程学习
【UDS-流控帧和连续帧】

UDS 里要先分清两层:
UDS:诊断应用层,关心 SID,例如 0x10、0x22、0x2E、0x34、0x36、0x37
ISO-TP / CAN-TP:传输层,负责单帧、多帧、流控、连续帧

流控帧 FC 和连续帧 CF 严格来说不是 UDS 帧,而是承载 UDS 报文的 ISO-TP 帧。
ISO-TP 帧类型
普通 8 byte CAN 下,首字节高 4 bit 是 PCI 类型:
0x0n:Single Frame,单帧,n = 数据长度,最多 7 byte UDS 数据
0x1n:First Frame,首帧,多帧开始,后面带总长度
0x2n:Consecutive Frame,连续帧,n = Sequence Number
0x30:Flow Control,流控帧,由接收方发给发送方

连续帧 CF
当 UDS 数据超过单帧容量时,发送方先发 First Frame,然后等待接收方 Flow Control,之后再发 Consecutive Frame。
连续帧格式:
Byte0: 0x2N
       高 4 bit = 2,表示 Consecutive Frame
       低 4 bit = SN,序号 1,2,3...F,0,1...
Byte1~7: 后续数据

例如:
21 xx xx xx xx xx xx xx
22 xx xx xx xx xx xx xx
23 xx xx xx xx xx xx xx
...
2F xx xx xx xx xx xx xx
20 xx xx xx xx xx xx xx
SN 的作用是让接收方判断有没有丢帧、乱序、重复帧。

流控帧 FC
流控帧由“接收方”发出,用来告诉发送方:你可以继续发、等一下、或者我收不了了。
格式:
Byte0: 0x30 / 0x31 / 0x32
Byte1: BS
Byte2: STmin
Byte3~7: