硬流控 RTS/CTS 与软流控 XON/XOFF 通俗易懂的工作原理

当两台硬件设备的吞吐速率不对等(如一台主频 3GHz 的电脑向一台仅有 8MHz、处理速度极为缓慢的单片机串口持续灌入大量固件升级数据时),单片机由于需要将数据转写到内部的 Flash 中(写入一般需要几十毫秒的擦除时间),此时如果不加以控制,接收缓冲区(FIFO)就会迅速漫堤溢出,产生严重的丢包。

流控制(Flow Control)就是串口防止溢出的控制技术,主要分为两种实现方式:

  1. 硬件流控(Hardware Flow Control):使用物理线 RTS (Request to Send,请求发送) 与 CTS (Clear to Send,清除发送) 进行高低电平握手。单片机如果缓存快满了,就拉低其 RTS 引脚(对应电脑的 CTS 输入),电脑硬件层便会强行暂停发送字节,直到单片机处理完毕,拉高电平放行。需要额外两根物理控制线,但极为稳定可靠,不占用软件开销。
  2. 软件流控(Software Flow Control):使用标准通信通道传输特定字符控制流量。比如接收端快爆仓时,在 TX 线上向发送端吐出一个 XOFF 字符(十六进制的 0x13),发送端软件收到后就会暂停发送,直到接收端腾出空闲缓冲区后发送一个 XON 字符(0x11)重新激活。不需要额外硬件连线,但在二进制大文件传输(文件内部极可能天然包含 0x11 或 0x13 字节数据)中极易引起控制混乱,因此通用性较差。