首先我們來看一下RS232接口的所有引腳名稱和功能,具體如下:
??從上面兩個圖中可以看到,第4、6、7、8腳就是我們要說的硬件流控引腳。
二、DTR和DSR
DTR:數(shù)據(jù)終端準(zhǔn)備好;DSR:數(shù)據(jù)設(shè)備準(zhǔn)備好。
??PC開啟DSR信號告訴Modem,PC機已經(jīng)準(zhǔn)備好通信;Modem通常開啟DSR來應(yīng)答,讓PC機知道Modem準(zhǔn)備應(yīng)答。DTR/DSR主要是用來做建立鏈接的,即PC數(shù)據(jù)發(fā)送和接收之前,先要建立發(fā)送方和接收方的連接,這時候才用到,與流控關(guān)系不大,暫不說。
三、RTS和CTS
RTS:請求發(fā)送;CTS:清除發(fā)送
??RTS/CTS流控制過程,如下:
??A如果想要發(fā)送數(shù)據(jù)給B的話,A會使得RTS引腳有效,表明其想要“請 求發(fā)送”數(shù)據(jù)給B;
??然后A接著就會檢測對應(yīng)的來自B的CTS引腳,直到CTS引腳有效, A才會真正開始發(fā)送數(shù)據(jù);并且在接下來發(fā)送每個字符之前都會去檢測對應(yīng) 的CTS是否有效,如果CTS仍然有效,才會繼續(xù)傳輸對應(yīng)的數(shù)據(jù)。
??如果A發(fā)現(xiàn)CTS無效(此時意味著B發(fā)生了一些未知情況,如緩存滿了, 導(dǎo)致無法繼續(xù)正常接收數(shù)據(jù)了,所以將CTS置為無效了),那么A就不能繼 續(xù)發(fā)送數(shù)據(jù)。
??如果CTS一直處于有效的情況下,A就會一直發(fā)送數(shù)據(jù),直到A 的數(shù)據(jù) 全部發(fā)送完之后,再把RTS置為無效,表示數(shù)據(jù)已經(jīng)發(fā)送完了。
這就是整個簡單的單個的數(shù)據(jù)發(fā)送流程,用RTS和CTS來控制傳輸?shù)倪?輯。
??注意:RTS和CTS引腳有效狀態(tài)一般是置為1,但具體還要看實際情況。
四、XOFF和XON
上面兩種情況都說的是硬件流控,接收方通過引腳的高低來告知或叫控制發(fā)送方的發(fā)送,這種方式不管發(fā)送的數(shù)據(jù)是二進制格式還是字符格式數(shù)據(jù)都可以;但是很多情況下我們的設(shè)備環(huán)境是不具備硬件環(huán)境的,這時我們就需要使用軟件流控XOFF/XON。
??軟件流控XOFF/XON不需要用到RTS和CTS引腳。
??XOFF/XON的工作流程,如下:
??A如果想要給B發(fā)送數(shù)據(jù),那么A直接會給B進行發(fā)送;
??當(dāng)B不想繼續(xù)接收A的數(shù)據(jù)時,B通過RXD數(shù)據(jù)線(即B的TXD數(shù)據(jù)線)給發(fā)送A一個XOFF信號,A接收到XOFF信號就會暫停發(fā)送數(shù)據(jù);
當(dāng)B可以繼續(xù)接收A的數(shù)據(jù)時,B通過RXD數(shù)據(jù)線給A發(fā)送一個XON信號,A接收到XON信號后就會繼續(xù)發(fā)送數(shù)據(jù)。
??注意:因為XON/XOFF信號也是通過數(shù)據(jù)信號線發(fā)送的,所以軟件流控在傳輸二進制數(shù)據(jù)時可能會出現(xiàn)錯誤,因為可能我們發(fā)送的數(shù)據(jù)里面也有XON/XOFF對應(yīng)的二進制值。我們可以考慮通過對XON/XOFF進行轉(zhuǎn)義來嘗試解決該問題。
審核編輯黃宇
-
數(shù)據(jù)
+關(guān)注
關(guān)注
8文章
7139瀏覽量
89578 -
RS232
+關(guān)注
關(guān)注
13文章
749瀏覽量
94575
發(fā)布評論請先 登錄
相關(guān)推薦
評論