串口流控(CTS/RTS)

170 阅读2分钟

1.流控概念

在两个设备正常通信时,由于处理速度不同,有的快,有的慢,就可能导致丢失数据的情况。比如台式机与单片机之间的通讯,接收端数据缓冲区已满,则此时继续发送来的数据就会丢失。
流控制能解决这个问题,当接收端数据处理不过来时,就发出“不再接收”的信号,发送端就停止发送,直到收到“可以继续发送”的信号再发送数据。
因此流控制可以控制数据传输的进程,实现收发双方的速度匹配,防止数据的丢失。 PC机中常用的两种流控制是硬件流控制【RTS/CTS】、【DTR/CTS(数据终端就绪/数据设置就绪)等】和软件流控制【XON/XOFF(继续/停止)】。

2.硬件流控【RTS/CTS】

RTS (Require ToSend,发送请求)为输出信号,低电平有效,低电平说明本设备可以接收数据。
CTS (Clear ToSend,发送允许)为输入信号,低电平有效,低电平说明本设备可以向对方发送数据。

假定A、B两设备通信,
A设备的RTS连接B设备的CTS;
A设备的CTS连接B设备的RTS。
A设备查询CTS脚信号,此信号由B的RTS控制。
如果A查询CTS为(低电平),表示B的FIFO不满,可以接收数据。反之则不可以。
如果B设备接收缓冲(FIFO)满了时发出RTS信号(高电平)(意思通知A设备停止发送), 一段时间后B设备接收缓冲有了空余,发出RTS信号(低电平),指示A设备开始发送数据。

3.软件流控

软件流控通过在数据流中插入Xoff(特殊字符)和Xon(另一个特殊字符)信号来实现。
A设备一旦接收到B设备发送过来的Xoff,立刻停止发送;
反之,如接收到B设备发送过来的Xon,则恢复发送数据给B设备。