串列埠流控

SoldierJazz2019發表於2017-05-23

流控作用

這裡講到的“流”,指的是資料流。資料在兩個串列埠之間傳輸時,當通訊雙方速率不匹配時,常常會出現丟失資料的現象。如臺式機與微控制器之間的通訊,若接收端資料緩衝區已滿,繼續傳送來的資料就會丟失。在早期網路訊號通過 MODEM 進行資料傳輸時,這個問題就尤為突出。因此,引出流控的概念,當接收端資料處理速度不夠時,就發出“不再接收”的訊號,傳送端就停止傳送,直到收到“可以繼續傳送”的訊號再傳送資料。因此流控制可以控制資料傳輸的程式,防止資料的丟失。常用的兩種流控制是硬體流控制(包括 RTS/CTSDTR/CTS 等)和軟體流控制 XON/XOFF(繼續/停止),下面分別說明。

硬體流控

硬體流控常用的有 RTS/CTS 流控制和 DTR/DSR(資料終端就緒/資料設定就緒)流控制。實際應用主要以前者為主。訊號說明:

RTS - Request To Send,請求(對端)傳送,用於指示本裝置是否已經準備好接收資料。

CTS - Clear To Send,清除傳送。輸入訊號,用於判斷是否可以向對端傳送資料。

硬體流控首先必須確保硬體支援,用 RTS/CTS(請求傳送/清除傳送)流控制時,應將通訊兩端的RTS、CTS線交叉連線,資料終端裝置(如計算機)使用 RTS 來起始調變解調器或其它資料通訊裝置的資料流。資料通訊裝置(如調變解調器)則根據 CTS 訊號來起動和暫停來自計算機的資料流。工作原理為:根據接收端緩衝區大小設定一個高位標誌(如緩衝區大小的75%)和一個低位標誌(如緩衝區大小的25%),當緩衝區內資料量達到高位時,接收端將 RTS 訊號線置高電平(假設為 TTL 電平,低電平為有效狀態),當傳送端檢測到 CTS 為高電平後,就停止傳送資料,直到接收端緩衝區的資料量低於低位後將 RTS 恢復為低電平。RTS 用來標明接收裝置是否可以接收資料。

常用的流控制還有還有DTR/DSR(資料終端就緒/資料設定就緒)。我們在此不再詳述。由於流控制的多樣性,當軟硬體支援流控時,應做詳細的使用說明。

軟體流控

由於硬體流控有軟硬體的使用限制,因此在某些場合下會使用軟體流控進行替代。一般通過特殊字元 XON/XOFF 來實現軟體流控制。工作原理為:當接收端的輸入緩衝區內資料量超過設定的高位時,就向資料傳送端發出 XOFF 字元(十進位制的 19 或 Control-S,裝置程式設計說明書應該有詳細闡述),傳送端收到 XOFF 字元後就立即停止傳送資料;當接收端的輸入緩衝區內資料量低於設定的低位時,就向資料傳送端發出 XON 字元(十進位制的 17 或 Control-Q),傳送端收到 XON 字元後就立即開始傳送資料

使用軟體流控時要避免採用的特殊流控字元與普通資料有衝突,以免普通資料誤認為特殊流控字元導致通訊異常。因此實際應用時要根據通訊場景進行特殊字元替換,組合等方式來確保通訊穩定。


相關文章