串口流控 軟件流控與硬件流控


串口流控 軟件流控與硬件流控

  在串行通訊處理中,常常看到rts/cts和xon /xoff這兩個選項,這就是兩個流控制的選項,目前流控制主要應用於調制解調器的數據通訊中。那么,流控制在串行通訊中有何作用,在編制串行通訊程序怎樣應用呢?下面我們就談談這個問題。

  1.流控制在串行通訊中的作用

  這里講到的“流”,當然指的是數據流。數據在兩個串口之間傳輸時,常常會出現丟失數據的現象,或者兩台計算機的處理速度不同,如台式機與單片機之間的通訊,接收端數據緩沖區已滿,則此時繼續發送來的數據就會丟失。現在我們在網絡上通過modem進行數據傳輸,這個問題就尤為突出。流控制能解決這個問題,當接收端數據處理不過來時,就發出“不再接收”的信號,發送端就停止發送,直到收到“可以繼續發送”的信號再發送數據。因此流控制可以控制數據傳輸的進程,防止數據的丟失。 PC機中常用的兩種流控制是硬件流控制(包括rts/cts、dtr/cts等)軟件流控制xon/xoff(繼續/停止),下面分別說明。

  2.硬件流控制

  硬件流控制常用的有rts/cts流控制和dtr/dsr(數據終端就緒/數據設置就緒)流控制。硬件流控制必須將相應的電纜線連上,用rts/cts(請求發送/清除發送)流控制時,應將通訊兩端的rts、cts線對應相連,數據終端設備(如計算機)使用rts來起始調制解調器或其它數據通訊設備的數據流,而數據通訊設備(如調制解調器)則用cts來起動和暫停來自計算機的數據流。這種硬件握手方式的過程為:

  我們在編程時根據接收端緩沖區大小設置一個高位標志(可為緩沖區大小的75%)和一個低位標志(可為緩沖區大小的25%),當緩沖區內數據量達到高位時,我們在接收端將cts線置低電平(送邏輯0),當發送端的程序檢測到cts為低后,就停止發送數據,直到接收端緩沖區的數據量低於低位而將cts置高電平。rts則用來標明接收設備有沒有准備好接收數據。常用的流控制還有還有dtr/dsr(數據終端就緒/數據設置就緒)。

  3.軟件流控制

  由於電纜線的限制,我們在普通的控制通訊中一般不用硬件流控制,而用軟件流控制。一般通過xon/xoff來實現軟件流控制。常用方法是:當接收端的輸入緩沖區內數據量超過設定的高位時,就向數據發送端發出xoff字符(十進制的19或control-s,設備編程說明書應該有詳細闡述),發送端收到 xoff字符后就立即停止發送數據;當接收端的輸入緩沖區內數據量低於設定的低位時,就向數據發送端發出xon字符(十進制的17或control- q),發送端收到xon字符后就立即開始發送數據。一般可以從設備配套源程序中找到發送的是什么字符。

  應該注意,若傳輸的是二進制數據,標志字符也有可能在數據流中出現而引起誤操作,這是軟件流控制的缺陷,而硬件流控制不會有這個問題。

  下面是來自另外一篇博客對串口流控的理解,它也是轉載的,但是我沒有找到原文,所以就把他的地址貼上來了

http://blog.csdn.net/bianhonglei/article/details/8525971

  串口流控:

  用A和B表示兩個通過串口互相通訊的設備,A要發數據給B,用硬件的RTS/CTS作為硬件流控制機制。

  A要發送數據,即Request To Send “請求發送”(數據),B看到RTS有效了,決定,如果自己要做准備工作,就設置CTS無效,如果本身准備好了,就設置CTS,Clear To Send,表示對於你的Send發送(數據)來說,我已經Clear(忙清了)。所以A看到CTS有效就可以發送數據了。然后接下來的每一個從A發送到B的字節數據都是這么個過程。中間有可能遇到說,B的buffer full 緩存滿了,所以要設置CTS無效,A發現后,就停止發送數據,繼續檢測CTS直到有效,才繼續發送數據。正常數據發送完成后,A就把最開始設置為有效的RTS這個標示清除掉,即設置RTS無效,表示數據傳完了。 由此,整個A發送數據到B的過程就Over了。

 

轉自:http://wenku.baidu.com/view/1fddeb262f60ddccda38a097.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM