串口是串列介面(serial port)的簡稱,也稱為串列通訊介面或COM介面。
串口通訊是指採用串列通訊協定(serial communication)在一條訊號線上將資料一個位元一個位元地逐位進行傳輸的通訊模式。
串口按電氣標準及協議來劃分,包括RS-232-C、RS-422、RS485等。
1.串列通訊
在串列通訊中,資料在1位寬的單條線路上進行傳輸,一個位元組的資料要分為8次,由低位到高位按順序一位一位的進行傳送。
串列通訊的資料是逐位傳輸的,發送方發送的每一位都具有固定的時間間隔,這就要求接收方也要按照發送方同樣的時間間隔來接收每一位。不僅如此,接收方還必須能夠確定一個資訊組的開始和結束。
常用的兩種基本串列通訊方式包括同步通訊和非同步通訊。
1.1串列同步通訊
同步通訊(SYNC:synchronous data communication)是指在約定的通訊速率下,發送端和接收端的時鐘訊號頻率和相位始終保持一致(同步),這樣就保證了通訊雙方在發送和接收資料時具有完全一致的定時關係。
同步通訊把許多字元組成一個資訊組(資訊幀),每幀的開始用同步字元來指示,一次通訊只傳送一幀資訊。在傳輸資料的同時還需要傳輸時鐘訊號,以便接收方可以用時針訊號來確定每個資訊位。
同步通訊的優點是傳送資訊的位元幾乎不受限制,一次通訊傳輸的資料有幾十到幾千個位元組,通訊效率較高。同步通訊的缺點是要求在通訊中始終保持精確的同步時鐘,即發送時鐘和接收時鐘要嚴格的同步(常用的做法是兩個裝置使用同一個時鐘源)。
在後續的串口通訊與編程中將只討論非同步通訊方式,所以在這裡就不對同步通訊做過多的贅述了。
1.2串列非同步通訊
非同步通訊(ASYNC:asynchronous data communication),又稱為起止式非同步通訊,是以字元為單位進行傳輸的,字元之間沒有固定的時間間隔要求,而每個字元中的各位則以固定的時間傳送。
在非同步通訊中,收發雙方取得同步是通過在字元格式設定中設定起始位和停止位的方法來實現的。具體來說就是,在一個有效字元正式發送之前,發送器先發送一個起始位,然後發送有效字元位,在字元結束時再發送一個停止位,起始位至停止位構成一幀。停止位至下一個起始位之間是不定長的空閑位,並且規定起始位為低電平(邏輯值為0),停止位和空閑位都是高電平(邏輯值為1),這樣就保證了起始位開始處一定會有一個下跳沿,由此就可以標誌一個字元傳輸的起始。而根據起始位和停止位也就很容易的實現了字元的界定和同步。
顯然,採用非同步通訊時,發送端和接收端可以由各自的時鐘來控制資料的發送和接收,這兩個時鐘源彼此獨立,可以互不同步。
下面簡單的說說非同步通訊的資料發送和接收過程。
1.2.1非同步通訊的資料格式
在介紹非同步通訊的資料發送和接收過程之前,有必要先弄清楚非同步通訊的資料格式。
非同步通訊規定傳輸的資料格式由起始位(start bit)、資料位元(data bit)、同位位元(parity bit)和停止位(stop bit)組成,1所示(該圖中未畫出同位位元,因為奇偶檢驗位不是必須有的,如果有奇偶檢驗位,則奇偶檢驗位應該在資料位元之後,停止位之前)。
圖1 非同步通訊資料格式
(1)起始位:起始位必須是持續一個位元時間的邏輯0電平,標誌傳輸一個字元的開始,接收方可用起始位使自己的接收時鐘與發送方的資料同步。
(2)資料位元:資料位元緊跟在起始位之後,是通訊中的真正有效資訊。資料位元的位元可以由通訊雙方共同約定,一般可以是5位、7位或8位,標準的ASCII碼是0~127(7位),擴充的ASCII碼是0~255(8位)。傳輸資料時先傳送字元的低位,後傳送字元的高位。
(3)同位位元:同位位元僅佔一位,用於進行奇數同位或偶校正,奇偶檢驗位不是必須有的。如果是奇數同位,需要保證傳輸的資料總共有奇數個邏輯高位;如果是偶校正,需要保證傳輸的資料總共有偶數個邏輯高位。
舉例來說,假設傳輸的資料位元為01001100,如果是奇數同位,則奇數同位位為0(要確保總共有奇數個1),如果是偶校正,則偶校正位為1(要確保總共有偶數個1)。
由此可見,同位位元僅是對資料進行簡單的置邏輯高位或邏輯低位,不會對資料進行實質的判斷,這樣做的好處是接收裝置能夠知道一個位的狀態,有可能判斷是否有雜訊幹擾了通訊以及傳輸的資料是否同步。
(4)停止位:停止位可以是是1位、1.5位或2位,可以由軟體設定。它一定是邏輯1電平,標誌著傳輸一個字元的結束。
(5)空閑位:空閑位是指從一個字元的停止位結束到下一個字元的起始位開始,表示線路處於空閑狀態,必須由高電平來填充。
1.2.2非同步通訊的資料發送過程
清楚了非同步通訊的資料格式之後,就可以按照指定的資料格式發送資料了,發送資料的具體步驟如下:
(1)初始化後或者沒有資料需要發送時,發送端輸出邏輯1,可以有任意數量的空閑位。
(2)當需要發送資料時,發送端首先輸出邏輯0,作為起始位。
(3)接著就可以開始輸出資料位元了,發送端首先輸出資料的最低位D0,然後是D1,最後是資料的最高位。
(4)如果設有奇偶檢驗位,發送端輸出檢驗位。
(5)最後,發送端輸出停止位(邏輯1)。
(6)如果沒有資訊需要發送,發送端輸出邏輯1(空閑位),如果有資訊需要發送,則轉入步驟(2)。
1.2.3非同步通訊的資料接收過程
在非同步通訊中,接收端以接收時鐘和傳輸速率因子決定每一位的時間長度。下面以傳輸速率因子等於16(接收時鐘每16個刻度使接收移位寄存器移位一次)為例來說明。
(1)開始通訊,訊號線為空白閑(邏輯1),當檢測到由1到0的跳變時,開始對接收時鐘計數。
(2)當計到8個時鐘的時候,對輸入訊號進行檢測,若仍然為低電平,則確認這是起始位,而不是幹擾訊號。
(3)接收端檢測到起始位後,隔16個接收時鐘對輸入訊號檢測一次,把對應的值作為D0位元據。
(4)再隔16個接收時鐘,對輸入訊號檢測一次,把對應的值作為D1位元據,直到全部資料位元都輸入。
(5)檢驗奇偶檢驗位。
(6)接收到規定的資料位元個數和校正位之後,通訊介面電路希望收到停止位(邏輯1),若此時未收到邏輯1,說明出現了錯誤,在狀態寄存器中置“幀錯誤”標誌;若沒有錯誤,對全部資料位元進行同位,無校正錯時,把資料位元從移位寄存器中取出送至資料輸入寄存器,若校正錯,在狀態寄存器中置“奇偶錯”標誌。
(7)本幀資訊全部接收完,把線路上出現的高電平作為空白閑位。
(8)當訊號再次變為低時,開始進入下一幀的檢測。
以上就是非同步通訊中資料發送和接收的全過程了。
1.3幾個概念
為了更好的理解串口通訊,我們還需要瞭解幾個串口通訊當中的基本概念。
(1)發送時鐘:發送資料時,首先將要發送的資料送入移位寄存器,然後在發送時鐘的控制下,將該並行資料逐位移位輸出。
(2)接收時鐘:在接收串列資料時,接收時鐘的上升沿對接收資料採樣,進行資料位元檢測,並將其移入接收器的移位寄存器中,最後組成並行資料輸出。
(3)傳輸速率因子:傳輸速率因子是指發送或接收1個資料位元所需要的時鐘脈衝個數。
2.串口接頭
常用的串口接頭有兩種,一種是9針串口(簡稱DB-9),一種是25針串口(簡稱DB-25)。每種接頭都有公頭和母頭之分,其中帶針狀的接頭是公頭,而帶孔狀的接頭是母頭。9針串口的外觀2所示。
圖2 DB-9外觀圖
由圖2可以看出,在9針串口接頭中,公頭和母頭的管腳定義順序是不一樣,這一點需要特別注意。那麼,這些管腳都有什麼作用呢?9針串口和25針串口常用管腳的功能說明3所示。
圖3 9針串口和25針串口常用管腳功能說明
3.RS-232C標準
常用的串列通訊介面標準有RS-232C、RS-422、RS-423和RS-485。其中,RS-232C作為串列通訊介面的電氣標準定義了資料終端設備(DTE:data terminal equipment)和資料通信設備(DCE:data communication equipment)間按位串列傳輸的介面資訊,合理安排了介面的電氣訊號和機械要求,在世界範圍內得到了廣泛的應用。
3.1電氣特性
RS-232C對電器特性、邏輯電平和各種訊號功能都做了規定,如下:
在TXD和RXD資料線上:
(1)邏輯1為-3~-15V的電壓
(2)邏輯0為3~15V的電壓
在RTS、CTS、DSR、DTR和DCD等控制線上:
(1)訊號有效(ON狀態)為3~15V的電壓
(2)訊號無效(OFF狀態)為-3~-15V的電壓
由此可見,RS-232C是用正負電壓來表示邏輯狀態,與晶體管-晶體管邏輯整合電路(TTL)以高低電平表示邏輯狀態的規定正好相反。
3.2訊號線分配
RS-232C標準介面有25條線,其中,4條資料線、11條控制線、3條定時線以及7條備用和未定義線。那麼,這些訊號線在9針串口和25針串口的管腳上是如何分配的呢?9針串口和25針串口訊號線分配4所示。
圖4 9針串口和25針串口訊號線分配
下面對這些訊號線做個簡單的介紹。
(1)資料裝置準備好(DSR),有效狀態(ON)表示資料通信設備處於可以使用狀態。
(2)資料終端準備好(DTR),有效狀態(ON)表示資料終端設備處於可以使用狀態。
這兩個裝置狀態訊號有效,只表示裝置本身可用,並不說明通訊鏈路可以開始進行通訊了,能否開始進行通訊要由下面的一些控制訊號決定。
(3)請求發送(RTS),用來表示資料終端設備(DTE)請求資料通信設備(DCE)發送資料。
(4)允許發送(CTS),用來表示資料通信設備(DCE)已經準備好了資料,可以向資料終端設備(DTE)發送資料,是對請求發送訊號RTS的響應。
請求發送(RTS)和允許發送(CTS)用於半雙工的通訊系統中,在全雙工系統的系統中,不需要使用請求發送(RTS)和允許發送(CTS)訊號,直接將其置為ON即可。
(5)資料載波檢出(DCD),用於表示資料通信設備(DCE)已接通通訊鏈路,告知資料終端設備(DTE)準備接收資料。
(6)響鈴指示(RI),當資料通信設備收到交換台送來的響鈴呼叫符號時,使該訊號有效(ON),通知終端,已被呼叫。
(7)發送資料(TXD),資料終端設備(DTE)通過該訊號線將串列資料發送到資料通信設備(DCE)。
(8)接收訊號(RXD),資料終端設備(DTE)通過該訊號線接收從資料通信設備(DCE)發來的串列資料。
(9)地線(SG、PG),分別表示訊號地和保護地訊號線。