流控作用
“流”指的是数据流。数据在两个串口之间传输时,当通讯双方速率不匹配时,常常会出现丢失数据的现象。如台式机与单片机之间的通讯,若接收端数据缓冲区已满,继续发送来的数据就会丢失。
在早期网络信号通过 MODEM 进行数据传输时,这个问题就尤为突出。因此,引出流控的概念,当接收端数据处理速度不够时,就发出“不再接收”的信号,发送端就停止发送,直到收到“可以继续发送”的信号再发送数据。因此流控制可以控制数据传输的进程,防止数据的丢失。常用的两种流控制是硬件流控制和软件流控制,下面分别说明。
硬件流控
硬件流控常用的有 RTS/CTS 流控制和 DTR/DSR(数据终端就绪/数据设置就绪)流控制。实际应用主要以前者为主。信号说明:
RTS - Request To Send,请求(对端)发送,用于指示本设备是否已经准备好接收数据。
CTS - Clear To Send,清除发送。输入信号,用于判断是否可以向对端发送数据。
硬件流控首先必须确保硬件支持,用 RTS/CTS(请求发送/清除发送)流控制时,应将通讯两端的RTS、CTS线交叉连接,数据终端设备(如计算机)使用 RTS 来起始调制解调器或其它数据通讯设备的数据流。数据通讯设备(如调制解调器)则根据 CTS 信号来起动和暂停来自计算机的数据流。工作原理为:根据接收端缓冲区大小设置一个高位标志(如缓冲区大小的75%)和一个低位标志(如缓冲区大小的25%),当缓冲区内数据量达到高位时,接收端将 RTS 信号线置高电平(假设为 TTL 电平,低电平为有效状态),当发送端检测到 CTS 为高电平后,就停止发送数据,直到接收端缓冲区的数据量低于低位后将 RTS 恢复为低电平。RTS 用来标明接收设备是否可以接收数据。
常用的流控制还有还有DTR/DSR(数据终端就绪/数据设置就绪)。我们在此不再详述。由于流控制的多样性,当软硬件支持流控时,应做详细的使用说明。
软件流控
由于硬件流控有软硬件的使用限制,因此在某些场合下会使用软件流控进行替代。一般通过特殊字符 XON/XOFF 来实现软件流控制。工作原理为:当接收端的输入缓冲区内数据量超过设定的高位时,就向数据发送端发出 XOFF 字符(十进制的 19 或 Control-S,设备编程说明书应该有详细阐述),发送端收到 XOFF 字符后就立即停止发送数据;当接收端的输入缓冲区内数据量低于设定的低位时,就向数据发送端发出 XON 字符(十进制的 17 或 Control-Q),发送端收到 XON 字符后就立即开始发送数据。
使用软件流控时要避免采用的特殊流控字符与普通数据有冲突,以免普通数据误认为特殊流控字符导致通讯异常。因此实际应用时要根据通讯场景进行特殊字符替换,组合等方式来确保通讯稳定。
本文为原创技术文章,转载请引用本文出处: