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