关于串口流控制

    最近接触到了串口通信变成,但是对串口底层通信不是很了解,有其是对串口的流控制,今晚查了一些资料,算是有了一个比较清楚的认识,在此处记录一下。

    要深入理解一个问题,我觉得首先应该搞清楚他为何而来。串口为何需要流控制,是为了确保数据传输中的安全性,这个安全性是发送接收双方的数据处理速度不一致导致的。接收方的数据处理速度慢于数据发送方的时候,接收方的缓冲区写满之后会造成数据丢失。因此需要串口流控制来协调数据收发的双方。

    从以上的分析可以看出串口流控制的主导方是串口数据的接收方,理清楚这个问题之后,串口的流控制问题将变得非常容易。串口通信首先发送方告诉接受方我这边准备好了(发送方DTR有效,导致接收方DSR有效),你那边是啥情况,接收方检测到自己DSR有效之后查看自身状态看看自己能不能接受数据,如果可以的话就通知发送方我也准备好了,通知方式和发送方一样。这一步是串口通信最先需要进行的。

    完成了上面的步骤之后,数据接收方检查自身缓冲区当前状态,如果可以接受数据,就通过RTS有效告诉数据发送方可以继续发送数据了,数据接受方CTS有效。数据发送方在检查到自己CTS有效之后,就开始将自己发送缓冲区的数据发送到串口线上。当数据接受方发现自己接受缓冲区快满了就置RTS无效,进而控制数据发送方CTS无效,停止数据发送。

    基于以上分析,从任何一个终端来看,如果想发送数据就检查自己的DSR和CTS是否同时有效,若有效就可以发送了。如果还可以继续接受数据,就去置自己的DTR和RTS有效,告诉对面继续发送数据吧,我这边感觉良好。

    以上是通过接线实现的硬件流控制。软件流控制比较简单,其实就是在串口发送的数据里面设置了两个标志,这个标志传输的方向和数据传输的方向相反,是数据接收方通知数据发送方自己是否还可以继续接受数据。毕竟我们前面分析了串口通信的主导方是数据接收方。

你可能感兴趣的:(关于串口流控制)