串口通信深度探究
1.1 串行接口簡介
串行接口一般包括RS232/422/485,其技術(shù)簡單成熟,性能可靠,價格低廉;所要求的軟/硬件開發(fā)環(huán)境都很低,廣泛應(yīng)用于計算機(jī)及相關(guān)領(lǐng)域,如調(diào)制解調(diào)器(Modem)、串行打印機(jī)、各種監(jiān)控模塊、PLC、攝像頭云臺、數(shù)控機(jī)床、單片機(jī)及相關(guān)智能設(shè)備,甚至路由器也不例外(通過串口設(shè)置參數(shù))。
在計算機(jī)測控系統(tǒng)中,主控機(jī)一般采用PC或IPC,通過串口與測控模塊相連,測控模塊再連接相應(yīng)的傳感器和執(zhí)行器,如此形成一個簡單的雙層結(jié)構(gòu)的計算機(jī)測控系統(tǒng)。這種結(jié)構(gòu)主要用于單獨(dú)的中小型企業(yè)或部門,如果屬于綜合型企業(yè)或部門,如電力系統(tǒng)監(jiān)控,高速公路監(jiān)控和收費(fèi)系統(tǒng),則可以此為基礎(chǔ)結(jié)構(gòu)進(jìn)行擴(kuò)充,用集線器將眾多雙層監(jiān)控系統(tǒng)連接起來,再用交換機(jī)將若干集線器連接起來,統(tǒng)一接上路由器,從而與Internet互聯(lián),如此即可形成一個龐大的計算機(jī)測控網(wǎng)絡(luò)。由此可見,盡管現(xiàn)代計算機(jī)的新接口層出不窮,各種網(wǎng)絡(luò)應(yīng)用也日新月異,其規(guī)模也越來越大,但是,其基礎(chǔ)結(jié)構(gòu)卻有不少是串行通信系統(tǒng),串行通信也成了其中的核心技術(shù)。
1.1.1 串口通信的基本概念
1.并行通信與串行通信
終端與其他設(shè)備(例如,其他終端、計算機(jī)和外部設(shè)備)通過數(shù)據(jù)傳輸進(jìn)行通信。數(shù)據(jù)傳輸可以通過兩種方式進(jìn)行:并行通信和串行通信。
(1)并行通信。
在計算機(jī)和終端之間的數(shù)據(jù)傳輸通常是靠電纜或信道上的電流或電壓變化實(shí)現(xiàn)的。如果一組數(shù)據(jù)的各數(shù)據(jù)位在多條線上同時被傳送,這種傳輸方式被稱為并行通信,如圖5-1所示。
圖5-1 并行通信
并行數(shù)據(jù)傳送的特點(diǎn)是:各數(shù)據(jù)位同時傳送,傳送速度快、效率高,多用在實(shí)時、快速的場合。
并行傳送的數(shù)據(jù)寬度可以是1位~128位,甚至更寬,但是有多少數(shù)據(jù)位就需要多少根數(shù)據(jù)線,因此,傳送的成本較高。在集成電路芯片的內(nèi)部、同一插件板上各部件之間以及同一機(jī)箱內(nèi)各插件板之間的數(shù)據(jù)傳送都是并行的。
并行數(shù)據(jù)傳送只適用于近距離的通信,通常小于30m。
(2)串行通信。
串行通信是指通信的發(fā)送方和接收方之間數(shù)據(jù)信息的傳輸是在單根數(shù)據(jù)線上,以每次一個二進(jìn)制的0、1為最小單位逐位進(jìn)行傳輸,如圖5-2所示。
圖5-2 串行通信
串行數(shù)據(jù)傳送的特點(diǎn)是,數(shù)據(jù)傳送按位順序進(jìn)行,最少只需要一根傳輸線即可完成,節(jié)省傳輸線。與并行通信相比,串行通信還有較為顯著的優(yōu)點(diǎn):傳輸距離長,可以從幾米到幾千米;在長距離內(nèi)串行數(shù)據(jù)傳送速率會比并行數(shù)據(jù)傳送速率快;串行通信的通信時鐘頻率容易提高;串行通信的抗干擾能力十分強(qiáng),其信號間的互相干擾完全可以忽略。但是串行通信傳送速度比并行通信慢得多,并行通信時間為T,則串行時間為NT。
正是由于串行通信的接線少、成本低,因此它在數(shù)據(jù)采集和控制系統(tǒng)中得到了廣泛的應(yīng)用,產(chǎn)品也多種多樣。
2.串行通信的工作模式
通過單線傳輸信息是串行數(shù)據(jù)通信的基礎(chǔ)。數(shù)據(jù)通常是在兩個站(點(diǎn)對點(diǎn))之間進(jìn)行傳送,按照數(shù)據(jù)流的方向可分成3種傳送模式:單工、半雙工和全雙工。
(1)單工形式。
單工形式的數(shù)據(jù)傳送是單向的。通信雙方中,一方固定為發(fā)送端,另一方則固定為接收端。信息只能沿一個方向傳送,使用一根傳輸線。如圖5-3所示。
圖5-3 單工形式
單工形式一般用在只向一個方向傳送數(shù)據(jù)的場合。例如,計算機(jī)與打印機(jī)之間的通信是單工形式,因?yàn)橹挥杏嬎銠C(jī)向打印機(jī)傳送數(shù)據(jù),而沒有相反的數(shù)據(jù)傳送。還有在某些通信信道中,如單工無線發(fā)送等。
(2)半雙工形式。
半雙工通信使用同一根傳輸線,既可發(fā)送數(shù)據(jù)又可接收數(shù)據(jù),但不能同時發(fā)送和接收。在任何時刻只能由其中的一方發(fā)送數(shù)據(jù),另一方接收數(shù)據(jù)。因此半雙工形式既可以使用一條數(shù)據(jù)線,也可以使用兩條數(shù)據(jù)線。如圖5-4所示。
圖5-4 半雙工形式
半雙工通信中每一端需有一個收/發(fā)切換電子開關(guān),通過切換來決定數(shù)據(jù)向哪個方向傳輸。因?yàn)橛星袚Q,所以會產(chǎn)生時間延遲。信息傳輸效率較低些。但是對于像打印機(jī)這樣單方向傳輸?shù)耐鈬O(shè)備,用半雙工方式就能滿足要求了,不必采用全雙工方式,可省一根傳輸線。
(3)全雙工形式。
全雙工數(shù)據(jù)通信分別由兩根可以在兩個不同的站點(diǎn)同時發(fā)送和接收的傳輸線進(jìn)行傳送,通信雙方都能在同一時刻進(jìn)行發(fā)送和接收操作。如圖5-5所示。
圖5-5 全雙工形式
在全雙工方式中,每一端都有發(fā)送器和接收器,有兩條傳送線,可在交互式應(yīng)用和遠(yuǎn)程監(jiān)控系統(tǒng)中使用,信息傳輸效率較高。
3.異步傳輸與同步傳輸
串行傳輸中,數(shù)據(jù)是一位一位按照到達(dá)的順序依次傳輸?shù)?#xff0c;每位數(shù)據(jù)的發(fā)送和接收都需要時鐘來控制。發(fā)送端通過發(fā)送時鐘確定數(shù)據(jù)位的開始和結(jié)束,接收端需要在適當(dāng)?shù)臅r間間隔對數(shù)據(jù)流進(jìn)行采樣來正確地識別數(shù)據(jù)。接收端和發(fā)送端必須保持步調(diào)一致,否則就會在數(shù)據(jù)傳輸中出現(xiàn)差錯。為了解決以上問題,串行傳輸可以采用以下兩種方法:異步傳輸和同步傳輸。
(1)異步傳輸。
異步傳輸方式中,字符是數(shù)據(jù)傳輸單位。在通信的數(shù)據(jù)流中,字符間異步,字符內(nèi)部各位間同步。異步通信方式的“異步”主要體現(xiàn)在字符與字符之間通信沒有嚴(yán)格的定時要求。異步傳輸中,字符可以是連續(xù)地、一個個地發(fā)送,也可以是不連續(xù)地,隨機(jī)地進(jìn)行單獨(dú)發(fā)送。在一個字符格式的停止位之后,立即發(fā)送下一個字符的起始位,開始一個新的字符的傳輸,這叫做連續(xù)的串行數(shù)據(jù)發(fā)送,即幀與幀之間是連續(xù)的。斷續(xù)的串行數(shù)據(jù)傳送是指在一幀結(jié)束之后維持?jǐn)?shù)據(jù)線的“空閑”狀態(tài),新的起始位可在任何時刻開始。一旦傳送開始,組成這個字符的各個數(shù)據(jù)位將被連續(xù)發(fā)送,并且每個數(shù)據(jù)位持續(xù)的時間是相等的。接收端根據(jù)這個特點(diǎn)與數(shù)據(jù)發(fā)送端保持同步,從而正確地恢復(fù)數(shù)據(jù)。收/發(fā)雙方則以預(yù)先約定的傳輸速率,在時鐘的作用下,傳送這個字符中的每一位。
(2)同步傳輸。
在同步傳輸方式中,比特塊以穩(wěn)定的比特流的形式傳輸,數(shù)據(jù)被封裝成更大的傳輸單位,稱為幀。每個幀中含有多個字符代碼,而且字符代碼與字符代碼之間沒有間隙以及起始位和停止位。和異步傳輸相比,數(shù)據(jù)傳輸單位的加長容易引起時鐘漂移。為了保證接收端能夠正確地區(qū)分?jǐn)?shù)據(jù)流中的每個數(shù)據(jù)位,收發(fā)雙方必須通過某種方法建立起同步的時鐘。可以在發(fā)送器和接收器之間提供一條獨(dú)立的時鐘線路,由線路的一端(發(fā)送器或者接收器)定期地在每個比特時間中向線路發(fā)送一個短脈沖信號,另一端則將這些有規(guī)律的脈沖作為時鐘。這種技術(shù)在短距離傳輸時表現(xiàn)良好,但在長距離傳輸中,定時脈沖可能會和信息信號一樣受到破壞,從而出現(xiàn)定時誤差。另一種方法是,通過采用嵌有時鐘信息的數(shù)據(jù)編碼位向接收端提供同步信息。
4.硬件握手與軟件握手
握手信號實(shí)際上是控制信號,用來控制數(shù)據(jù)的傳送。通過握手信號,發(fā)送方可以通知接收方是否有數(shù)據(jù)要發(fā)送。接收方通過握手信號通知發(fā)送方它是否已經(jīng)準(zhǔn)備好了接收信號。握手信號遵循某種協(xié)議。
當(dāng)發(fā)送方和接收方處理數(shù)據(jù)的速度不一樣時,可能會造成數(shù)據(jù)丟失。在傳輸中,如果發(fā)送方的發(fā)送速度大于接收方的接收速度,同時接收方處理數(shù)據(jù)的速度不夠快的話,那么接收端的緩沖區(qū)必定在一定時間后溢出,從而造成以后發(fā)送過來的數(shù)據(jù)不能進(jìn)入緩沖區(qū)而丟失。發(fā)送方何時可以繼續(xù)發(fā)送數(shù)據(jù),何時必須暫停發(fā)送,從而讓接收方有時間處理數(shù)據(jù),這稱為流量控制,必須靠握手信號來解決這個問題。例如,打印機(jī)和計算機(jī)進(jìn)行通信時,一些打印機(jī)打印速度可能跟不上計算機(jī)發(fā)送數(shù)據(jù)的速度,就必須要通過握手信號通知計算機(jī)暫停發(fā)送數(shù)據(jù)。
(1)硬件握手。
在硬件握手中,發(fā)送方通過將某一個導(dǎo)線拉到高電平或者低電平,來表示發(fā)送方可以發(fā)送數(shù)據(jù)。接收方已經(jīng)準(zhǔn)備好接收數(shù)據(jù)之后,也把某一個導(dǎo)線拉到高電平或者是低電平,來通知發(fā)送方,發(fā)送方一直在檢測這個信號。接收方可以在任何時候把這個信號變?yōu)闊o效,甚至是在接受一個數(shù)據(jù)塊的過程中。當(dāng)發(fā)送方檢測到這個信號變?yōu)闊o效之后,就必須停止本次發(fā)送,直到這個信號變?yōu)橛行А?/span>
(2)軟件握手。
在軟件握手中,以數(shù)據(jù)線上的數(shù)據(jù)信號來代替實(shí)際的硬件電路。這種方法用在直接連接或者通過調(diào)制解調(diào)器連接的兩臺計算機(jī)之間進(jìn)行雙向通信的場合。
對于軟件握手現(xiàn)在已經(jīng)建立了一些標(biāo)準(zhǔn)協(xié)議,其中最常用的是通信協(xié)議。通信協(xié)議是指通信雙方的一種約定,約定包括對數(shù)據(jù)格式、同步方式、傳送速度、傳送步驟、檢糾錯方式以及控制字符定義等問題作出統(tǒng)一規(guī)定,通信雙方必須共同遵守,也叫做通信控制規(guī)程或稱傳輸控制規(guī)程,它屬于OSI七層參考模型中的數(shù)據(jù)鏈路層。
(3)硬件和軟件結(jié)合的握手方法。
如果使用計算機(jī)或終端通過調(diào)制解調(diào)器和主計算機(jī)進(jìn)行通信,那么調(diào)制解調(diào)器使用硬件握手方法和計算機(jī)聯(lián)系,主計算機(jī)和調(diào)制解調(diào)器之間也使用硬件握手方法,主計算機(jī)和計算機(jī)之間將使用軟件握手方法進(jìn)行聯(lián)系。因此,計算機(jī)必須要編程,僅當(dāng)調(diào)制解調(diào)器的DSR(有時可能使用CD)線電位變高和軟件停止信號沒有收到時,軟件才送出一個通知信號。
一些計算機(jī)自動監(jiān)測硬件握手信號,這些計算機(jī)等待硬件握手信號變高以后送出一個字符,所以程序只需要處理軟件握手信號。
5.串口通信的基本參數(shù)
串行端口的通信方式是將字節(jié)拆分成一個接著一個的位再傳送出去。接到此電位信號的一方再將此一個一個的位組合成原來的字節(jié),如此形成一個字節(jié)的完整傳送。
在傳輸進(jìn)行的過程中,雙方明確傳送信息的具體方式,否則雙方就沒有一套共同的譯碼方式,從而無法了解對方所傳過來的信息的意義。因此雙方為了進(jìn)行通信,必須遵守一定的通信規(guī)則,這個共同的規(guī)則就是通信端口的初始化。
通信端口的初始化必須對以下幾項參數(shù)進(jìn)行設(shè)置。
(1)數(shù)據(jù)的傳輸速度。
串行通信的傳輸受到通信雙方硬件配備性能及通信線路的特性控制,收、發(fā)雙方必須按照同樣的速率進(jìn)行串行通信,即收、發(fā)雙方采用同樣的波特率。我們通常將傳輸速度稱為波特率,指的是串行通信中每一秒所傳送的數(shù)據(jù)位數(shù),單位是bit/s。我們經(jīng)常可以看到儀器或Modem的規(guī)格書上都寫著19 200bit/s、38 400bit/s,……,所指的就是傳輸速度。
就儀器或工業(yè)場合來說,4 800bit/s、9 600bit/s是最常見的傳輸速度,現(xiàn)在的個人計算機(jī)所提供的串行端口的傳輸速度都可以達(dá)到15 200bit/s(甚至達(dá)到921 600bit/s),若傳輸距離較近而設(shè)備也提供時,使用最高的傳輸速度也可以。
例如,在某異步串行通信中,每傳送一個字符需要8位,如果采用波特率4 800bit/s進(jìn)行傳送,則每秒可以傳送600個字符。
(2)數(shù)據(jù)的傳送單位。
一般串行通信端口所傳送的數(shù)據(jù)是字符型,若用來傳輸文件,則會使用二進(jìn)制的數(shù)據(jù)型。當(dāng)使用字符型時,工業(yè)界使用到的有ASCII字符碼及JIS字符碼;ASCII碼使用了8位形成一個字符,而JIS碼則以7位形成一個字符。我們可以發(fā)現(xiàn),歐美的設(shè)備多使用8位的字節(jié),而日本的設(shè)備多使用7位為一個字節(jié)。以實(shí)際的RS-232傳輸上看來,由于工業(yè)界常使用的PLC大多只是傳送文字碼,因此只要7位就可以將ASCII碼的0~127碼表達(dá)出來(2?7=128,共有128種組合方式),所有的可見字符也落在此范圍內(nèi),所以只要7個數(shù)據(jù)位就夠了。不同的情況下(看所使用的協(xié)議),會使用到不同的傳送單位。使用多少位合成一個字節(jié)必須先行確定。
(3)起始位與停止位。
由于異步串行傳輸中并沒有使用同步脈沖作基準(zhǔn),故接收端完全不知道發(fā)送端何時將進(jìn)行數(shù)據(jù)的傳送。發(fā)送端準(zhǔn)備要開始傳送數(shù)據(jù)時,發(fā)送端會在所送出的字符前后分別加上高電位的起始位(邏輯0)及低電位的停止位(邏輯1),它們分別是所謂的起始位和停止位。也就是說,當(dāng)發(fā)送端要開始傳送數(shù)據(jù)時,便將傳輸線上的電位由低電位提升至高電位,而當(dāng)傳送結(jié)束后,再將電位降至低電位。接收端會因起始位的觸發(fā)(因電壓由低電位升至高電位)而開始接收數(shù)據(jù),并因停止位的通知(因電壓維持在低電位)而明確數(shù)據(jù)的字符信號已經(jīng)結(jié)束;當(dāng)加入了起始位及停止位才比較容易達(dá)到多字符的接收能力。起始位固定為1位,而停止位則有1、1.5、2位等多種選擇,如何選擇呢?只要通信雙方協(xié)議通過即可,沒有強(qiáng)制規(guī)定。
(4)校驗(yàn)位。
為了預(yù)防錯誤的產(chǎn)生,使用校驗(yàn)位作為檢查的機(jī)制。校驗(yàn)位是用來檢查所傳送數(shù)據(jù)的正確性的一種核對碼,又分成奇校驗(yàn)與偶校驗(yàn)兩種,分別是檢查字符碼中1的數(shù)目是奇數(shù)或偶數(shù)。以偶校驗(yàn)為例,“A”的ASCII碼是41H(十六進(jìn)制),將它以二進(jìn)制表示時,是01000001,其中1的數(shù)目是2,因此校驗(yàn)位便是0,使1的數(shù)目保持偶數(shù)。同樣的,校驗(yàn)位是奇校驗(yàn)時,“A”的校驗(yàn)位便是1,使1的數(shù)目保持在奇數(shù)。接收者重新計算奇偶校驗(yàn)位,如果新的計算值正確,那么表示正常。如果新的計算值錯誤,那么接收端就會收到一些指示,表示此次接收的數(shù)據(jù)有誤。
1.1.2 RS-232C串口通信標(biāo)準(zhǔn)
RS-232C是美國電子工業(yè)協(xié)會(Electronic Industry Association),EIA于1962年公布,并于1969年修訂的串行接口標(biāo)準(zhǔn)。它已經(jīng)成為國際上通用的標(biāo)準(zhǔn)。1987年1月,RS-232C經(jīng)修改后,正式改名為EIA-232D。由于標(biāo)準(zhǔn)修改得并不多,因此現(xiàn)在很多廠商仍用舊的名稱。
RS-232C標(biāo)準(zhǔn)(協(xié)議)的全稱是EIA-RS-232C標(biāo)準(zhǔn),其中RS(Recommended Standard)代表推薦標(biāo)準(zhǔn),232是標(biāo)識號,C代表RS-232的最新一次修改(1969年),它適合于數(shù)據(jù)傳輸速率在0~20 000bit/s范圍內(nèi)的通信。這個標(biāo)準(zhǔn)對串行通信接口的有關(guān)問題,如信號電平、信號線功能、電氣特性、機(jī)械特性等都作了明確規(guī)定。
目前RS-232C已成為數(shù)據(jù)終端設(shè)備(Data Terminal Equipment,DTE,如計算機(jī))和數(shù)據(jù)通信設(shè)備(Data Communication Equipment,DCE,如Modem)的接口標(biāo)準(zhǔn)。RS-232C是PC機(jī)與通信工業(yè)中應(yīng)用最廣泛的一種串行接口,
在IBM PC機(jī)上的COM1、COM2接口,就是RS-232C接口。
利用RS-232C串行通信接口可實(shí)現(xiàn)兩臺個人計算機(jī)的點(diǎn)對點(diǎn)的通信;通過RS-232C接口可與其他外設(shè)(如打印機(jī)、邏輯分析儀、智能調(diào)節(jié)儀、PLC等)近距離串行連接;通過RS-232C接口連接調(diào)制解調(diào)器可遠(yuǎn)距離地與其他計算機(jī)通信;將RS-232C接口轉(zhuǎn)換為RS-422或RS-485接口,可實(shí)現(xiàn)一臺個人計算機(jī)與多臺現(xiàn)場設(shè)備之間的通信。
1.接口連接器
由于RS-232C并未定義連接器的物理特性,因此,出現(xiàn)了DB-25和DB-9各種類型的連接器,其引腳的定義也各不相同。現(xiàn)在計算機(jī)上一般只提供DB-9連接器,都為公頭。相應(yīng)的連接線上的串口連接器也有公頭和母頭之分,如圖5-6所示。
作為多功能I/O卡或主板上提供的COM1和COM2兩個串行接口的DB-9連接器,它只提供異步通信的9個信號針腳,如圖5-7所示,各針腳的信號功能描述如表5-1所示。
?
圖5-6 公頭與母頭串口連接器 圖5-7 DB9串口連接器
表5-1?9針串行口的針腳功能
| 針 腳 | 符 號 | 通 信 方 向 | 功 能 |
| 1 | DCD | 計算機(jī)→調(diào)制解調(diào)器 | 載波信號檢測 |
| 2 | RXD | 計算機(jī)→調(diào)制解調(diào)器 | 接收數(shù)據(jù) |
| 3 | TXD | 計算機(jī)→調(diào)制解調(diào)器 | 發(fā)送數(shù)據(jù) |
| 4 | DTR | 計算機(jī)→調(diào)制解調(diào)器 | 數(shù)據(jù)終端準(zhǔn)備好 |
| 5 | GND | 計算機(jī) = 調(diào)制解調(diào)器 | 信號地線 |
| 6 | DSR | 計算機(jī)→調(diào)制解調(diào)器 | 數(shù)據(jù)裝置準(zhǔn)備好 |
| 7 | RTS | 計算機(jī)→調(diào)制解調(diào)器 | 請求發(fā)送 |
| 8 | CTS | 計算機(jī)→調(diào)制解調(diào)器 | 清除發(fā)送 |
| 9 | RI | 計算機(jī)→調(diào)制解調(diào)器 | 振鈴信號指示 |
RS-232的每一支腳都有它的作用,也有它信號流動的方向。原來的RS-232是設(shè)計用來連接調(diào)制解調(diào)器作傳輸之用的,因此它的腳位意義通常也和調(diào)制解調(diào)器傳輸有關(guān)。
從功能來看,全部信號線分為3類,即數(shù)據(jù)線(TXD、RXD)、地線(GND)和聯(lián)絡(luò)控制線(DSR、DTR、RI、DCD、RTS、CTS)。
以下是這9支腳的相關(guān)說明。
· DCD-此腳位是由調(diào)制解調(diào)器(或其他DCE,以下同)控制。當(dāng)電話接通之后,傳送的信號被加載在載波信號上面,調(diào)制解調(diào)器利用此腳位通知計算機(jī)檢測到載波,而當(dāng)載波被檢測到時才可保證此時是處于連接的狀態(tài)。
一般情況下,如果計算機(jī)沒有收到此信號,仍會有所響應(yīng),并將調(diào)制解調(diào)器掛起。
· RXD-此腳位負(fù)責(zé)將傳送過來的遠(yuǎn)程信息進(jìn)行接收。在接收的過程中,由于信息是以數(shù)字形式傳送的,讀者可以在調(diào)制解調(diào)器的RXD指示燈上看到明滅交錯,這是由于0、1交替導(dǎo)致的結(jié)果,也就是電位高低所產(chǎn)生的現(xiàn)象。
· TXD-此腳位負(fù)責(zé)將計算機(jī)打算傳送出去的信息傳送出去。在傳送的過程中,由于信息是以數(shù)字形式傳送的,讀者可以在調(diào)制解調(diào)器的TXD指示燈上看到明滅交錯,這是由于0、1交替導(dǎo)致的結(jié)果,也就是電位高低所產(chǎn)生的現(xiàn)象。
· DTR-此腳位由計算機(jī)(或其他DTE,以下同)控制,用以通知調(diào)制解調(diào)器可以進(jìn)行傳輸。高電位時表示計算機(jī)已經(jīng)準(zhǔn)備就緒,隨時可以接收信息。
· GND-此腳位為地線,作為計算機(jī)與調(diào)制解調(diào)器之間的參考基準(zhǔn)。兩端設(shè)備的地線準(zhǔn)位必須一樣,否則會產(chǎn)生地回路,使得信號因準(zhǔn)位的不同而產(chǎn)生偏移,也會導(dǎo)致結(jié)果失常。RS-232信息在傳輸上是采用單向式的信號傳送方式,其特點(diǎn)是信號的電壓基準(zhǔn)由參考地線提供,因此傳輸雙方的地線必須連接在一起,以避免基準(zhǔn)不同而造成信息的錯誤。
· DSR-此腳位由調(diào)制解調(diào)器控制,調(diào)制解調(diào)器用這支腳位的高電位通知計算機(jī)一切均準(zhǔn)備就緒,可以把信息傳送過來。
· RTS-此腳位由計算機(jī)控制,用以通知調(diào)制解調(diào)器馬上傳送信息到計算機(jī)。而當(dāng)調(diào)制解調(diào)器收到此信號后,便會將它在電話線上收到的信息傳送給計算機(jī),在此之前若有信息傳送到調(diào)制解調(diào)器則會暫存在緩沖區(qū)中。
· CTS-此腳位由調(diào)制解調(diào)器控制,用以通知計算機(jī)打算傳送的信息已經(jīng)到達(dá)調(diào)制解調(diào)器。當(dāng)計算機(jī)收到此腳位信號后,便把準(zhǔn)備送出的信息送到調(diào)制解調(diào)器,而調(diào)制解調(diào)器則將計算機(jī)送過來的信息通過電話線路送出。
· RI-調(diào)制解調(diào)器通知計算機(jī)有電話進(jìn)來,是否接聽電話則由計算機(jī)決定。如果計算機(jī)設(shè)置調(diào)制解調(diào)器為自動應(yīng)答模式,則調(diào)制解調(diào)器在聽到一定的鈴響后便會自動接聽電話。
上述控制信號線何時有效,何時無效的順序表示了接口信號的傳送過程。例如,只有當(dāng)DSR和DTR都處于有效(ON)狀態(tài)時,才能在DTE和DCE之間進(jìn)行數(shù)據(jù)傳送操作。若DTE要發(fā)送數(shù)據(jù),則預(yù)先將DTR線置成有效(ON)狀態(tài),等CTS線上收到有效(ON)狀態(tài)的回答后,才能在TXD線上發(fā)送串行數(shù)據(jù)。這種順序的規(guī)定對半雙工的通信線路特別有用,因?yàn)榘腚p工的通信確定DCE已由接收方向改為發(fā)送方向,這時線路才能開始發(fā)送。
可以從表5-1了解到硬件線路上的方向。另外值得一提的是,如果從計算機(jī)的角度來看這些腳位的通信狀況的話,流進(jìn)計算機(jī)端的,可以看為數(shù)字輸入;而流出計算機(jī)端的,則可以看為數(shù)字輸出。
數(shù)字輸入與數(shù)字輸出的關(guān)系是什么呢?從工業(yè)應(yīng)用的角度來看,所謂的輸入就是用來“監(jiān)測”,而輸出就是用來“控制”的。
2.串口電氣特性
首先需要說明的是,RS-232-C標(biāo)準(zhǔn)最初是為遠(yuǎn)程通信數(shù)據(jù)終端設(shè)備(Data Terminal Equipment,DTE)與數(shù)據(jù)通信設(shè)備(Data Communication Equipment,DCE)而制定的,因此這個標(biāo)準(zhǔn)的制定,并未考慮計算機(jī)系統(tǒng)的應(yīng)用要求。但目前它又廣泛地被借來用于計算機(jī)(更準(zhǔn)確的說,是計算機(jī)接口)與終端或外設(shè)之間的近端連接標(biāo)準(zhǔn)。顯然,這個標(biāo)準(zhǔn)的有些規(guī)定和計算機(jī)系統(tǒng)是不一致的,甚至是相矛盾的。有了對這種背景的了解,我們對RS-232C標(biāo)準(zhǔn)與計算機(jī)不兼容的地方就不難理解了。
其次是,RS-232C標(biāo)準(zhǔn)中所提到的“發(fā)送”和“接收”,都是站在DTE立場上,而不是站在DCE的立場來定義的。由于在計算機(jī)系統(tǒng)中,往往是CPU和I/O設(shè)備之間傳送信息,兩者都是DTE,因此雙方都能發(fā)送和接收數(shù)據(jù)。
EIA-RS-232C對電氣特性、邏輯電平和各種信號線功能都作了規(guī)定。
在TXD和RXD上:邏輯1為?3V~?15V; 邏輯0為+3~+15V。
在RTS、CTS、DSR、DTR和DCD等控制線上:
信號有效(接通,ON狀態(tài),正電壓)為+3V~+15V。
信號無效(斷開,OFF狀態(tài),負(fù)電壓)為?3V~?15V。
以上規(guī)定說明了RS-232C標(biāo)準(zhǔn)對邏輯電平的定義。對于數(shù)據(jù)(信息碼):邏輯“1”的電平低于?3V,邏輯“0”的電平高于+ 3V。對于控制信號:接通狀態(tài)(ON)即信號有效的電平高于+3V,斷開狀態(tài)(OFF)即信號無效的電平低于?3V,也就是當(dāng)傳輸電平的絕對值大于3V時,電路可以有效地檢查出來,介于?3~+3V之間的電壓無意義,低于?15V或高于+15V的電壓也認(rèn)為無意義,因此,實(shí)際工作時,應(yīng)保證電平在±(3~15)V之間。
RS-232C是用正負(fù)電壓來表示邏輯狀態(tài)的,與TTL以高低電平表示邏輯狀態(tài)的規(guī)定不同,因此,為了能夠同計算機(jī)接口或終端的TTL器件連接,必須在RS-232C與TTL電路之間進(jìn)行電平和邏輯關(guān)系的變換,實(shí)現(xiàn)這種變換的方法可用分立元件,也可用集成電路芯片。目前較為廣泛地使用集成電路轉(zhuǎn)換器件,如MCl488、SN75150芯片可完成TTL電平到EIA電平的轉(zhuǎn)換,而MCl489和SN75154可實(shí)現(xiàn)EIA電平到TTL電平的轉(zhuǎn)換。
現(xiàn)在常用的RS-232C/TTL轉(zhuǎn)換芯片是MAX232。MAX232內(nèi)部有電壓倍增電路和轉(zhuǎn)換電路,只需+5V電源便可完成TTL與EIA雙向電平轉(zhuǎn)換。
1.1.3 串口通信線路連接
1.近距離通信線路連接
當(dāng)兩臺RS-232串口設(shè)備通信距離較近時(<15m),可以用電纜線直接將兩臺設(shè)備的RS-232端口連接,若通信距離較遠(yuǎn)(>15m)時,需附加調(diào)制解調(diào)器(Modem)。
在RS-232的應(yīng)用中,很少嚴(yán)格按照RS-232標(biāo)準(zhǔn)。其主要原因是,許多定義的信號在大多數(shù)的應(yīng)用中并沒有用上。在許多應(yīng)用中,例如Modem,只用了9個信號(兩條數(shù)據(jù)線、6條控制線、一條地線);在其他一些應(yīng)用中,可能只需要5個信號(兩條數(shù)據(jù)線、兩條握手線、一條地線);還有一些應(yīng)用,可能只需要數(shù)據(jù)線,而不需要握手線,即只需要3個信號線。因?yàn)樵诳刂祁I(lǐng)域,在近距離通信時常采用RS-232,所以這里只對近距離通信的線路連接進(jìn)行討論。
當(dāng)通信距離較近時,通信雙方不需要Modem,可以直接連接,這種情況下,只需使用少數(shù)幾根信號線。最簡單的情況,在通信中根本不需要RS-232C的控制聯(lián)絡(luò)信號,只需3根線(發(fā)送線、接收線、信號地線)便可實(shí)現(xiàn)全雙工異步串行通信。
圖5-8(a)所示是兩臺串口通信設(shè)備之間的最簡單連接(即三線連接),圖中的2號接收腳與3號發(fā)送腳交叉連接是因?yàn)樵谥边B方式時,把通信雙方都當(dāng)作數(shù)據(jù)終端設(shè)備看待,雙方都可以發(fā)送也可接收。在這種方式下,通信雙方的任何一方,只要請求發(fā)送RTS有效和數(shù)據(jù)終端準(zhǔn)備好DTR有效就能開始發(fā)送和接收。
圖5-8 串口設(shè)備最簡單的連接
如果只有一臺計算機(jī),而且也沒有兩個串行通信端口可以使用,則將第2腳與第3管腳短路,如圖5-8(b)所示,那么由第3腳的輸出信號就會被傳送到第2腳而送到同一串行端口的輸入緩沖區(qū),程序只要再由相同的串行端口上作讀取的操作,即可將數(shù)據(jù)讀入,同樣可以形成一個測試環(huán)境。
2.遠(yuǎn)距離通信線路連接
一般PC采用RS-232通信接口,當(dāng)PC與串口設(shè)備通信距離較遠(yuǎn)時,二者不能用電纜直接連接,可采用RS-485總線。
當(dāng)PC與多臺具有RS-232接口的設(shè)備遠(yuǎn)距離通信時,可使用RS-232/RS-485型通信接口轉(zhuǎn)換器,將計算機(jī)上的RS-232通信口轉(zhuǎn)為RS-485通信口,在信號進(jìn)入設(shè)備前再使用RS-485/RS-232轉(zhuǎn)換器將RS-485通信口轉(zhuǎn)為RS-232通信口,再與設(shè)備相連,如圖5-9所示。
|
圖5-9 PC與多個RS-232串口設(shè)備遠(yuǎn)距離連接
當(dāng)PC與多臺具有RS-485接口的設(shè)備通信時,由于兩端設(shè)備接口電氣特性不一,不能直接相連,因此,也采用RS-232接口到RS-485接口轉(zhuǎn)換器將RS-232接口轉(zhuǎn)換為RS-485信號電平,再與串口設(shè)備相連。
如果PC直接提供RS-485接口,與多臺具有RS-485接口的設(shè)備通信時不用轉(zhuǎn)換器可直接相連。
RS-485接口只有兩根線要連接,有+、?端(或稱A、B端)區(qū)分,用雙絞線將所有串口設(shè)備的接口并聯(lián)在一起即可。
1.1.4 計算機(jī)中的串行端口
在PC上,有各種各樣的接頭,其中有兩個9針的接頭區(qū),如圖5-10所示,這就是串行通信端口。PC上的串行接口有多個名稱:232口、串口、通信口、COM口和異步口等。
圖5-10 PC上的串行端口
1.串行端口的中斷
(1)中斷概述。
中斷即IRQ(Interrupt Request)。CPU一般情況下是連續(xù)進(jìn)行工作,一旦外圍設(shè)備(如打印機(jī)、串行端口等)需要CPU處理事件時,就會通過硬件線路(即中斷線路)來通知CPU。CPU收到通知后,就會停下正在做的工作,轉(zhuǎn)而去執(zhí)行外圍設(shè)備的請求。
(2)查看計算機(jī)內(nèi)的中斷。
在Windows系統(tǒng)中,打開設(shè)備管理器,在“查看”菜單項選擇“依照類型排序資源”,打開中斷請求(IRQ)項,可以看到計算機(jī)中各設(shè)備的中斷分配信息。如圖5-11所示。
2.串行端口的地址
(1)地址概述。
在計算機(jī)內(nèi),每個設(shè)備都有一個地址。當(dāng)CPU需要傳送信息或者是從外圍設(shè)備讀取信息時,必須知道信息在什么地方,這個具體地方就是外圍設(shè)備的地址。在計算機(jī)內(nèi)部使用十六進(jìn)制的方式記錄每個外圍設(shè)備的地址,每個設(shè)備的地址都是不一樣的,這樣才能保證信息的讀寫不會出錯。一個設(shè)備所要占用的地址號碼可能不止一個,如果需要占用多個地址,那么所占用的地址一般情況下是連續(xù)的。
(2)查看計算機(jī)內(nèi)的地址
在Windows系統(tǒng)中,打開設(shè)備管理器,在“查看”菜單項選擇“依照類型排序資源”,打開輸入/輸出(IO)項,可以看到計算機(jī)中各設(shè)備的地址分配信息。如圖5-12所示。
?
圖5-11 查看計算機(jī)內(nèi)設(shè)備中斷信息 圖5-12 查看計算機(jī)內(nèi)的設(shè)備地址信息界面
每個與計算機(jī)相連的具有交互能力的設(shè)備,一定擁有惟一的地址即在圖5-12的列表中所顯示的。而且這些地址的長度為一個字節(jié)。一個設(shè)備可能由于功能較多,無法簡單地使用一個字節(jié)完整地表達(dá),因此,可能會占用一段連續(xù)的地址。
3.查看串行端口信息
(1)查看設(shè)備信息。
進(jìn)入Windows系統(tǒng)中,單擊“我的電腦”圖標(biāo)在彈出的菜單中選擇屬性項,在出現(xiàn)的系統(tǒng)屬性窗口中選擇“硬件”項中的“設(shè)備管理器”,出現(xiàn)設(shè)備管理器列表,此列表中有端口COM和LPT設(shè)備信息,如圖5-13所示。
(2)查看端口屬性。
選擇通信端口COM1,單擊右鍵,選擇“屬性”,可以查看端口的低級設(shè)置(圖5-14)及其資源(圖5-15)。
?
圖5-13 查看串口設(shè)備信息界面 圖5-14 查看端口設(shè)置界面
在“端口設(shè)置”選項卡中,可以看到默認(rèn)的波特率和其他設(shè)置,這些設(shè)置可以在端口設(shè)置中改變,也可以在應(yīng)用程序中很方便地編程修改。
在“資源”選項卡中,可以看到一般PC上COM1口使用4號中斷,輸入/輸出范圍(即地址)為03F8-03FF;按相同方法可以看到,COM2口使用3號中斷,輸入/輸出范圍為02F8-02FF。
COM1與COM2的地址是3F8~3FF和2F8~2FF,在這個范圍內(nèi)的每個地址都有不同的功能,這些功能分別通過寄存器來實(shí)現(xiàn)。寄存器是用來暫時存放信息的地方。這些信息以位的形式存儲,一般以一個字節(jié)作為一個單位。讀/寫寄存器就是讀取這些位所代表的狀態(tài),以便可以執(zhí)行與串行端口相關(guān)的功能。
總結(jié)
- 上一篇: 串口起始位检测
- 下一篇: 基于FPGA的UART接口协议设计