UART中RTS和CTS流控学习总结

目录

  • UART中RTS和CTS流控学习总结
    • 一、流控定义
    • 二、硬件流控过程分析

一、流控定义

流控:数据在两个串口之间进行通讯,常常会出现丢失数据的现象,比如当接收端数据缓冲区满了,而发送端还有数据发送过来,本质原因是速度不匹配,处理能力不匹配。

流控就是为了解决这个速度匹配的问题,它的含义非常简单,当接收端处理数据处理不过来时,就向发送端发送不在接收信息,当发送端接收到这个信号之后,就会停止发送,直到收到可以继续发送信号在继续发送。

流控的方式有两种,一种是硬件流控,一种是软件流控,一般UART只有RX、TX两个信号,要流控的话只能是软流控;如果有RX,TX,CTS,RTS 四个信号,则多半是支持硬流控的UART。

**RTS (Require ToSend,发送请求)**为输出信号,用于指示本设备准备好可接收数据,低电平有效,低电平说明本设备可以接收数据。

**CTS (Clear ToSend,发送允许)**为输入信号,用于判断是否可以向对方发送数据,低电平有效,低电平说明本设备可以向对方发送数据。翻译为“Clear ToSend”,可以理解为清除发送,因为CTS是对方的RTS控制己方的CTS是否允许发送的功能。

二、硬件流控过程分析

如下图,设备A和设备B的TX、RX、CTS、RTS、GND连接

  • 设备A要发送数据给设备B

1、设备A拉低自己的RTS,告诉设备B已准备好发送数据

2、此时设备B检测到自己的CTS被拉低,得知设备A准备发送数据,若设备B未准备好,就不拉低自己的RTS;若设备B已经准备好接收,也将自己的RTS拉低,对应A的CTS拉低,此时设备A、设备B可以正常通信了

  • 设备A正在给设备B发送数据

1、设备A发送数据太快,设备B接收缓冲区快要满了,此时设备B拉高自己的RTS引脚,对应设备A的CTS引脚被拉高

2、设备A发现自己的CTS引脚被拉高,停止发送,等待自己的CTS再次拉低后再发送数据

软件流控之后有空再学习——20230726