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串口通信;它是采用特殊字符來傳輸帶內信令,特殊編碼字符稱作 XOFF與 XON(分別表示 “transmit off” 與 “transmit on”)。因此,也被稱作 “XON /XOFF流控制”;
使用 ASCII字符集,XOFF一般為字節值 19(十進制),XON為字節值 17
| 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底層控制
上面也有說到,硬件流控制最后的實現還是繞到了軟件上,若果是去寫串口上位機控制的,可以看一下下面的鏈接,了解它們對應的寄存器
鏈接:串列埠的原理與應用
總結
以上是生活随笔為你收集整理的UART串口流控制(Flow control)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机游戏者战略编写员教程
- 下一篇: 玩一个钓鱼网站