UART(Universal Asynchronous Receiver/Transmitter)是通讯接口的一种,可以在串行通信中实现同步和异步传输。异步传输可以在不使用时钟信号的情况下,通过使用起始位和停止位来识别每个字节的开始和结束。UART可以进行全双工或半双工通信。
UART数据传输的时候,常常会遇到发送端和接收端的数据处理速度不一致的情况。当接收端处理速度跟不上发送端的速度时,可能会导致缓冲区溢出,数据丢失。为了解决这个问题,UART提供了一种“流控”机制,可以在数据传输中控制数据的流动,从而实现数据传输的稳定性。
软件流控又叫XON/XOFF流控,是通过发送控制字符来控制数据传输的。发送端在缓冲区快满时发送XOFF(ASCII码0x13),接收端收到XOFF后会暂停接收。接收端在缓冲区空闲时发送XON(ASCII码0x11),发送端收到XON后会继续发送数据。使用软件流控的优点是可以通过软件直接控制数据的传输,可以方便的实现控制,缺点是需要占用额外的带宽和帧空间。
硬件流控是通过使用额外的硬件信号线来控制数据流动。最常用的硬件流控方式是RTS/CTS流控。发送端在缓冲区快满时会拉高RTS信号,告诉接收端暂停接收数据,等待缓冲区空闲。接收端在准备好接收数据时会拉高CTS信号,告诉发送端可以继续发送数据。使用硬件流控的优点是稳定可靠,不会占用额外的带宽和帧空间,缺点是需要额外的硬件资源来支持。