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