1. 程式人生 > >串列埠流控 軟體流控與硬體流控

串列埠流控 軟體流控與硬體流控

本文主要轉載自百度文庫http://wenku.baidu.com/view/1fddeb262f60ddccda38a097.html

在序列通訊處理中,常常看到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 在序列通訊處理中,常常看到rts/cts和xon /xoff這兩個選項,這就是兩個流控制的選項,目前流控制主要應用於調變解調器的資料通

Arduino通過串列透傳ESP 13板java程式互動

Arduino通過串列埠透傳ESP13板與java程式互動 這個程式最基本的想法是用java把Arduino抽象出來,忙活了好幾天,雖然沒有達到最後的想法,但是學到了很多。 Main.java public class Main { pu

STM32串列接收不定長資料原理源程式

今天說一下STM32微控制器的接收不定長度位元組資料的方法。由於STM32微控制器帶IDLE中斷,所以利用這個中斷,可以接收不定長位元組的資料,由於STM32屬於ARM微控制器,所以這篇文章的方法也適合其他的ARM微控制器。IDLE中斷什麼時候發生?IDLE就是串列埠收到一

GD32或者STM32的串列燒寫軟體無法串列燒寫程式

最近在做M3系列的板子,由於在編譯程式時,HEX檔案太大,用st-link v2燒寫進去後,再次燒寫程式就無法識別,或者目標晶片非所選晶片,於是想用串列埠燒寫,我就用我平時除錯linux的RS232的

gpio軟體模擬IIC硬體IIC驅動有什麼區別

最近做一個專案,涉及到晶片級的通訊方面的知識(IIC和SPI方面的通訊)。但是方案選擇的時候,發現自身對模擬IO口通訊還是韌體驅動通訊一直沒有一個很全面的認識,所以就在此記錄一下。 所謂硬體I2C對應晶片上的I2C外設,有相應I2C驅動電路,其所使用的I2C管

linux串列收發資料不對(由於等設定不對導致)

最近一個專案使用了嵌入式linxu串列埠通訊,由於通訊使用的是2進位制資料,經常出現通訊校驗失敗,資料幀大小沒問題,就是校驗出錯 c_iflag引數表 鍵 值 說 明 IGNBRK 忽略BREAK鍵輸入 BRKINT 如果設定了IGNBRK,BREAK鍵輸入

shell變量基本語句

shell語句 運算符、參數傳遞等 一環境變量 1 概述 bash shell 使用一種稱為環境變量的特性來存儲有關shell會話和工作環境的信息,該特性還允許假數據存儲到內存中,以便於在shell運行程序或腳本訪問他們,這是一種便捷的、用於存儲持久型數據的方式,這些數據可以標識用戶賬號、系統、she

linux串列程式設計(控制終端)

流控制 資料在兩個串列埠之間傳輸時,常常會出現丟失資料的現象,或者兩臺計算機的處理速度不同,如桌上型電腦與微控制器之間的通訊,接收端資料緩衝區已滿,則此時繼續傳送來的資料就會丟失。流控制能解決這個問題,當接收端資料處理不過來時,就發出“不再接收”的訊號,傳送端就停止傳送,直到收到“可以繼續傳送”

MSP430GPRS模組的串列通訊硬體控制

我選用的GPRS模組是西門子的MC52I,由於降低功耗要用到該模組的休眠模式(AT+CFUN=設定具體的休眠模式)。而休眠模式必須先使能RTS/CTS流控制(AT\Q3設定)。MC52I的RTS和CTS引腳直接連在MSP430F149的I/O口上,具體怎麼實現流控制還不太明白,請大家多多指教 經過自己研究終於

Qt中Qchart外掛實現PMW3901迷你光模組上位機(串列通訊)

文章目錄 Qt中Qchart外掛實現PMW3901迷你光流模組上位機 光流計介紹 上位機 完整工程[猛戳這兒](https://github.com/LiangtaoZhong/PMW3901-monitor)。

串列通訊(檔案傳輸)控制

出處:http://blog.sina.com.cn/s/blog_6c617ee30100u943.html #include <afx.h>//send.cpp #include <iostream> #include <window

重定向C庫中stdio檔案中的printf()函式,檔案-->串列USART1

1、printf()函式: 我們以前在VC6.0中程式設計時,包含include<stdio.h>標頭檔案之後,呼叫printf()函式後可以向控制檯傳輸(列印)一連串字元等。 若要在STM32上也想用printf()函式向指定的裝置上傳輸(列印)一串資料的話,

CDMA、GSM模組串列RTS和CTS硬體控制小結 【轉】

    後來隨著串列埠裝置的越來越多,其中更多的裝置是屬於非RS232標準的,即不完全符合RS232各腳定義的裝置。這時候為了適應這種變化,計算機廠商便把RS232標準轉換為UART標準,U即為通用的意思。原來9根線都有明確定義的RS232匯流排變成了即可以接受RS232標準又可以接受不符合RS232標準的

Qt--串列接收資料,自定義碼

串列埠通訊,傳送的資料沒有打包成固定碼流,所有需要對接收的資料加以判斷。 解決串列埠接收不完整的方法有3種: 一:判斷接收的資料,是不是自己定義的字元格式。 二:判斷接收的資料包大小,是不是自己定義的資料包的大小。 三:以多執行緒的方式,執行緒一直接收,資料獨立處理,此方法

串列控制(flow control)

原文:http://blog.csdn.net/free2011/article/details/5999325,如有侵權,請及時告知,將第一時間處理。 我們在序列通訊處理中,常常看到RTS/CTS和XON/XOFF這兩個選項,這就是兩個流控制的選項,目前流控制主要應用

關於串列硬體控制

我們在序列通訊處理中,常常看到rts/cts和xon /xoff這兩個選項,這就是兩個流控制的選項,目前流控制主要應用於調變解調器的資料通訊中。 這裡講到的“流”,當然指的是資料流。 硬體流控制常用的有rts/cts流控制和dtr/dsr(資料終端就緒/資料設定就緒)流

Eric6pyqt5學習筆記13 【實戰4 打造區域網遠軟體

已經去集訓營安心準備考研了,這兩天回校參加夏令營,順便把之前3天課設做的一個小軟體寫個部落格分享下~ 不知道有沒有也是今年考研的研友呢,祝大家都能考上理想的研究生!!! 遠控軟體思路 遠控軟體基本功能我是這樣劃分的: 命令執行。由此拓展而來的控制關

串列資料)協議封裝,拆包解析

功能:對資料進行封包,加入校驗,簡單加密2.主要解析及返回資料 使用說明:1.主函式呼叫初始化函式wifi_buff_init()2.串列埠中斷呼叫add_message_queue()3.主函式迴圈處理analyze_queue()解釋說明:此協議固定協議長度為12加密碼

抖音群的引原理?如何做到全自動引?

內容 做到 信息 軟件 微信朋友圈 批量管理 png 評論 獲取 前幾年我們都在刷微博和微信朋友圈,現在很多人都被一款叫抖音的小軟件所吸引,每當空閑時都會拿著手機看抖音小視頻,偶爾也會模仿別人的創意來制作自己的抖音視頻,引起別人的評論和點贊。不過對於做網絡推廣的企業把抖音當

JS中的事件監聽事件

pan 交互 ack 其他 獲得 發生 listen 監聽器 pre 事件監聽:   使用監聽器(eventListener)來預定事件,在傳統軟件工程中稱成為觀察者模式   執行某種操作時(特定的交互瞬間),會產生對象,對象會沿事件流的方向傳播。 事件流:   事件流有