RS232及RTS和CTS

EIA RS-232-C標準算法

EIA RS-232-C是由美國電子工業協會EIA制定的串行通訊物理接口標準。最初是遠程數據通訊時,爲鏈接數據終端設備DTE(Data Terminal Equipment,數據通訊的信源,如計算機)和數據通訊裝置DCE(Data Circuit-terminal Equipment、數據通訊中面向用戶的設備,如調制解調器)而制定的。它規定以25芯或9芯的D型插針鏈接器與外部相連。這個鏈接器上的基本信號定義如表8-1所示。緩存

表8-1 RS-232-C標準接口信號異步

 

信號符號ui

25芯引腳spa

9芯引腳插件

方向設計

信號描述接口

TXDip

2ci

3

O

發送數據

RXD

3

2

I

接收數據

RTS

4

7

O

請求傳送

CTS

5

8

I

容許傳送

DSR

6

6

I

數據通訊裝置(DCE)就緒

GND

7

5

 

信號地

DCD

8

1

I

數據載波檢測

DTR

20

4

O

數據終端設備(DTE)就緒

RI

22

9

I

振鈴指示

 

通訊將在數據終端設備(DTE)和數據通訊裝置(DCE)之間進行,信號線中的RTS、CTS、DSR和DTR爲控制信號,其含義以下:

RTS(請求傳送):當數據終端設備(DTE)需向數據通訊裝置(DCE)發送數據時,該信號有效,請求數據通訊裝置接收數據。

CTS(容許傳送):如數據通訊裝置(DCE)處於可接收數據的狀態,此信號有效,容許數據終端設備(DTE)發送數據。反之,如數據通訊裝置(DCE)處於不可接收數據的狀態,此信號無效,不容許數據終端設備(DTE)發送數據。

DSR(數據設備就緒)、DCD(數據載波檢測):當數據通訊裝置(DCE)需向數據終端設備(DTE)發送數據時,該信號有效,請求數據終端設備(DTE)接收數據。

DTR(數據終端就緒):如數據終端設備(DTE)處於可接收數據的狀態,此信號有效,容許數據通訊裝置(DCE)發送數據。反之,如數據終端設備(DTE)處於不可接收數據的狀態,此信號無效,不容許數據通訊裝置(DCE)發送數據。

於是採用RS-232標準的通訊,除了鏈接發送和接收的數據線外還需鏈接控制信號。圖8-3爲採用RS-232標準進行通訊經常使用的鏈接方法。

RS232及RTS和CTS - gene_lu - 清風

圖8-3 RS-232標準通訊經常使用的鏈接方法

爲實現數據的傳輸,A端與B端的發送和接收的數據線相互鏈接,A端的請求傳送(RTS)與B端的數據通訊裝置就緒、數據載波檢測(DSR、DCD)相連,B端的數據終端設備就緒(DTR)信號與A端的容許傳送(CTS)相連。在A端需發送數據時,該端的請求傳送(RTS)輸出有效,此信號鏈接到B端的數據設備就緒、數據載波檢測(DSR、DCD)端,如B端容許接收信號,將使數據終端設備就緒(DTR)信號有效,此信號輸入到A端的容許傳送(CTS),A端接收到此信號後即發送數據。當B端需發送數據時,將B端的RTS信號置爲有效,於是控制A端的DSR,如A端可接收數據,將置DTR有效,控制B端正確地發送數據。

在最簡單的狀況下,主系統和終端之間僅鏈接發送、接收的數據線和地線,而控制信號由各自自行產生。其鏈接方法如圖8-4所示。

RS232及RTS和CTS - gene_lu - 清風

圖8-4 RS-232的簡化鏈接方式

在這樣的鏈接方法中,請求傳送(RTS)信號的輸出鏈接到本機的容許傳送(CTS)端,數據終端設備就緒(DTR)的輸出鏈接到本機的數據通訊裝置就緒(DSR)、數據載波檢測端(DCD)。當需發送數據時,控制RTS信號有效,此信號直接鏈接到CTS,此時因爲RTS信號有效,於是可將數據送出。一樣應控制DTR信號有效,此信號直接鏈接到DSR、DCD,在需接收數據時,因爲所需的DSR信號有效,可接收數據。採用這樣的方法可減小通訊兩端的連線,但必須協調收發雙方的通訊軟件,避免在數據發送時,接收方未能及時地接收數據。

採用RS-232標準除了規定信號與鏈接器外,還規定了信號的電氣特性。 其發送端與接收端的電氣特性規定以下:

發送端:輸出最大電壓小於 25V(絕對值),最大短路輸出電流爲500mA,輸出阻抗大於 300Ω,邏輯"1"爲- 25V~-3V,邏輯"0"爲 +3~+25V。

接收端:輸入阻抗爲 3~7KΩ,最大負載電容2500PF,當信號小於-3V時爲邏輯"1",信號大於+3V時爲邏輯"0"。

爲此在進行信號傳輸時,必須將信號的TTL電平與RS-232電平進行轉換,在發送時,將TTL電平轉換爲RS-232電平,而在接收時將RS-232電平轉換爲TTL電平。

能知足上述要求將信號由TTL電平與RS-232電平互換的經常使用器件有MC1488和 MC1489。MC1488爲發送器,它將TTL電平轉換爲RS-232電平,採用±12V電源,當輸入爲 TTL"1"電平時,輸出爲-12V的信號;當輸入爲 TTL"0"電平時,輸出爲+12V的信號。MC1489爲接收器,將RS-232電平轉換爲TTL電平,採用5V電源。當輸入爲-12V時,輸出TTL"1"電平;當輸入爲+12V時,輸出TTL"0"電平。

採用單電源供電的RS-232電平轉換器件利用內部的電源電壓變換器將輸入的+5V電源變換成RS-232輸出電平所需的±10V電壓。因爲器件內部的電源電壓變換器由電荷泵和倍壓電路構成,於是需外接倍壓和濾波電容,電容的容量和質量將影響此電路可否正常工做。此類電路的TIN端爲發送的TTL/CMOS電平的輸入,TOUT端爲發送的RS-232電平輸出,與此對應,RIN爲接收的RS-232電平的輸入,ROUT端爲接收的TTL/CMOS電平輸出。在一個芯片中可包含不一樣數量的電平轉換電路,如圖8-5所示的MAXIM公司的MAX232提供了兩個發送電平轉換電路和兩個接收電平轉換電路。

RS232及RTS和CTS - gene_lu - 清風

圖8-5 RS-232電平轉換電路

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有數據要發。

相關文章
相關標籤/搜索