UART通信中流控RTS和CTS的理解
一、流控,顾名思义就是流量控制的意思。目的是协调收发双方,使数据不会丢失。
二、很多人用了串口很久都不知道这回事,这是因为很多场合确实没有必要。收发双方波特率固定,并且接受数组足够大,这时不会出现接收方接受数组溢出导致数据丢失的情况,所以,以我的理解,使用流控的主要目的就是在数据量大,有可能出现接受数组溢出的时候,采取的一种协调收发双方的措施。可能还要其他原因,我没有理解到位。
三、流控设计到RTS和CTS两个口,收发双方都有各自的RTS和CTS,如通信双方A,B。那么A的RTS就与B的CTS相连,A的CTS就与B的RTS相连。
RTS的作用是告诉对方我可以接受数据,是输出口;CTS的作用是根据电平高低控制发送或不发生数据。
如:A与B通信,现在A给B发送数据,当B出现某种情况(可能是接受缓存快要满了)的时候,B的RTS拉低(一般拉低表示有效,但也不一定),A的CTS是与A的RTS相连的,则A检测到它的CTS拉低,就知道B在告诉他暂时不要再发了。他就乖乖地停止发送。等到B可以继续接收数据的时候,B的RTS拉高,这时候A的CTS也拉高,A就知道可以继续发送数据了。如果A和B收发情况换一下也是一样的道理。
四、上面说的是硬件的流控,接收方通过引脚的高低来告知或叫做控制发送方的发送。这种方式不管发送的数据是二进制格式还是字符格式都试用。
另外跟硬件流控相对的还要软件流控。软件流控就不需要RTS和CTS两引脚了,当接收方不想继续接收数据时,通过接收方的TXD给发送方发送一个XOFF信号,发送方接收到这个字符就暂停发送数据;等到接收方可以继续接收数据时,接收方再给发送方发送一个XON信号,于是发送方继续发送数据。因为XON、XOFF信号也是通过数据信号线发送的,所以软件流控在传输二进制数据时可能会出现错误,因为可能你发送的数据里面也有XON、XOFF对应的二进制值。但是这种情况也可以解决,比如对XON、XOFF进行转义。