UART通訊中流控RTS和CTS的理解

NO IMAGE

一、流控,顧名思義就是流量控制的意思。目的是協調收發雙方,使資料不會丟失。

二、很多人用了串列埠很久都不知道這回事,這是因為很多場合確實沒有必要。收發雙方波特率固定,並且接受陣列足夠大,這時不會出現接收方接受陣列溢位導致資料丟失的情況,所以,以我的理解,使用流控的主要目的就是在資料量大,有可能出現接受陣列溢位的時候,採取的一種協調收發雙方的措施。可能還要其他原因,我沒有理解到位。

三、流控設計到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進行轉義。