EIA RS-232-C標準
EIA RS-232-C是由美國電子工業(yè)協(xié)會EIA制定的串行通信物理接口標準。最初是遠程數(shù)據(jù)通信時,為連接數(shù)據(jù)終端設備DTE(Data Terminal Equipment,數(shù)據(jù)通信的信源,如計算機)和數(shù)據(jù)通信裝置DCE(Data Circuit-terminal Equipment、數(shù)據(jù)通信中面向用戶的設備,如調制解調器)而制定的。它規(guī)定以25芯或9芯的D型插針連接器與外部相連。這個連接器上的基本信號定義如表8-1所示。
表8-1 RS-232-C標準接口信號
信號符號 |
25芯引腳 |
9芯引腳 |
方向 |
信號描述 |
TXD |
2 |
3 |
O |
發(fā)送數(shù)據(jù) |
RXD |
3 |
2 |
I |
接收數(shù)據(jù) |
RTS |
4 |
7 |
O |
請求傳送 |
CTS |
5 |
8 |
I |
允許傳送 |
DSR |
6 |
6 |
I |
數(shù)據(jù)通信裝置(DCE)就緒 |
GND |
7 |
5 |
|
信號地 |
DCD |
8 |
1 |
I |
數(shù)據(jù)載波檢測 |
DTR |
20 |
4 |
O |
數(shù)據(jù)終端設備(DTE)就緒 |
RI |
22 |
9 |
I |
振鈴指示 |
通信將在數(shù)據(jù)終端設備(DTE)和數(shù)據(jù)通信裝置(DCE)之間進行,信號線中的RTS、CTS、DSR和DTR為控制信號,其含義如下:
RTS(請求傳送):當數(shù)據(jù)終端設備(DTE)需向數(shù)據(jù)通信裝置(DCE)發(fā)送數(shù)據(jù)時,該信號有效,請求數(shù)據(jù)通信裝置接收數(shù)據(jù)。
CTS(允許傳送):如數(shù)據(jù)通信裝置(DCE)處于可接收數(shù)據(jù)的狀態(tài),此信號有效,允許數(shù)據(jù)終端設備(DTE)發(fā)送數(shù)據(jù)。反之,如數(shù)據(jù)通信裝置(DCE)處于不可接收數(shù)據(jù)的狀態(tài),此信號無效,不允許數(shù)據(jù)終端設備(DTE)發(fā)送數(shù)據(jù)。
DSR(數(shù)據(jù)設備就緒)、DCD(數(shù)據(jù)載波檢測):當數(shù)據(jù)通信裝置(DCE)需向數(shù)據(jù)終端設備(DTE)發(fā)送數(shù)據(jù)時,該信號有效,請求數(shù)據(jù)終端設備(DTE)接收數(shù)據(jù)。
DTR(數(shù)據(jù)終端就緒):如數(shù)據(jù)終端設備(DTE)處于可接收數(shù)據(jù)的狀態(tài),此信號有效,允許數(shù)據(jù)通信裝置(DCE)發(fā)送數(shù)據(jù)。反之,如數(shù)據(jù)終端設備(DTE)處于不可接收數(shù)據(jù)的狀態(tài),此信號無效,不允許數(shù)據(jù)通信裝置(DCE)發(fā)送數(shù)據(jù)。
因而采用RS-232標準的通信,除了連接發(fā)送和接收的數(shù)據(jù)線外還需連接控制信號。圖8-3為采用RS-232標準進行通信常用的連接方法。
圖8-3 RS-232標準通信常用的連接方法
為實現(xiàn)數(shù)據(jù)的傳輸,A端與B端的發(fā)送和接收的數(shù)據(jù)線相互連接,A端的請求傳送(RTS)與B端的數(shù)據(jù)通信裝置就緒、數(shù)據(jù)載波檢測(DSR、DCD)相連,B端的數(shù)據(jù)終端設備就緒(DTR)信號與A端的允許傳送(CTS)相連。在A端需發(fā)送數(shù)據(jù)時,該端的請求傳送(RTS)輸出有效,此信號連接到B端的數(shù)據(jù)設備就緒、數(shù)據(jù)載波檢測(DSR、DCD)端,如B端允許接收信號,將使數(shù)據(jù)終端設備就緒(DTR)信號有效,此信號輸入到A端的允許傳送(CTS),A端接收到此信號后即發(fā)送數(shù)據(jù)。當B端需發(fā)送數(shù)據(jù)時,將B端的RTS信號置為有效,因而控制A端的DSR,如A端可接收數(shù)據(jù),將置DTR有效,控制B端正確地發(fā)送數(shù)據(jù)。
在最簡單的情況下,主系統(tǒng)和終端之間僅連接發(fā)送、接收的數(shù)據(jù)線和地線,而控制信號由各自自行產(chǎn)生。其連接方法如圖8-4所示。
圖8-4 RS-232的簡化連接方式
在這樣的連接方法中,請求傳送(RTS)信號的輸出連接到本機的允許傳送(CTS)端,數(shù)據(jù)終端設備就緒(DTR)的輸出連接到本機的數(shù)據(jù)通信裝置就緒(DSR)、數(shù)據(jù)載波檢測端(DCD)。當需發(fā)送數(shù)據(jù)時,控制RTS信號有效,此信號直接連接到CTS,此時由于RTS信號有效,因而可將數(shù)據(jù)送出。同樣應控制DTR信號有效,此信號直接連接到DSR、DCD,在需接收數(shù)據(jù)時,由于所需的DSR信號有效,可接收數(shù)據(jù)。采用這樣的方法可減少通信兩端的連線,但必須協(xié)調收發(fā)雙方的通信軟件,避免在數(shù)據(jù)發(fā)送時,接收方未能及時地接收數(shù)據(jù)。
采用RS-232標準除了規(guī)定信號與連接器外,還規(guī)定了信號的電氣特性。 其發(fā)送端與接收端的電氣特性規(guī)定如下:
發(fā)送端:輸出最大電壓小于 25V(絕對值),最大短路輸出電流為500mA,輸出阻抗大于 300Ω,邏輯"1"為- 25V~-3V,邏輯"0"為 +3~+25V。
接收端:輸入阻抗為 3~7KΩ,最大負載電容2500PF,當信號小于-3V時為邏輯"1",信號大于+3V時為邏輯"0"。
為此在進行信號傳輸時,必須將信號的TTL電平與RS-232電平進行轉換,在發(fā)送時,將TTL電平轉換為RS-232電平,而在接收時將RS-232電平轉換為TTL電平。
能滿足上述要求將信號由TTL電平與RS-232電平互換的常用器件有MC1488和 MC1489。MC1488為發(fā)送器,它將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端為發(fā)送的TTL/CMOS電平的輸入,TOUT端為發(fā)送的RS-232電平輸出,與此對應,RIN為接收的RS-232電平的輸入,ROUT端為接收的TTL/CMOS電平輸出。在一個芯片中可包含不同數(shù)量的電平轉換電路,如圖8-5所示的MAXIM公司的MAX232提供了兩個發(fā)送電平轉換電路和兩個接收電平轉換電路。
圖8-5 RS-232電平轉換電路
RS232中RTS和CTS的作用
問:
以前挺明白的,今天一下子覺得以前的理解都不對了,以下三種解釋哪個對呢?
解釋一:
RTS:終端我已經(jīng)準備就緒,有數(shù)據(jù)就發(fā)過來吧
CTS:來了,接招
解釋二:
RTS:終端我準備發(fā)數(shù)據(jù)給你,快用CTS應答,準備好沒?
CTS:好了,來吧
解釋三:
CTS:主機,我有數(shù)據(jù),請求接收
RTS:我是主機,就緒,請求發(fā)送。
我今天弄了個SIM100模塊,我將RTS設置無效之后,凡是要發(fā)往主機的數(shù)據(jù)都沒有發(fā)過來(包括主動數(shù)據(jù)RING),指令和指令返回結果都沒有返回,都緩存在模塊之中,等我將RTS設置有效后,緩存的數(shù)據(jù)全發(fā)來了,包括一大堆指令的執(zhí)行結果,由此,我覺得上面的“解釋一”應該正確,而“解釋二”應該是錯的,但“解釋三”是否正確呢?就是說CTS和RTS哪個是發(fā)起者呢?
答:
一是錯的
二是RS232標準
三是MODEM的硬件流控
SIMCOM公司的解釋完全正確
很久很久以前,計算機還沒有出現(xiàn),那時就已經(jīng)存在了(計算機)史前的串口設備(電傳打字機,工控測量設備,通信調制解調器),為了連接這些串口,EIA制定了RS232標準,采用DB25接插件,支持同步和異步串口,D型的接口可以有效防止插反。標準化給使用帶來了便利。
時光荏苒,個人計算機出現(xiàn)了,這些已有的串口設備毫無疑問地成為了最初的外設,自然而然地RS232標準被個人計算機采納。但是設備制造商傾向于體積更小,成本更低的接口,因此,將DB25中未使用的和支持同步模式的引腳去掉,形成DB9。最初的情況相當混亂,因為DB9只定義了信號,卻沒有指定信號和引腳的對應關系,各個制造商只能自行定義。幸運的是,IBM的PC成了工業(yè)標準,DB9逐漸統(tǒng)一到IBM的定義上來。
DB9只有9根線,遵循RS232標準。定義如下:
DTR,DSR------DTE設備準備好/DCE設備準備好。主流控信號。
RTS,CTS------請求發(fā)送/清除發(fā)送。用于半雙工時,收發(fā)切換。屬于輔助流控信號。半雙工的意思是說,發(fā)的時候不收,收的時候不發(fā)。那么怎么區(qū)分收發(fā)呢?缺省時是DCE向DTE發(fā)送數(shù)據(jù),當DTE決定向DCE發(fā)數(shù)據(jù)時,先有效RTS,表示DTE希望向DCE發(fā)送,一般DCE不能馬上轉換收發(fā)狀態(tài),DTE就通過監(jiān)測CTS是否有效來判斷可否發(fā)送,這樣避免了DTE在DCE未準備好時發(fā)送所導致的數(shù)據(jù)丟失。
全雙工時,這兩個信號一直有效即可。
隨著計算機的日益普及,很多非RS232的串口也要接入PC機,如果為每一種新出現(xiàn)的串口都增加一個新的I/O口顯然不現(xiàn)實,因為PC后面板位置有限,因此,將RS232串口和非RS232串口都通過RS232口接入是最佳方案。UART的U(通用)指的就是這個意思。早期ROM BIOS和DOS里的通信軟件都是為RS232設計的,在沒有檢測到DCD有效前不會發(fā)送數(shù)據(jù),因此,就連發(fā)送一個字符這樣樸素的應用也要給出DCD、 DTR、DSR等控制信號。因此,串口接頭上要將一些控制線短接,或者干脆繞過系統(tǒng)軟件自己寫通信程序。
到此,UART的涵義就總結為:通用的 異步 (串行) I/O口。
就在UART冠以通用二字,準備一統(tǒng)江湖的時候,制造商們不滿于它的速度、體積和靈活性(軟件可配置),推出了USB和1394串口。目前,筆記本上的 UART串口有被取消的趨勢,因而有網(wǎng)友發(fā)出了“沒有串口,吾誰與歸”的慨嘆,古今多少事,都付笑談中,USB取代UART是后話,暫且不表。
話說自從賀氏(Hayes)公司推出了聰明貓(SmartModem),他們制定的MODEM接口就成了業(yè)界標準,自此以后,所有公司制造的兼容貓都符合賀氏標準(連AT指令也兼容,大家一起抄他唄)。
細觀賀氏制定的MODEM串口,與RS232標準大不相同。DTR在整個通信過程中一直保持有效,DSR在MODEM上電后/可以撥號前有效(取決于軟件對DSR的理解),在通信過程的任意時刻,只要DTR/DSR無效,通信過程立即終止。在某種意義上,這也可以算是流控,但肯定不是RS232所指的那種主流控。如果拘泥于RS232,你是不會理解DTR和DSR的用途的。
賀氏不但改了DTR和DSR,竟然連RTS和CTS的涵義也重新定義了。因此,RTS和CTS已經(jīng)不具有最開始的意義了。從字面理解RTS和CTS,是用于半雙工通信的,當DTE想從收模式改為發(fā)模式時,就有效RTS請求發(fā)送,DCE收到RTS請求后不能立即完成轉換,需要一段時間,然后有效CTS通知 DTE:DCE已經(jīng)轉到發(fā)模式,DTE可以開始發(fā)送了。在全雙工時,RTS和CTS都缺省置為有效即可。然而,在賀氏的MODEM串口定義中,RTS和 CTS用于硬件流控,和什么勞什子的全雙工/半雙工一點關系也沒有。
注意,硬件流控是靠軟件實現(xiàn)的,之所以強調“硬件”二字,僅僅是因為硬件流控提供了用于流量情況指示的硬件連線,并不是說,你只要把線連上,硬件就能自己流控。如果軟件不支持,光連上RTS和CTS是沒有用的。
RTS和CTS硬件流控的軟件算法如下:(RTS有效表示PC機可以收,CTS有效表示MODEM可以收,這兩個信號互相獨立,分別指示一個方向的流量情況。
========== 我是分隔線 ==========
以下是我的幾句胡言亂語
最近在搗鼓一個GSM模塊,正好也要用到這東西,就baidu了一把,可以幫助我理解Datasheet的內容??戳松厦娴膬热荩也恢栏魑幻靼琢藥追?,如果覺得都明白了,就不用看我廢話了。
還是先引用一些文字,來自Telit公司GM862 QUAD/PY的數(shù)據(jù)手冊
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是數(shù)據(jù)發(fā)送的主動方,DCE是數(shù)據(jù)的接受方。
CTS是讓DTE明白的,也就是說DCE需要把自己的CTS給DTE看,讓他知道DEC已經(jīng)準備好接受數(shù)據(jù)了。
RTS是DTE給DCE看的,告訴DCE,DTE有數(shù)據(jù)要發(fā)。