說說流量控制(RTS/CTS/DTR/DSR 你都明白了嗎?)【轉】

來源:互聯網
上載者:User

標籤:

轉自:http://bbs.ednchina.com/BLOG_ARTICLE_129041.HTM

以前寫的博文,轉過來

 

==============

 

先引用一篇網文,作者不詳,因幾個地方都說自己是原創,我昏了,不知道是誰原創的  

 

RS232中RTS和CTS的作用 
問:
以前挺明白的,今天一下子覺得以前的理解都不對了,以下三種解釋哪個對呢?

 

解釋一:
RTS:終端我已經準備就緒,有資料就發過來吧
CTS:來了,接招

 

解釋二:
RTS:終端我準備發資料給你,快用CTS應答,準備好沒?
CTS:好了,來吧

 

解釋三:
CTS:主機,我有資料,請求接收
RTS:我是主機,就緒,請求發送。

 

我今天弄了個SIM100模組,我將RTS設定無效之後,凡是要發往主機的資料都沒有發過來(包括主動資料RING),指令和指令返回結果都沒有返回,都緩衝在模組之中,等我將RTS設定有效後,緩衝的資料全發來了,包括一大堆指令的執行結果,由此,我覺得上面的“解釋一”應該正確,而“解釋二”應該是錯的,但“解釋三”是否正確呢?就是說CTS和RTS哪個是發起者呢?

 

答:
一是錯的
二是RS232標準
三是MODEM的硬體流控
SIMCOM公司的解釋完全正確

 

    很久很久以前,電腦還沒有出現,那時就已經存在了(電腦)史前的串口裝置(電傳打字機,工控測量裝置,通訊數據機),為了串連這些串口,EIA制定了RS232標準,採用DB25接外掛程式,支援同步和非同步串口,D型的介面可以有效防止插反。標準化給使用帶來了便利。
    時光荏苒,個人電腦出現了,這些已有的串口裝置毫無疑問地成為了最初的外設,自然而然地RS232標準被個人電腦採納。但是裝置製造商傾向於體積更小,成本更低的介面,因此,將DB25中未使用的和支援同步模式的引腳去掉,形成DB9。最初的情況相當混亂,因為DB9隻定義了訊號,卻沒有指定訊號和引腳的對應關係,各個製造商只能自行定義。幸運的是,IBM的PC成了工業標準,DB9逐漸統一到IBM的定義上來。
    DB9隻有9根線,遵循RS232標準。定義如下:
    DTR,DSR------DTE裝置準備好/DCE裝置準備好。主流控訊號。
    RTS,CTS------請求發送/清除發送。用於半雙工時,收發切換。屬於輔助流控訊號。半雙工的意思是說,發的時候不收,收的時候不發。那麼怎麼區分收發呢?預設時是DCE向DTE發送資料,當DTE決定向DCE發資料時,先有效RTS,表示DTE希望向DCE發送,一般DCE不能馬上轉換收髮狀態,DTE就通過監測CTS是否有效來判斷可否發送,這樣避免了DTE在DCE未準備好時發送所導致的資料丟失。
    全雙工系統時,這兩個訊號一直有效即可。
    
    隨著電腦的日益普及,很多非RS232的串口也要接入PC機,如果為每一種新出現的串口都增加一個新的I/O口顯然不現實,因為PC後面板位置有限,因此,將RS232串口和非RS232串口都通過RS232口接入是最佳方案。UART的U(通用)指的就是這個意思。早期ROM BIOS和DOS裡的通訊軟體都是為RS232設計的,在沒有檢測到DCD有效前不會發送資料,因此,就連發送一個字元這樣樸素的應用也要給出DCD、DTR、DSR等控制訊號。因此,串口接頭上要將一些控制線短接,或者乾脆繞過系統軟體自己寫通訊程式。
    到此,UART的涵義就總結為:通用的 非同步 (串列) I/O口。
    就在UART冠以通用二字,準備一統江湖的時候,製造商們不滿於它的速度、體積和靈活性(軟體可配置),推出了USB和1394串口。目前,筆記本上的UART串口有被取消的趨勢,因而有網友發出了“沒有串口,吾誰與歸”的慨歎,古今多少事,都付笑談中,USB取代UART是後話,暫且不表。
    話說自從賀氏(Hayes)公司推出了聰明貓(SmartModem),他們制定的MODEM介面就成了業界標準,自此以後,所有公司製造的相容貓都符合賀氏標準(連AT指令也相容,大家一起抄他唄)。
    細觀賀氏制定的MODEM串口,與RS232標準大不相同。DTR在整個通訊過程中一直保持有效,DSR在MODEM上電後/可以撥號前有效(取決於軟體對DSR的理解),在通訊過程的任意時刻,只要DTR/DSR無效,通訊過程立即終止。在某種意義上,這也可以算是流控,但肯定不是RS232所指的那種主流控。如果拘泥於RS232,你是不會理解DTR和DSR的用途的。
    賀氏不但改了DTR和DSR,竟然連RTS和CTS的涵義也重新定義了。因此,RTS和CTS已經不具有最開始的意義了。從字面理解RTS和CTS,是用於半雙工通訊的,當DTE想從收模式改為發模式時,就有效RTS請求發送,DCE收到RTS請求後不能立即完成轉換,需要一段時間,然後有效CTS通知DTE:DCE已經轉到發模式,DTE可以開始發送了。在全雙工系統時,RTS和CTS都預設置為有效即可。然而,在賀氏的MODEM串口定義中,RTS和CTS用於硬體流控,和什麼勞什子的全雙工系統/半雙工一點關係也沒有。
    注意,硬體流控是靠軟體實現的,之所以強調“硬體”二字,僅僅是因為硬體流控提供了用於流量情況指示的硬體連線,並不是說,你只要把線連上,硬體就能自己流控。如果軟體不支援,光連上RTS和CTS是沒有用的。
    RTS和CTS硬體流控的軟體演算法如下:(RTS有效表示PC機可以收,CTS有效表示MODEM可以收,這兩個訊號互相獨立,分別指示一個方向的流量情況。

 

========== 我是分隔線 ==========

 

以下是我的幾句胡言亂語

 

最近在搗鼓一個GSM模組,正好也要用到這東西,就baidu了一把,可以協助我理解Datasheet的內容。看了上面的內容,我不知道各位明白了幾分,如果覺得都明白了,就不用看我廢話了。

 

還是先引用一些文字,來自Telit公司GM862 QUAD/PY的資料手冊
Pin Signal    I/O  Function
20 C103/TXD I Serial data input (TXD) from DTE
29 C106/CTS O Output for Clear to send signal (CTS) to DTE
33 C107/DSR O Output for Data set ready signal (DSR) to DTE
37 C104/RXD O Serial data output to DTE
43 C108/DTR I Input for Data terminal ready signal (DTR) from DTE
45 C105/RTS I Input for Request to send signal (RTS) from DTE

 

注意上面各個功能的I/O的方向,看到這些縮寫的全稱,結合訊號流向,是不是更容易理解呢  

 

DTE是資料發送的主動方,DCE是資料的接受方。

 

CTS是讓DTE明白的,也就是說DCE需要把自己的CTS給DTE看,讓他知道DEC已經準備好接受資料了。
RTS是DTE給DCE看的,告訴DCE,DTE有資料要發。

 

好啦,這個話題就到這裡~~  還沒看懂的同學繼續.....

說說流量控制(RTS/CTS/DTR/DSR 你都明白了嗎?)【轉】

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.