串口与modem流量控制大全(1)
生活随笔
收集整理的這篇文章主要介紹了
串口与modem流量控制大全(1)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
MODEM是用戶接入互聯(lián)網(wǎng)的重要設(shè)備。雖然網(wǎng)絡(luò)干線上已經(jīng)普及寬帶光纖傳輸,但是在擁有龐大用戶群的最后一公里路段上,目前最現(xiàn)實(shí)的接入方式還是銅線連接(電話線,雙絞線、電纜)。另外,隨著無(wú)線技術(shù)的發(fā)展,采用無(wú)線接入的固定/移動(dòng)用戶也越來(lái)越多。不論是銅線連接還是無(wú)線接入,都要采用調(diào)制解調(diào)器,以便使數(shù)據(jù)信號(hào)能夠在信道內(nèi)傳輸。
? ???MODEM的對(duì)外接口是串口,這個(gè)串行I/O口用于傳輸控制信號(hào)、狀態(tài)信號(hào)、數(shù)據(jù)、AT指令及其響應(yīng)。雖然MODEM種類繁多(56K貓/GPRS/CDMA等),但對(duì)外都表現(xiàn)為一個(gè)標(biāo)準(zhǔn)的串口,只要將這個(gè)串口了解清楚,那么就可以將所有的MODEM一網(wǎng)打盡。
???
????*************
????* (1) UART?? *
????*************
????一般地,我們把這個(gè)串口叫作UART(Universal Asynchronous Receiver and Transmitter通用異步收發(fā)器)。
????其中,RT是接收和發(fā)送的英文縮寫(xiě),能收能發(fā)又是串口,說(shuō)白了就是串行I/O口的意思。
????A表示異步模式。這種模式的優(yōu)點(diǎn)是適應(yīng)性強(qiáng),對(duì)時(shí)鐘精度要求低(成本低)。每次發(fā)送字節(jié)數(shù)據(jù)前都首先發(fā)送一個(gè)開(kāi)始位同步時(shí)鐘相位,抖動(dòng)誤差不會(huì)在整個(gè)通信過(guò)程中累積,只影響單個(gè)字節(jié)的傳輸單元。
????U的意思是通用。為什么一定要冠以“通用”二字,這個(gè)定語(yǔ)到底想強(qiáng)調(diào)什么呢?
????話說(shuō)很早以前,還沒(méi)有出現(xiàn)計(jì)算機(jī)的時(shí)候,就已經(jīng)出現(xiàn)了串口設(shè)備。例如:MODEM、電傳打字機(jī)、工控設(shè)備、數(shù)傳機(jī)等等。為了方便設(shè)備互連,EIA制定了RS232標(biāo)準(zhǔn)化規(guī)范,采用DB25接口連接DTE(Data Terminal Equipment數(shù)據(jù)終端設(shè)備)和DCE(DataCommunicationsEquipment數(shù)據(jù)通信設(shè)備)。后來(lái),出現(xiàn)了個(gè)人計(jì)算機(jī)(PC機(jī)),這些已有的設(shè)備毫無(wú)疑問(wèn)地成了最初的外設(shè),為了將其接入主機(jī),制造商們自然地選擇了標(biāo)準(zhǔn)的RS232串口。在這個(gè)標(biāo)準(zhǔn)中,DB25接口支持同步和異步兩種工作模式,采用D型接插件,防止插反。這種設(shè)計(jì)兼容性好,使用方便,但是制造商們并不買帳,他們更傾向于進(jìn)一步減少接插件的大小和成本。通過(guò)刪除DB25中未使用的引腳和支持同步模式的引腳,將DB25改造成只有9根線,只支持異步模式,體積更小,成本更低的DB9。最初的狀況比較混亂,因?yàn)镈B9只給出了信號(hào)范圍,但沒(méi)有指出引腳和信號(hào)的對(duì)應(yīng)關(guān)系,而且DB9也不是RS232規(guī)范所定義的接口標(biāo)準(zhǔn),因此各個(gè)制造商只能自行定義對(duì)應(yīng)關(guān)系。后來(lái),IBM制造的PC機(jī)成了行業(yè)標(biāo)準(zhǔn),DB9的對(duì)應(yīng)關(guān)系就逐漸統(tǒng)一到了IBM的定義上,現(xiàn)如今使用的DB9就是遵守的IBM的定義。隨著時(shí)代的發(fā)展,計(jì)算機(jī)越來(lái)越普及,外設(shè)的種類也越來(lái)越多,有些非RS232的串行設(shè)備需要接入主機(jī),這就要求主機(jī)提供更多的I/O口。如果為每一種新出現(xiàn)的設(shè)備都提供一個(gè)I/O,顯然是不現(xiàn)實(shí)的,因?yàn)橹鳈C(jī)后面板位置有限,不可能容納太多的接口。幸運(yùn)的是,外部I/O口大體上主要分為兩類:并口和串口。如果復(fù)用已有的RS232串口接入非RS232的設(shè)備,那么就可以用有限的接口,接入大量的設(shè)備。一個(gè)有趣的現(xiàn)象是,早期的操作系統(tǒng)DOS和ROMBIOS提供的通信例程只支持RS232串口標(biāo)準(zhǔn),即使是實(shí)現(xiàn)簡(jiǎn)單的字節(jié)收發(fā)這種非RS232應(yīng)用,竟然也要先檢測(cè)DSR、DCD、CTS等信號(hào)是否有效,如果不滿足條件,將不會(huì)發(fā)送數(shù)據(jù)到TXD上。解決這個(gè)問(wèn)題的方法有兩種:1、旁路系統(tǒng)提供的API函數(shù),自己直接操縱硬件實(shí)現(xiàn)非RS232的操作;2、短接接頭里某些RS232控制信號(hào)線,使系統(tǒng)通信例程誤以為是RS232設(shè)備,使非RS232的設(shè)備滿足RS232規(guī)范的子集要求。
????現(xiàn)在,PC機(jī)上的串口既支持RS232應(yīng)用又支持非RS232應(yīng)用,通用串口指的就是這個(gè)意思。RS232規(guī)范對(duì)速度和距離都有約束,在碼元畸變小于4%的條件下,傳輸距離上限是15米;速率上限是19200。目前,在PC機(jī)上的串口都突破了RS232標(biāo)準(zhǔn)的限制,速度可以達(dá)到115200甚至更高。軟件上,已經(jīng)可以選項(xiàng)配置是否支持硬件流控,是否檢查DSR、DCD、RI等輸入信號(hào)。可以說(shuō),現(xiàn)在的PC串口,來(lái)源于RS232,但又不拘泥于它的限制,越來(lái)越向通用目的的串口方向發(fā)展。UART到此可以總結(jié)為:用于通用目的的異步串行I/O口。
????綜上,可以看出計(jì)算機(jī)串口發(fā)展的大致歷程:
????(個(gè) 人計(jì)算機(jī))史前出現(xiàn)原始的串口設(shè)備 --> EIA制定RS232統(tǒng)一標(biāo)準(zhǔn),DB25出現(xiàn)--> 個(gè)人計(jì)算機(jī)誕生,為引入串口,DB9出現(xiàn),軟硬件仍然遵循RS232標(biāo)準(zhǔn)-->為引入新的非RS232串口,將原來(lái)的RS232口改造成通用目的的UART,軟硬件可以不遵循RS232規(guī)范。
???
????PC機(jī)串口擁有多個(gè)名字:串口、RS232口、COM口(通信口)、異步口、UART等,他們是不同歷史時(shí)期的產(chǎn)物,一直沿用至今,讓現(xiàn)在的人們感覺(jué)有些莫名其妙。最開(kāi)始PC機(jī)接入的串行外設(shè)是RS232設(shè)備,就叫RS232口。這個(gè)設(shè)備主要是通信用的MODEM,PC上就稱為COM口。現(xiàn)在連非RS232設(shè)備也接了進(jìn)來(lái),就叫UART吧。不過(guò)新名字沒(méi)有老名字有名,有些人的習(xí)慣改不過(guò)來(lái),再說(shuō)計(jì)算機(jī)發(fā)展太快,老名字還沒(méi)消失,新名字就出現(xiàn)了,而且各有各的擁躉,約定俗成,那就這么亂著叫吧。
???
????就在UART準(zhǔn)備一統(tǒng)江湖的時(shí)候,制造商們?cè)僖淮尾粷M于它的速度、靈活性(軟件可配置)和體積,推出了USB串口和1394串口。現(xiàn)在越來(lái)越多的筆記本電腦上已經(jīng)取消了UART串口,因此有不少網(wǎng)友發(fā)出“沒(méi)有串口,吾誰(shuí)與歸”的慨嘆,歷史前進(jìn)的腳步無(wú)法阻擋,古今多少事,都付笑談中,USB取代UART是后話,暫且不表。
???
????*************************
????* (2) DB9引腳定義和表示 *
????*************************
????DB9遵循IBM定義,所有輸入輸出方向都是站在DTE角度說(shuō)的。
????1--載波檢測(cè)DCD????2--接收數(shù)據(jù)RXD????3--發(fā)送數(shù)據(jù)TXD????4--數(shù)據(jù)終端就緒DTR????5--信號(hào)地GND
????6--數(shù)據(jù)設(shè)備就緒DSR????7--請(qǐng)求發(fā)送RTS????8--清除發(fā)送CTS????9--振鈴指示RI
???
????在TXD和RXD上:(一般,驅(qū)動(dòng)器件都是反相器,用負(fù)表示"1",用正表示"0",采用負(fù)邏輯,完全可以理解。)
????????????????????邏輯0(SPACE 空號(hào)) = +3V~+15V
????????????????????邏輯1(MARK 傳號(hào))?? = -3V~-15V
???????????????????
????在RTS、CTS、DSR、DTR和DCD等控制線上:
????????????????????信號(hào)有效(接通,ON狀態(tài),正電壓,高電平)= +3V~+15V
????????????????????信號(hào)無(wú)效(斷開(kāi),OFF狀態(tài),負(fù)電壓,低電平) = -3V~-15V
????-3V到+3V之間的電平無(wú)意義,稱為死區(qū),不應(yīng)該處于這個(gè)電壓范圍。+3V以上,-3V以下的一段區(qū)間屬于過(guò)渡區(qū),盡量不要使電平落入此區(qū)間,以便使判斷更可靠,最好在+12V以上,-12V以下。一般的驅(qū)動(dòng)器件為+-12V電壓。工程上,電壓不可能如此理想,判斷需要在一定范圍內(nèi)進(jìn)行,有些半導(dǎo)體器件也不容易升壓到+-15V,同時(shí),大擺幅電路速度也高不了。
???
????以上說(shuō)的是RS232電平,在未經(jīng)驅(qū)動(dòng)的芯片引腳上是TTL電平:
????????????????????信號(hào)有效??二進(jìn)制0?? = 0-0.3V
????????????????????信號(hào)無(wú)效??二進(jìn)制1?? = 3.3V/5V
????????????????????如果不經(jīng)RS232驅(qū)動(dòng)芯片,直接把MCU和Modem模塊(TTL電平)連接,需要注意電平兼容。
????****************************
????* (3) DB9引腳信號(hào)詳細(xì)說(shuō)明?? *
????****************************
????注意:硬件只提供機(jī)制而不提供策略,RS232的規(guī)范由軟件實(shí)現(xiàn),硬件只是提供標(biāo)準(zhǔn)的硬件信號(hào)線。例如:載波檢測(cè)由軟件完成,硬件只提供DCD引腳信號(hào)。硬件流控并不是說(shuō)將RTS和CTS接到相應(yīng)引腳位置上,硬件就可以自動(dòng)實(shí)現(xiàn)流量控制,硬件流控是靠軟件實(shí)現(xiàn)的,之所以強(qiáng)調(diào)“硬件”二字,只是因?yàn)橛布檐浖峁┝酥甘拘盘?hào)的硬件通路,而軟件流控沒(méi)有使用硬件指示信號(hào)罷了。
????RS232規(guī)定的是DTE和DCE設(shè)備間連接,而現(xiàn)在大多數(shù)設(shè)備已經(jīng)內(nèi)嵌了CPU,可以主動(dòng)發(fā)送數(shù)據(jù),因此成了DTE設(shè)備,DTE和DTE的連接RS232里沒(méi)有規(guī)定,需要使用交叉線。
????有興趣的讀者可以嘗試著分別剪斷9根線,看看會(huì)有什么現(xiàn)象發(fā)生。看看撥號(hào)軟件將彈出什么樣的錯(cuò)誤信息。
???
????TXD(Transmitted Data發(fā)送數(shù)據(jù)),RXD(ReceivedData接收數(shù)據(jù))------數(shù)據(jù)傳輸物理通道,DTE和DCE設(shè)備此引腳一一對(duì)應(yīng)連接即可,兩個(gè)DTE設(shè)備需要交叉連接。所謂收發(fā)全是站在DTE角度說(shuō)的。可以在這兩個(gè)引腳對(duì)應(yīng)的芯片引腳上連接LED指示燈,在數(shù)據(jù)收發(fā)時(shí)會(huì)有閃爍指示。這兩個(gè)信號(hào)連接芯片內(nèi)部的并/串和串/并電路,先處理低位,硬件上不受其他硬件控制信號(hào)的影響。
???
????GND(Ground地)----------地參考點(diǎn)。RS232是非平衡接法,不是差分的,所以抗噪性能不好,收發(fā)信號(hào)需要高電壓+15V/-15V,擺幅大,速率低。此地使兩端電位參考點(diǎn)一致,避免了地回路。
???
????DCD(Data CarrierDetect數(shù)據(jù)載波檢測(cè))----------當(dāng)話音通路建立后,兩端Modem各自發(fā)送單頻載波,以便各自的對(duì)端實(shí)時(shí)檢測(cè)鏈路通斷。只要檢測(cè)到載波信號(hào),DCD就有效。此信號(hào)無(wú)效時(shí)用于觸發(fā)no carrier事件,提供向上層傳遞lowerdown消息的機(jī)制,使PPP復(fù)位,并根據(jù)策略決定是否斷線重?fù)堋T赑PP收發(fā)數(shù)據(jù)時(shí)應(yīng)實(shí)時(shí)監(jiān)測(cè)DCD信號(hào),只有當(dāng)DCD有效時(shí)才能進(jìn)行收發(fā)操作。
???
????DTR(Data Terminal Ready數(shù)據(jù)終端準(zhǔn)備好),DSR(Data SetReady數(shù)據(jù)設(shè)備準(zhǔn)備好)----------雖然通過(guò)RXD和TXD就可以收發(fā)數(shù)據(jù),但是在發(fā)送數(shù)據(jù)前還是應(yīng)該先確定對(duì)方是否準(zhǔn)備好,以避免不必要的數(shù)據(jù)丟失。DTR和DSR引腳用于主硬件流控。DTR有效表示DTE設(shè)備可以接收數(shù)據(jù),DSR有效表示DCE設(shè)備可以接收數(shù)據(jù)。DTE向DCE發(fā)送數(shù)據(jù)前要檢測(cè)DSR信號(hào),如果無(wú)效將不會(huì)發(fā)送,同樣,DCE向DTE發(fā)送數(shù)據(jù)前也要先檢測(cè)DTR是否有效。這是RS232規(guī)范的要求。
????MODEM并沒(méi)有使用DTR和DSR實(shí)現(xiàn)通常意義上的硬件流控。DTR在整個(gè)通信期間保持有效,DSR在MODEM上電后立即有效/在發(fā)出載波后有效(這取決于程序?qū)SR的理解,是把它簡(jiǎn)單地看成電源開(kāi)關(guān)指示還是看成撥號(hào)后的指示)并在整個(gè)通信過(guò)程中一直保持有效。DTR或DSR在任何時(shí)間點(diǎn)無(wú)效,都將終止通信過(guò)程。有人可能奇怪RS232標(biāo)準(zhǔn)里明明使用這兩個(gè)信號(hào)用于主硬件流控,為什么MODEM卻這樣安排時(shí)序呢?原來(lái)MODEM根本就沒(méi)有按照RS232的規(guī)范將DTR和DSR用于硬件流控,它只使用這兩個(gè)信號(hào)指示DTE和DCE已經(jīng)上電,可以開(kāi)始工作。當(dāng)然這在某種意義上也算是流控,但它確實(shí)不是RS232所指的那種,MODEM是通過(guò)RTS和CTS實(shí)現(xiàn)的硬件流控。
????DTR和DSR的這種使用方法最初是由賀氏Hayes公司在Smart Modem里最先采用的,后來(lái)賀氏HayesMODEM成為行業(yè)事實(shí)上的標(biāo)準(zhǔn),其他公司參照賀氏設(shè)計(jì)的時(shí)序生產(chǎn)與其兼容的MODEM,甚至連AT指令都一樣(大家一起抄他唄)。因此,現(xiàn)在的MODEM都不遵守RS232在這兩個(gè)引腳上定義的用法了。
????Data Terminal和DataSet是兩個(gè)過(guò)時(shí)的名字,這兩個(gè)術(shù)語(yǔ)已經(jīng)被廢棄了(誰(shuí)還記得數(shù)據(jù)終端和數(shù)傳機(jī)啊,早就成古董了,興許在博物館還能見(jiàn)到實(shí)物)。RS232-D版本中起用DTE ready和DCE ready兩個(gè)新名字。雖然新名字表達(dá)的意思清楚多了,但可以肯定的說(shuō),舊名字仍將繼續(xù)使用。
????RTS(Request To Send請(qǐng)求發(fā)送),CTS(Clear ToSend清除發(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)一直有效即可。
????以上所述是RS232標(biāo)準(zhǔn)的定義,然而在MODEM中,完全沒(méi)有遵守這個(gè)規(guī)范,而是將其用于硬件流控。很多人根據(jù)RTS和CTS的字面意思理解他們的用法往往百思不得其解,再加上半雙工/全雙工,就更加云里霧里了。RTS和CTS在MODEM中的用法與他們字面的含義沒(méi)有任何關(guān)系,他們已經(jīng)由賀氏公司重新定義了用法。以下是網(wǎng)友dengm給出的程序,詳細(xì)說(shuō)明了RTS和CTS在MODEM里的用法。RTS用于指示本端是否可以接收數(shù)據(jù),CTS指示對(duì)端是否可以接收數(shù)據(jù)。
? ???MODEM的對(duì)外接口是串口,這個(gè)串行I/O口用于傳輸控制信號(hào)、狀態(tài)信號(hào)、數(shù)據(jù)、AT指令及其響應(yīng)。雖然MODEM種類繁多(56K貓/GPRS/CDMA等),但對(duì)外都表現(xiàn)為一個(gè)標(biāo)準(zhǔn)的串口,只要將這個(gè)串口了解清楚,那么就可以將所有的MODEM一網(wǎng)打盡。
???
????*************
????* (1) UART?? *
????*************
????一般地,我們把這個(gè)串口叫作UART(Universal Asynchronous Receiver and Transmitter通用異步收發(fā)器)。
????其中,RT是接收和發(fā)送的英文縮寫(xiě),能收能發(fā)又是串口,說(shuō)白了就是串行I/O口的意思。
????A表示異步模式。這種模式的優(yōu)點(diǎn)是適應(yīng)性強(qiáng),對(duì)時(shí)鐘精度要求低(成本低)。每次發(fā)送字節(jié)數(shù)據(jù)前都首先發(fā)送一個(gè)開(kāi)始位同步時(shí)鐘相位,抖動(dòng)誤差不會(huì)在整個(gè)通信過(guò)程中累積,只影響單個(gè)字節(jié)的傳輸單元。
????U的意思是通用。為什么一定要冠以“通用”二字,這個(gè)定語(yǔ)到底想強(qiáng)調(diào)什么呢?
????話說(shuō)很早以前,還沒(méi)有出現(xiàn)計(jì)算機(jī)的時(shí)候,就已經(jīng)出現(xiàn)了串口設(shè)備。例如:MODEM、電傳打字機(jī)、工控設(shè)備、數(shù)傳機(jī)等等。為了方便設(shè)備互連,EIA制定了RS232標(biāo)準(zhǔn)化規(guī)范,采用DB25接口連接DTE(Data Terminal Equipment數(shù)據(jù)終端設(shè)備)和DCE(DataCommunicationsEquipment數(shù)據(jù)通信設(shè)備)。后來(lái),出現(xiàn)了個(gè)人計(jì)算機(jī)(PC機(jī)),這些已有的設(shè)備毫無(wú)疑問(wèn)地成了最初的外設(shè),為了將其接入主機(jī),制造商們自然地選擇了標(biāo)準(zhǔn)的RS232串口。在這個(gè)標(biāo)準(zhǔn)中,DB25接口支持同步和異步兩種工作模式,采用D型接插件,防止插反。這種設(shè)計(jì)兼容性好,使用方便,但是制造商們并不買帳,他們更傾向于進(jìn)一步減少接插件的大小和成本。通過(guò)刪除DB25中未使用的引腳和支持同步模式的引腳,將DB25改造成只有9根線,只支持異步模式,體積更小,成本更低的DB9。最初的狀況比較混亂,因?yàn)镈B9只給出了信號(hào)范圍,但沒(méi)有指出引腳和信號(hào)的對(duì)應(yīng)關(guān)系,而且DB9也不是RS232規(guī)范所定義的接口標(biāo)準(zhǔn),因此各個(gè)制造商只能自行定義對(duì)應(yīng)關(guān)系。后來(lái),IBM制造的PC機(jī)成了行業(yè)標(biāo)準(zhǔn),DB9的對(duì)應(yīng)關(guān)系就逐漸統(tǒng)一到了IBM的定義上,現(xiàn)如今使用的DB9就是遵守的IBM的定義。隨著時(shí)代的發(fā)展,計(jì)算機(jī)越來(lái)越普及,外設(shè)的種類也越來(lái)越多,有些非RS232的串行設(shè)備需要接入主機(jī),這就要求主機(jī)提供更多的I/O口。如果為每一種新出現(xiàn)的設(shè)備都提供一個(gè)I/O,顯然是不現(xiàn)實(shí)的,因?yàn)橹鳈C(jī)后面板位置有限,不可能容納太多的接口。幸運(yùn)的是,外部I/O口大體上主要分為兩類:并口和串口。如果復(fù)用已有的RS232串口接入非RS232的設(shè)備,那么就可以用有限的接口,接入大量的設(shè)備。一個(gè)有趣的現(xiàn)象是,早期的操作系統(tǒng)DOS和ROMBIOS提供的通信例程只支持RS232串口標(biāo)準(zhǔn),即使是實(shí)現(xiàn)簡(jiǎn)單的字節(jié)收發(fā)這種非RS232應(yīng)用,竟然也要先檢測(cè)DSR、DCD、CTS等信號(hào)是否有效,如果不滿足條件,將不會(huì)發(fā)送數(shù)據(jù)到TXD上。解決這個(gè)問(wèn)題的方法有兩種:1、旁路系統(tǒng)提供的API函數(shù),自己直接操縱硬件實(shí)現(xiàn)非RS232的操作;2、短接接頭里某些RS232控制信號(hào)線,使系統(tǒng)通信例程誤以為是RS232設(shè)備,使非RS232的設(shè)備滿足RS232規(guī)范的子集要求。
????現(xiàn)在,PC機(jī)上的串口既支持RS232應(yīng)用又支持非RS232應(yīng)用,通用串口指的就是這個(gè)意思。RS232規(guī)范對(duì)速度和距離都有約束,在碼元畸變小于4%的條件下,傳輸距離上限是15米;速率上限是19200。目前,在PC機(jī)上的串口都突破了RS232標(biāo)準(zhǔn)的限制,速度可以達(dá)到115200甚至更高。軟件上,已經(jīng)可以選項(xiàng)配置是否支持硬件流控,是否檢查DSR、DCD、RI等輸入信號(hào)。可以說(shuō),現(xiàn)在的PC串口,來(lái)源于RS232,但又不拘泥于它的限制,越來(lái)越向通用目的的串口方向發(fā)展。UART到此可以總結(jié)為:用于通用目的的異步串行I/O口。
????綜上,可以看出計(jì)算機(jī)串口發(fā)展的大致歷程:
????(個(gè) 人計(jì)算機(jī))史前出現(xiàn)原始的串口設(shè)備 --> EIA制定RS232統(tǒng)一標(biāo)準(zhǔn),DB25出現(xiàn)--> 個(gè)人計(jì)算機(jī)誕生,為引入串口,DB9出現(xiàn),軟硬件仍然遵循RS232標(biāo)準(zhǔn)-->為引入新的非RS232串口,將原來(lái)的RS232口改造成通用目的的UART,軟硬件可以不遵循RS232規(guī)范。
???
????PC機(jī)串口擁有多個(gè)名字:串口、RS232口、COM口(通信口)、異步口、UART等,他們是不同歷史時(shí)期的產(chǎn)物,一直沿用至今,讓現(xiàn)在的人們感覺(jué)有些莫名其妙。最開(kāi)始PC機(jī)接入的串行外設(shè)是RS232設(shè)備,就叫RS232口。這個(gè)設(shè)備主要是通信用的MODEM,PC上就稱為COM口。現(xiàn)在連非RS232設(shè)備也接了進(jìn)來(lái),就叫UART吧。不過(guò)新名字沒(méi)有老名字有名,有些人的習(xí)慣改不過(guò)來(lái),再說(shuō)計(jì)算機(jī)發(fā)展太快,老名字還沒(méi)消失,新名字就出現(xiàn)了,而且各有各的擁躉,約定俗成,那就這么亂著叫吧。
???
????就在UART準(zhǔn)備一統(tǒng)江湖的時(shí)候,制造商們?cè)僖淮尾粷M于它的速度、靈活性(軟件可配置)和體積,推出了USB串口和1394串口。現(xiàn)在越來(lái)越多的筆記本電腦上已經(jīng)取消了UART串口,因此有不少網(wǎng)友發(fā)出“沒(méi)有串口,吾誰(shuí)與歸”的慨嘆,歷史前進(jìn)的腳步無(wú)法阻擋,古今多少事,都付笑談中,USB取代UART是后話,暫且不表。
???
????*************************
????* (2) DB9引腳定義和表示 *
????*************************
????DB9遵循IBM定義,所有輸入輸出方向都是站在DTE角度說(shuō)的。
????1--載波檢測(cè)DCD????2--接收數(shù)據(jù)RXD????3--發(fā)送數(shù)據(jù)TXD????4--數(shù)據(jù)終端就緒DTR????5--信號(hào)地GND
????6--數(shù)據(jù)設(shè)備就緒DSR????7--請(qǐng)求發(fā)送RTS????8--清除發(fā)送CTS????9--振鈴指示RI
???
????在TXD和RXD上:(一般,驅(qū)動(dòng)器件都是反相器,用負(fù)表示"1",用正表示"0",采用負(fù)邏輯,完全可以理解。)
????????????????????邏輯0(SPACE 空號(hào)) = +3V~+15V
????????????????????邏輯1(MARK 傳號(hào))?? = -3V~-15V
???????????????????
????在RTS、CTS、DSR、DTR和DCD等控制線上:
????????????????????信號(hào)有效(接通,ON狀態(tài),正電壓,高電平)= +3V~+15V
????????????????????信號(hào)無(wú)效(斷開(kāi),OFF狀態(tài),負(fù)電壓,低電平) = -3V~-15V
????-3V到+3V之間的電平無(wú)意義,稱為死區(qū),不應(yīng)該處于這個(gè)電壓范圍。+3V以上,-3V以下的一段區(qū)間屬于過(guò)渡區(qū),盡量不要使電平落入此區(qū)間,以便使判斷更可靠,最好在+12V以上,-12V以下。一般的驅(qū)動(dòng)器件為+-12V電壓。工程上,電壓不可能如此理想,判斷需要在一定范圍內(nèi)進(jìn)行,有些半導(dǎo)體器件也不容易升壓到+-15V,同時(shí),大擺幅電路速度也高不了。
???
????以上說(shuō)的是RS232電平,在未經(jīng)驅(qū)動(dòng)的芯片引腳上是TTL電平:
????????????????????信號(hào)有效??二進(jìn)制0?? = 0-0.3V
????????????????????信號(hào)無(wú)效??二進(jìn)制1?? = 3.3V/5V
????????????????????如果不經(jīng)RS232驅(qū)動(dòng)芯片,直接把MCU和Modem模塊(TTL電平)連接,需要注意電平兼容。
????****************************
????* (3) DB9引腳信號(hào)詳細(xì)說(shuō)明?? *
????****************************
????注意:硬件只提供機(jī)制而不提供策略,RS232的規(guī)范由軟件實(shí)現(xiàn),硬件只是提供標(biāo)準(zhǔn)的硬件信號(hào)線。例如:載波檢測(cè)由軟件完成,硬件只提供DCD引腳信號(hào)。硬件流控并不是說(shuō)將RTS和CTS接到相應(yīng)引腳位置上,硬件就可以自動(dòng)實(shí)現(xiàn)流量控制,硬件流控是靠軟件實(shí)現(xiàn)的,之所以強(qiáng)調(diào)“硬件”二字,只是因?yàn)橛布檐浖峁┝酥甘拘盘?hào)的硬件通路,而軟件流控沒(méi)有使用硬件指示信號(hào)罷了。
????RS232規(guī)定的是DTE和DCE設(shè)備間連接,而現(xiàn)在大多數(shù)設(shè)備已經(jīng)內(nèi)嵌了CPU,可以主動(dòng)發(fā)送數(shù)據(jù),因此成了DTE設(shè)備,DTE和DTE的連接RS232里沒(méi)有規(guī)定,需要使用交叉線。
????有興趣的讀者可以嘗試著分別剪斷9根線,看看會(huì)有什么現(xiàn)象發(fā)生。看看撥號(hào)軟件將彈出什么樣的錯(cuò)誤信息。
???
????TXD(Transmitted Data發(fā)送數(shù)據(jù)),RXD(ReceivedData接收數(shù)據(jù))------數(shù)據(jù)傳輸物理通道,DTE和DCE設(shè)備此引腳一一對(duì)應(yīng)連接即可,兩個(gè)DTE設(shè)備需要交叉連接。所謂收發(fā)全是站在DTE角度說(shuō)的。可以在這兩個(gè)引腳對(duì)應(yīng)的芯片引腳上連接LED指示燈,在數(shù)據(jù)收發(fā)時(shí)會(huì)有閃爍指示。這兩個(gè)信號(hào)連接芯片內(nèi)部的并/串和串/并電路,先處理低位,硬件上不受其他硬件控制信號(hào)的影響。
???
????GND(Ground地)----------地參考點(diǎn)。RS232是非平衡接法,不是差分的,所以抗噪性能不好,收發(fā)信號(hào)需要高電壓+15V/-15V,擺幅大,速率低。此地使兩端電位參考點(diǎn)一致,避免了地回路。
???
????DCD(Data CarrierDetect數(shù)據(jù)載波檢測(cè))----------當(dāng)話音通路建立后,兩端Modem各自發(fā)送單頻載波,以便各自的對(duì)端實(shí)時(shí)檢測(cè)鏈路通斷。只要檢測(cè)到載波信號(hào),DCD就有效。此信號(hào)無(wú)效時(shí)用于觸發(fā)no carrier事件,提供向上層傳遞lowerdown消息的機(jī)制,使PPP復(fù)位,并根據(jù)策略決定是否斷線重?fù)堋T赑PP收發(fā)數(shù)據(jù)時(shí)應(yīng)實(shí)時(shí)監(jiān)測(cè)DCD信號(hào),只有當(dāng)DCD有效時(shí)才能進(jìn)行收發(fā)操作。
???
????DTR(Data Terminal Ready數(shù)據(jù)終端準(zhǔn)備好),DSR(Data SetReady數(shù)據(jù)設(shè)備準(zhǔn)備好)----------雖然通過(guò)RXD和TXD就可以收發(fā)數(shù)據(jù),但是在發(fā)送數(shù)據(jù)前還是應(yīng)該先確定對(duì)方是否準(zhǔn)備好,以避免不必要的數(shù)據(jù)丟失。DTR和DSR引腳用于主硬件流控。DTR有效表示DTE設(shè)備可以接收數(shù)據(jù),DSR有效表示DCE設(shè)備可以接收數(shù)據(jù)。DTE向DCE發(fā)送數(shù)據(jù)前要檢測(cè)DSR信號(hào),如果無(wú)效將不會(huì)發(fā)送,同樣,DCE向DTE發(fā)送數(shù)據(jù)前也要先檢測(cè)DTR是否有效。這是RS232規(guī)范的要求。
????MODEM并沒(méi)有使用DTR和DSR實(shí)現(xiàn)通常意義上的硬件流控。DTR在整個(gè)通信期間保持有效,DSR在MODEM上電后立即有效/在發(fā)出載波后有效(這取決于程序?qū)SR的理解,是把它簡(jiǎn)單地看成電源開(kāi)關(guān)指示還是看成撥號(hào)后的指示)并在整個(gè)通信過(guò)程中一直保持有效。DTR或DSR在任何時(shí)間點(diǎn)無(wú)效,都將終止通信過(guò)程。有人可能奇怪RS232標(biāo)準(zhǔn)里明明使用這兩個(gè)信號(hào)用于主硬件流控,為什么MODEM卻這樣安排時(shí)序呢?原來(lái)MODEM根本就沒(méi)有按照RS232的規(guī)范將DTR和DSR用于硬件流控,它只使用這兩個(gè)信號(hào)指示DTE和DCE已經(jīng)上電,可以開(kāi)始工作。當(dāng)然這在某種意義上也算是流控,但它確實(shí)不是RS232所指的那種,MODEM是通過(guò)RTS和CTS實(shí)現(xiàn)的硬件流控。
????DTR和DSR的這種使用方法最初是由賀氏Hayes公司在Smart Modem里最先采用的,后來(lái)賀氏HayesMODEM成為行業(yè)事實(shí)上的標(biāo)準(zhǔn),其他公司參照賀氏設(shè)計(jì)的時(shí)序生產(chǎn)與其兼容的MODEM,甚至連AT指令都一樣(大家一起抄他唄)。因此,現(xiàn)在的MODEM都不遵守RS232在這兩個(gè)引腳上定義的用法了。
????Data Terminal和DataSet是兩個(gè)過(guò)時(shí)的名字,這兩個(gè)術(shù)語(yǔ)已經(jīng)被廢棄了(誰(shuí)還記得數(shù)據(jù)終端和數(shù)傳機(jī)啊,早就成古董了,興許在博物館還能見(jiàn)到實(shí)物)。RS232-D版本中起用DTE ready和DCE ready兩個(gè)新名字。雖然新名字表達(dá)的意思清楚多了,但可以肯定的說(shuō),舊名字仍將繼續(xù)使用。
????RTS(Request To Send請(qǐng)求發(fā)送),CTS(Clear ToSend清除發(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)一直有效即可。
????以上所述是RS232標(biāo)準(zhǔn)的定義,然而在MODEM中,完全沒(méi)有遵守這個(gè)規(guī)范,而是將其用于硬件流控。很多人根據(jù)RTS和CTS的字面意思理解他們的用法往往百思不得其解,再加上半雙工/全雙工,就更加云里霧里了。RTS和CTS在MODEM中的用法與他們字面的含義沒(méi)有任何關(guān)系,他們已經(jīng)由賀氏公司重新定義了用法。以下是網(wǎng)友dengm給出的程序,詳細(xì)說(shuō)明了RTS和CTS在MODEM里的用法。RTS用于指示本端是否可以接收數(shù)據(jù),CTS指示對(duì)端是否可以接收數(shù)據(jù)。
總結(jié)
以上是生活随笔為你收集整理的串口与modem流量控制大全(1)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 创业型公司的产品经理应该知道的事情
- 下一篇: 对标特斯拉Model S 吉利沃尔沃高端