流控帧(Flow Control Frame,FC)是ISO 15765-2(CAN协议)网络层中的一部分,用于管理在多帧传输过程中发送方与接收方之间的通信。它确保接收方能够处理所有传输的数据而不会被淹没,控制数据流的节奏和块大小。
流控帧的基本结构
流控帧通常由以下字段组成:
-
帧类型(1字节):
- 标识这是一个流控帧(FC)。
- 高4位为
0x3
,例如:0x30
。
-
流控类型(1字节):
- 指示流控帧的类型:
CTS
(Continue To Send,继续发送):通常表示接收方可以继续接收数据,值为0x30
。WT
(Wait,等待):表示接收方需要发送方等待一段时间再发送后续数据,值为0x31
。OVFLW
(Overflow,溢出):表示接收方的缓冲区已满,不能接收更多数据,值为0x32
。
- 指示流控帧的类型:
-
块大小(1字节):
- 表示接收方能连续接收的最大帧数。
- 若设置为
0x00
,表示没有特定的块大小限制。
-
最小分隔时间(1字节):
- 表示发送方在发送连续帧之间应等待的最短时间。
- 时间单位通常是毫秒(0x00到0x7F表示0到127毫秒,0xF1到0xF9表示100到900微秒的时间间隔)。
-
保留字节(4字节):
- 通常填充为零 (
0x00
)。
- 通常填充为零 (
流控帧示例
一个典型的流控帧可能如下:
30 00 00 00 00 00 00 00
- 30: 流控帧类型及继续发送指令(CTS)。
- 00: 块大小(无特定块大小限制)。
- 00: 最小分隔时间(无特定时间间隔要求)。
- 00 00 00 00: 保留字节,填充为零。
作用和用途
流控帧在多帧传输中起以下重要作用:
- 控制数据流:确保接收方可以处理所有接收到的数据而不会溢出。
- 分块传输:通过设置块大小,接收方可以要求发送方分批发送数据,从而更好地管理接收缓冲区。
- 节奏控制:通过设置最小分隔时间,接收方可以要求发送方在发送每个帧之间等待一定的时间,避免过快的数据传输导致的缓冲区溢出。
流控帧是UDS协议中确保可靠数据传输和系统稳定运行的关键机制之一。