UART串口流控制(Flow control)

一般在串行通訊中,我們會在一些上位機上看到 RTS/CTS、DTR/DSR和 XON/XOFF的選項,這是對流控制的選項,一般是應用於 RS232接口的,是拿來調制解調器的數據通訊的

一、流控制的作用

這裏講到的 “流”,指的是數據流;在數據通信中,流控制是管理兩個節點之間數據傳輸速率的過程,以防止出現接收端的數據緩衝區已滿,而發送端依然繼續發送數據,所導致數據丟失

二、工作原理

當接收端的數據緩衝區已滿,無法處理數據來時,就發出 “不再接收” 的信號,發送端則停止發送,直到發送端收到 “可以繼續發送” 的信號再發送數據。計算機中常用的兩種流控制分別是硬件流控制(RTS/CTS、DTR/DSR等)和軟件流控制(XON/XOFF)

三、RS232引腳定義

RS-232設計之初是用來連接調制解調器做傳輸之用,也因此它的腳位意義通常也和調制解調器傳輸有關。RS-232的設備可以分爲數據終端設備(DTE,Data Terminal Equipment, For example, PC)和數據通信設備(DCE,Data Communication Equipment)兩類,這種分類定義了不同的線路用來發送和接受信號。一般來說,計算機和終端設備有DTE連接器,調制解調器和打印機有DCE連接器。但是這麼說並不是總是嚴格正確的,用配線分接器測試連接,或者用試誤法來判斷電纜是否工作,常常需要參考相關的文件說明

RS-232目前有 DB-25和 DB-9型的連接器,被用的較多的是 DB-9型的接口

RS-232中 DB-9型的管腳分配:

         DB-9 Male(Pin Side)                   DB-9 Female (Pin Side)
             -------------                          -------------
             \ 1 2 3 4 5 /                          \ 5 4 3 2 1 /
              \ 6 7 8 9 /                            \ 9 8 7 6 /
               ---------                              ---------

它的信號引腳說明:

腳位 簡寫 意義 信號 說明
Pin1 DCD Data Carrier Detect 數據載波檢測(DCD) 調制解調器通知電腦有載波被偵測到。
Pin2 RXD Receiver 接受數據(RD、RXD) 接收數據。
Pin3 TXD Transmit 發送數據(TD、TXD) 發送數據。
Pin4 DTR Data Terminal Ready 數據終端準備(DTR) 電腦告訴調制解調器可以進行傳輸。
Pin5 GND Ground 公共接地 地線。
Pin6 DSR Data Set Ready 數據準備好(DSR) 調制解調器告訴電腦一切準備就緒。
Pin7 RTS Request To Send 請求發送(RTS) 電腦要求調制解調器將數據提交。
Pin8 CTS Clear To Send 清除發送(CTS) 調制解調器通知電腦可以傳數據過來。
Pin9 RI Ring Indicator 振鈴指示(RI) 調制解調器通知電腦有電話進來。

四、硬件流控制(以 RTS/CTS爲主)

RTS/CTS最初是設計爲電傳打字機和調制解調器半雙工協作通信的,每次它只能一方調制解調器發送數據。終端必須發送請求發送信號然後等到調制解調器迴應清除發送信號。儘管 RTS/CTS是通過硬件達到握手,但它有自己的優勢

1、RS232的標準連線法
在這裏插入圖片描述
當 A端的設備準備好後,發出 DTR(數據設備就緒)信號, 傳至 B端的 RI(響鈴)和 DSR(通訊設備就緒)。 這樣,只要 A準備好(DTR),B端就會產生呼叫(RI)並準備好(DSR)。

注意到 A端的RTS(請求發送)、CTS(允許發送)和 B端的 CD(載波檢測)連在一起, 則說明 A一旦請求發送(RTS)將立即得到允許(CTS), 並使 B端檢測到載波信號(CD)。 A端的 TXD與 B端的 RXD相連,A發送,B接收。

2、RS232的簡化連線法
在這裏插入圖片描述
原來 RTS和 CTS是用來詢問和回答是否可以傳輸數據。 但在這種連接方式下,就成了純粹告訴對方自己是否可以進行通訊。 此時 RTS和 DTR都可以用來對數據流進行控制。

A端的 DTR(數據設備就緒)發出信號, 當 B端準備好後,B端的 DTR(數據設備就緒)向 A端的DSR(通訊設備就緒)發出信號。 接下來就可以通過 RTS(請求發送)和 DTR(允許發送)來控制通信。

3、進一步簡化(也就是以 RTS/CTS爲主)

從上面的流程可以看到,硬件流控制主要是 RTS/CTS和 DTR/DSR來控制,但是,人嘛,能懶就懶,因此現在很多時候都只是用 RTS/CTS告訴對方自己是否可以進行通訊,而直接跳過了 DTR/DSR的就緒狀態檢測

在使用 RTS/CTS時,它們都是低電平有效,因此,一般在上位機中一旦打開串口,RTS會拉置高電平,然後等待數據發送,使得低電平有效

值得注意的,並不是說硬件流控制就單純的依靠硬件,它還需要軟件去處理識別,因爲硬件流控制所做的只是給出信號電平,真正的控制發送使能還得看軟件的處理

五、軟件流控制

軟件流控制(Software flow control)是在計算機數據鏈路中的一種流控制方法,特別適用於 RS-232串口通信;它是採用特殊字符來傳輸帶內信令,特殊編碼字符稱作 XOFFXON(分別表示 “transmit off” 與 “transmit on”)。因此,也被稱作 “XON/XOFF流控制”;

使用 ASCII字符集,XOFF一般爲字節值 19(十進制),XON爲字節值 17

碼的名字 含義 ASCII 十進制 十六進制
XOFF 暫停傳輸 DC3 19 13
XON 恢復傳輸 DC1 17 11

值得注意的是:是接受方把 XON/XOFF信號發給發送方來控制發送方何時發送數據的,這些信號是與發送數據的傳輸方向相反的

它的處理主要是:接收方利用 XON信號告訴發送方,我已經準備好接受更多的數據了,利用 XOFF信號告訴發送方停止發送數據,直到接受方發送 XON信號告訴發送方我再次準備好了。

XON/XOFF是一種工作在終端間的帶內方法,但是必須兩端都支持這個協議,而且在突然啓動的時候會有混淆的可能;XON/XOFF可以工作於 3線的接口

軟件流控制廣泛用於低速設備,特別是打印機與啞終端,用以指出它們臨時暫停接收數據;軟件流控制的優點是降低了收發雙方之間的電路導體數量,給定一個共同的電路接地,只需要兩條電路分別用於收發,也不需要額外的特定硬件實現;缺點是發送 XOFF需要至少一個字符的時間,而且需要排在對方已經接收的數據之後處理

XON/XOFF一般不贊成使用,推薦用 RTS/CTS控制流來代替它們。 因爲若是傳輸的是二進制數據,可能你發送的數據裏面也有 XON、XOFF對應的二進制值出現,進而引起誤操作,這是軟件流控制的缺陷,而硬件流控制不會有這個問題;當然,你也可以對 XON、XOFF進行轉義

六、UART底層控制

上面也有說到,硬件流控制最後的實現還是繞到了軟件上,若果是去寫串口上位機控制的,可以看一下下面的鏈接,瞭解它們對應的寄存器

鏈接:串列埠的原理與應用

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章