串口的硬件流控和软件流控
Posted qlexcel
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了串口的硬件流控和软件流控相关的知识,希望对你有一定的参考价值。
为什么需要流控?
当两台设备进行串口通信,假如他们对数据的处理速度不同。如果接收端数据缓冲区已满,则此时继续发送来的数据就会丢失。使用流控机制时,当接收端数据处理能力饱和时,就发出“不再接收”的信号,发送端就停止发送,直到接收端处理能力释放,发送“可以继续发送”的信号给发送端时,发送端才继续发送数据;
硬件流控
- DCD 载波检测
- RXD Receive Data 接收数据
- TXD Transmit Data 发送数据
- DTR Data Terminal Ready 数据终端准备
- GND System Ground 接地
- DSR Data Set Ready 数据准备完成
- RTS Request to Send 请求发送
- CTS Clear to Send 清除发送
- RI Ring Indicator 振铃提示
A如果想要发送数据给B的话,A会使得RTS(Request To Send)引脚有效,表明其想要“请求发送”数据给作为接收设备的B,而A接着就会去检测对应的来自B的CTS(Clear to Send)引脚,直到CTS有效(此时意味着B已经做好了相关的准备工作了,然后设置了CTS(Clear To Send) ,表明自己准备好接受数据了),才会真正开始发送数据。并且,接下来,在发送每个字符(data character)之前,都会去检测对应的CTS是否有效,如果有效,才会继续传输对应的数据,如果发现CTS无效(此时意味着B那么发生了啥情况,导致无法继续正常接受数据了,所以将CTS设置为了无效),那么就不能发生数据了。
对于上述CTS一直有效的情况下,A就一直发送数据给B,到了最后数据发送完之后,再把RTS设置为无效,表示数据已经发送完了。
这就是整个单个的数据发送流程。
软件流控
软件流控是以特殊的字符来代表从机已经不能再接收新的数据了,基本的流程就是从机在接收数据很多的时候或主动给发送端发送一个特殊字符,当发送端接收到这个特殊字符后就不能再发送数据了。
软件流控很方便,不需要增加新的硬件,还是以前的TX、RX,但是使用了软件流控,它本身的字符也是数据,这个数据只不过是说在软件里把它设置了一个特殊的含义。如果它是一个全双工的通讯,在给另一个串口发送数据的时候如果也包含了这样一个特殊字符,对方就会误以为我让它不要再发送数据了,会有一定的概率出现错误,而硬件流控就不需要考虑这方面,只需要使用 CTS 和 RTS,所有的数据都是由硬件来操作的。
以上是关于串口的硬件流控和软件流控的主要内容,如果未能解决你的问题,请参考以下文章