目录
为什么需要CTS/RTS?
一般来说,只有在半双工通信的情况下需要用到CTS/RTS。
在全双工系统中,因配置双向通道,故不需要RTS/CTS联络信号,使其变高
全双工模式发送者和接受者可以在连接线路上同时发送数据,发送的方向相反。发送和接受同时进行,需要两对电缆。
RS232串口之RTS与CTS作用_串口rts和cts用法_M_qsqsqsq的博客-CSDN博客
RTS与CTS的定义
RTS和CTS用于流控,提供了流控信号,但实际的流控功能还是要在软件实现,就是说即使硬件上RTS和CTS做了连线,但软件没有使用这两个信号,则通信就如无流控状态。
RTS (Require ToSend,发送请求)为输出信号,用于指示本设备准备好可接收数据,低电平有效,低电平说明本设备可以接收数据。
CTS (Clear ToSend,发送允许)为输入信号,用于判断是否可以向对方发送数据,低电平有效,低电平说明本设备可以向对方发送数据
RTS与CTS的连接
设备1的RTS -------- 设备2的CTS
设备1的CTS -------- 设备2的RTS
即交叉连接。
CTS/RTS流控的工作原理如下:
当串口准备好发送数据时,RTS信号一般只会被置高电平一次,也就是只有一个上升沿。这个上升沿会被接收端的芯片检测到,如果当前可以接收数据,接收端发送一个CTS(Clear To Send)信号(该信号一直保持高电平),表示接收端已经准备好接收数据了。如果接收端的缓冲区已经满了,CTS信号会被置低电平,发送端就会停止发送数据,等待接收端的缓冲区有空间可以存放新的数据后再继续发送;
当发送端接收到CTS信号后,发送端的RTS电平会被拉高,开始发送数据;
当发送端发送完数据后,会将RTS信号置为低电平,表示发送数据结束。此时,接收端的CTS信号也会被置为低电平,表示不再需要接收数据;
硬件连接
对于使用流控的RS232通信,设备的CTS如果悬空,可能由于芯片管脚的内部上拉导致持续的高电平,此时该设备将不能对外发送数据。所以对于使用流控的情况下,CTS不应悬空。
串口流控(CTS/RTS)使用详解_rts cts_Crush_u的博客-CSDN博客
1.流控概念
在两个设备正常通信时,由于处理速度不同,就存在这样一个问题,有的快,有的慢,在某些情况下,就可能导致丢失数据的情况。
如台式机与单片机之间的通讯,接收端数据缓冲区已满,则此时继续发送来的数据就会丢失。
流控制能解决这个问题,当接收端数据处理不过来时,就发出“不再接收”的信号,发送端就停止发送,直到收到“可以继续发送”的信号再发送数据。因此流控制可以控制数据传输的进程,实现收发双方的速度匹配,防止数据的丢失。
PC机中常用的两种流控制是硬件流控制(包括RTS/CTS、DTR/CTS等)和软件流控制XON/XOFF(继续/停止)。
2. 使用方式
a. 硬件流控
硬件流控制常用的有RTS/CTS流控制和DTR/DSR(数据终端就绪/数据设置就绪)流控制。
RTS (Require ToSend,发送请求)为输出信号,用于指示本设备准备好可接收数据,低电平有效,低电平说明本设备可以接收数据。
CTS (Clear ToSend,发送允许)为输入信号,用于判断是否可以向对方发送数据,低电平有效,低电平说明本设备可以向对方发送数据。
其他介绍:
硬流控的RTS 、CTS :RTS (Require ToSend,发送请求)为输出信号,用于指示本设备准备好可接收;CTS (Clear ToSend,发送清除)为输入信号,有效时停止发送。假定A、B两设备通信,A设备的RTS 连接B设备的CTS ;A设备的CTS连接B设备的RTS。前一路信号控制B设备的发送,后一路信号控制A设备的发送。对B设备的发送(A设备接收)来说,如果A设备接收缓冲快满的时发出RTS信号(高电平)(意思通知B设备停止发送),B设备通过CTS 检测到该信号,停止发送;一段时间后A设备接收缓冲有了空余,发出RTS信号(低电平),指示B设备开始发送数据。A设备发(B设备接收)类似。
b. 软件流控
软件流控和硬件流控都方式一样,只是实现方式不同而已。在通信过程中,软件流控通过在数据流中插入Xoff(特殊字符)和Xon(另一个特殊字符)信号来实现。A设备一旦接收到B设备发送过来的Xoff,立刻停止发送;反之,如接收到B设备发送过来的Xon,则恢复发送数据给B设备。同理,B设备也类似,从而实现收发双方的速度匹配。
3. 流控使用
如果串口只接了RX、TX两个信号,那么要流控的话只能使用软流控;如果接了RX,TX,CTS ,RTS四个信号,那么可以使用硬流控或者软件流控。
RS232 引脚说明
1、UART通信中的流控CTS/RTS
了解了UART通信基本知识之后,尝试着在TC387上基于EB tresos配置并且使用UART功能。
TC387的文档对于配置过程写的挺详细的,所以实际配置中基本也是基于配置文档的设置去设定各个pin口和属性。不过呢,有一个配置项的功能在UART基础里还没有涉及到。
从文档描述来看,CTS应该是一个可选项(相关代码中还能看到这个和RTS也有关),进行UART通信不是必须设置的。
2、那么,什么是CTS/RTS?
CTS,全称Clear ToSend,允许发送[1],是作为输入信号给到UART,代表可以向对方传送数据。如果CTS设置为低电平时有效,那么当CTS低电平时,允许向对方发送数据。
RTS,全称Require ToSend,允许接收数据,作为UART的输出信号,代表可以从外部接收数据。如果设置的为低电平时有效,那么RTS低电平时,允许接收数据。
3、为什么需要CTS/RTS?
一般来说,只有在半双工通信的情况下需要用到CTS/RTS。
4、参考
- ^Analysis on RTS/CTS Technology of UART Controller Analysis on RTS/CTS Technology of UART Controller - LCD Panel LTD
4. 数据发送
a. 物理连接(交叉连接)
§ 主机的RTS(输出)信号,连接到从机的CTS(输入)信号。
§ 主机的CTS(输入)信号,连接到从机的RTS(输出)信号。
▪ RTS (Require ToSend,发送请求)为输出信号,用于指示本设备准备好可接收数据,低电平有效,低电平说明本设备可以接收数据。
▪ CTS (Clear ToSend,发送允许)为输入信号,用于判断是否可以向对方发送数据,低电平有效,低电平说明本设备可以向对方发送数据。
b. 主机发送过程:
§ 主机查询主机的CTS脚信号,此信号连接到从机的RTS信号,受从机控制。
§ 如果主机CTS信号为有效(低),表示从机的接收FIFO未满,从机可以接收,此时主机可以向从机发送数据。
§ 主机在发送过程中要一直查询CTS信号是否为有效状态。一旦无效,则终止发送。
c. 主机接收过程:
§ 主机如果接收FIFO未满,则使主机RTS信号有效,也即从机的CTS信号有效。此时从机如果要发送,发送前会查询从机的CTS信号,如果为有效,则开始发送。
§ 在发送过程中一直查询从机CTS信号的有效状态,如果无效则中止发送。是否无效由主机的RTS信号决定。
§ 主机如果FIFO满了,则使主机RTS信号无效,也即从机CTS信号无效。主机接收中止。
d. 那主机的CTS信号什么时候会无效呢?
从机在接收到主机发送的数据时,从机的接收模块的FIFO如果满了,则会使从机RTS无效,也即主机的CTS信号无效。主机则查询到CTS无效时,主机发送中止。
此过程可以由硬流控完成。我们只要设置开启硬流控,设置FIFO大小。RTS信号和CTS信号由控制器代码查询和设置。
5. 理论验证:
a. 主机发送验证:
§ 向主机串口丢数据,看TX线上是否有数据。
§ 理论上,遥控主机CTS信号为无效时,TX线上无数据;遥控主机CTS信号为有效时,TX线上有数据;
b. 主机接收验证:
§ 从机向串口丢数据,主机看RX线上是否有数据。
§ 理论上,如果主机使RTS信号为有效时,RX线上有数据;如果主机使RTS信号为无效时,RX线上无数据;