串口通信協議--同步異步,位傳輸

就是RS-232的串口通信協議。一個TX端,一個RX端,分別用於發送和接收數據。 
具體如下: 
串行通信協議分同步協議和異步協議。 
(1)異步通信協議的實例——起止式異步協議 
特點與格式: 
起止式異步協議的特點是一個字符一個字符傳輸,並且傳送一個字符總是以起始位開始,以停止位結束,字符之間沒有固定的時間間隔要求。其格式如圖3所示。每一個字符的前面都有一位起始位(低電平,邏輯值0),字符本身有5~7位數據位組成,接着字符後面是一位校驗位(也可以沒有校驗位),最後是一位,或意味半,或二位停止位,停止位後面是不定長度的空閒位。停止位和空閒位都規定爲高電平(邏輯值),這樣就保證起始位開始處一定有一個下跳沿。 
從圖中可以看出,這種格式是靠起始位和停止位來實現字符的界定或同步的,故稱爲起始式協議。傳送時,數據的低位在前,高位在後,圖4表示了傳送一個字符E的ASCAII碼的波形1010001。當把它的最低有效位寫到右邊時,就是E的ASCII碼1000101=45H。 
起/止位的作用:起始位實際上是作爲聯絡信號附加進來的,當它變爲低電平時,告訴收方傳送開始。它的到來,表示下面接着是數據位來了,要準備接收。而停止位標誌一個字符的結束,它的出現,表示一個字符傳送完畢。這樣就爲通信雙方提供了何時開始收發,何時結束的標誌。傳送開始前,發收雙方把所採用的起止式格式(包括字符的數據位長度,停止位位數,有無校驗位以及是奇校驗還是偶校驗等)和數據傳輸速率作統一規定。傳送開始後,接收設備不斷地檢測傳輸線,看是否有起始位到來。當收到一系列的“1”(停止位或空閒位)之後,檢測到一個下跳沿,說明起始位出現,起始位經確認後,就開始接收所規定的數據位和奇偶校驗位以及停止位。經過處理將停止位去掉,把數據位拼裝成一個並行字節,並且經校驗後,無奇偶錯纔算正確的接收一個字符。一個字符接收完畢,接收設備有繼續測試傳輸線,監視“0”電平的到來和下一個字符的開始,直到全部數據傳送完畢。 
由上述工作過程可看到,異步通信是按字符傳輸的,每傳輸一個字符,就用起始位來通知收方,以此來重新覈對收發雙方同步。若接收設備和發送設備兩者的時鐘頻率略有偏差,這也不會因偏差的累積而導致錯位,加之字符之間的空閒位也爲這種偏差提供一種緩衝,所以異步串行通信的可靠性高。但由於要在每個字符的前後加上起始位和停止位這樣一些附加位,使得傳輸效率變低了,只有約80%。因此,起止協議一般用在數據速率較慢的場合(小於19.2kbit/s)。在高速傳送時,一般要採用同步協議。 
(2)面向字符的同步協議 
特點與格式:這種協議的典型代表是IBM公司的二進制同步通信協議(BSC)。它的特點是一次傳送由若干個字符組成的數據塊,而不是隻傳送一個字符,並規定了10個字符作爲這個數據塊的開頭與結束標誌以及整個傳輸過程的控制信息,它們也叫做通信控制字。由於被傳送的數據塊是由字符組成,故被稱作面向字符的協議。 
特定字符(控制字符)的定義:由上面的格式可以看出,數據塊的前後都加了幾個特定字符。SYN是同步字符(synchronous Character),每一幀開始處都有SYN,加一個SYN的稱單同步,加兩個SYN的稱雙同步設置同步字符是起聯絡作用,傳送數據時,接收端不斷檢測,一旦出現同步字符,就知道是一幀開始了。接着的SOH是序始字符(Start Of Header),它表示標題的開始。標題中包括院地址、目的地址和路由指示等信息。STX是文始字符(Start Of Text),它標誌着傳送的正文(數據塊)開始。數據塊就是被傳送的正文內容,由多個字符組成。數據塊後面是組終字符ETB(End Of Transmission Block)或文終字符ETX(End Of Text),其中ETB用在正文很長、需要分成若干個分數據塊、分別在不同幀中發送的場合,這時在每個分數據塊後面用文終字符ETX。一幀的最後是校驗碼,它對從SOH開始到ETX(或ETB)字段進行校驗,校驗方式可以是縱橫奇偶校驗或CRC。另外,在面向字符協議中還採用了一些其他通信控制字,它們的名稱如下表所示: 
數據透明的實現:面向字符的同步協議,不象異步起止協議那樣,需要在每個字符前後附加起始和停止位,因此,傳輸效率提高了。同時,由於採用了一些傳輸控制字,故增強了通信控制能力和校驗功能。但也存在一些問題,例如,如何區別數據字符代碼和特定字符代碼的問題,因爲在數據塊中完全有可能出現與特定字符代碼相同的數據字符,這就會發生誤解。比如正文有個與文終字符ETX的代碼相同的數據字符,接收端就不會把它當作爲普通數據處理,而誤認爲是正文結束,因而產生差錯。因此,協議應具有將特定字符作爲普通數據處理的能力,這種能力叫做“數據透明”。爲此,協議中設置了轉移字符DLE(Data Link Escape)。當把一個特定字符看成數據時,在它前面要加一個DLE,這樣接收器收到一個DLE就可預知下一個字符是數據字符,而不會把它當作控制字符來處理了。DLE本身也是特定字符,當它出現在數據塊中時,也要在它前面加上另一個DLE。這種方法叫字符填充。字符填充實現起來相當麻煩,且依賴於字符的編碼。正是由於以上的缺點,故又產生了新的面向比特的同步協議。 
(3)面向比特的同步協議 
特點與格式:面向比特的協議中最具有代表性的是IBM的同步數據鏈路控制規程SDLC(Synchronous Data Link Control),國際標準化組織ISO(International Standard Organization)的高級數據鏈路控制規程HDLC(High Level Data link Control),美國國家標準協會(Americal National Standard Institute)的先進數據通信規?

 

串口接線:DB9 & DB25 
目前較爲常用的串口有9針串口(DB9)和25針串口(DB25),通信距離較近時(<12m),可以用電纜線直接連接標準RS232端口(RS422,RS485較遠),若距離較遠,需附加調制解調器(MODEM)。最爲簡單且常用的是三線制接法,即地、接收數據和發送數據三腳相連,本文只涉及到最爲基本的接法,且直接用RS232相連。 
1.DB9和DB25的常用信號腳說明 
 9針串口(DB9) 25針串口(DB25) 
針號 功能說明 縮寫 針號 功能說明 縮寫 
1 數據載波檢測 DCD 8 數據載波檢測 DCD 
2 接收數據 RXD 3 接收數據 RXD 
3 發送數據 TXD 2 發送數據 TXD 
4 數據終端準備 DTR 20 數據終端準備 DTR 
5 信號地 GND 7 信號地 GND 
6 數據設備準備好 DSR 6 數據準備好 DSR 
7 請求發送 RTS 4 請求發送 RTS 
8 清除發送 CTS 5 清除發送 CTS 
9 振鈴指示 DELL 22 振鈴指示 DELL 
2.RS232C串口通信接線方法(三線制) 
首先,串口傳輸數據只要有接收數據針腳和發送針腳就能實現:同一個串口的接收腳和發送腳直接用線相連,兩個串口相連或一個串口和多個串口相連 
· 同一個串口的接收腳和發送腳直接用線相連 對9針串口和25針串口,均是2與3直接相連; 
· 兩個不同串口(不論是同一臺計算機的兩個串口或分別是不同計算機的串口) 
上面表格是對微機標準串行口而言的,還有許多非標準設備,如接收GPS數據或電子羅盤數據,只要記住一個原則:接收數據針腳(或線)與發送數據針腳(或線)相連,彼此交叉,信號地對應相接,就能百戰百勝。 
3.串口調試中要注意的幾點: 
串口調試時,準備一個好用的調試工具,如串口調試助手、串口精靈等,有事半功倍之效果; 強烈建議不要帶電插撥串口,插撥時至少有一端是斷電的,否則串口易損壞。 
單工、半雙工和全雙工的定義 
 如果在通信過程的任意時刻,信息只能由一方A傳到另一方B,則稱爲單工。 
如果在任意時刻,信息既可由A傳到B,又能由B傳A,但只能由一個方向上的傳輸存在,稱爲半雙工傳輸。 
如果在任意時刻,線路上存在A到B和B到A的雙向信號傳輸,則稱爲全雙工。 
電話線就是二線全雙工信道。 由於採用了回波抵消技術,雙向的傳輸信號不致混淆不清。雙工信道有時也將收、發信道分開,採用分離的線路或頻帶傳輸相反方向的信號,如回線傳輸。 
奇偶校驗 
串行數據在傳輸過程中,由於干擾可能引起信息的出錯,例如,傳輸字符‘E’,其各位爲: 
0100,0101=45H 
D7 D0 
由於干擾,可能使位變爲1,這種情況,我們稱爲出現了“誤碼”。我們把如何發現傳輸中的錯誤,叫“檢錯”。發現錯誤後,如何消除錯誤,叫“糾錯”。 
最簡單的檢錯方法是“奇偶校驗”,即在傳送字符的各位之外,再傳送1位奇/偶校驗位。可採用奇校驗或偶校驗。 
奇校驗:所有傳送的數位(含字符的各數位和校驗位)中,“1”的個數爲奇數,如: 
1 0110,0101 
0 0110,0001 
偶校驗:所有傳送的數位(含字符的各數位和校驗位)中,“1”的個數爲偶數,如: 
1 0100,0101 
0 0100,0001 

奇偶校驗能夠檢測出信息傳輸過程中的部分誤碼(1位誤碼能檢出,2位及2位以上誤碼不能檢出),同時,它不能糾錯。在發現錯誤後,只能要求重發。但由於其實現簡單,仍得到了廣泛使用。 
有些檢錯方法,具有自動糾錯能力。如循環冗餘碼(CRC)檢錯等。 
串口通訊流控制 
我們在串行通訊處理中,常常看到RTS/CTS和XON/XOFF這兩個選項,這就是兩個流控制的選項,目前流控制主要應用於調制解調器的數據通訊中,但對普通RS232編程,瞭解一點這方面的知識是有好處的。那麼,流控制在串行通訊中有何作用,在編制串行通訊程序怎樣應用呢?這裏我們就來談談這個問題。 

1.流控制在串行通訊中的作用 
這裏講到的“流”,當然指的是數據流。數據在兩個串口之間傳輸時,常常會出現丟失數據的現象,或者兩臺計算機的處理速度不同,如臺式機與單片機之間的通訊,接收端數據緩衝區已滿,則此時繼續發送來的數據就會丟失。現在我們在網絡上通過MODEM進行數據傳輸,這個問題就尤爲突出。流控制能解決這個問題,當接收端數據處理不過來時,就發出“不再接收”的信號,發送端就停止發送,直到收到“可以繼續發送”的信號再發送數據。因此流控制可以控制數據傳輸的進程,防止數據的丟失。 PC機中常用的兩種流控制是硬件流控制(包括RTS/CTS、DTR/CTS等)和軟件流控制XON/XOFF(繼續/停止),下面分別說明。 

2.硬件流控制 
硬件流控制常用的有RTS/CTS流控制和DTR/DSR(數據終端就緒/數據設置就緒)流控制。 
硬件流控制必須將相應的電纜線連上,用RTS/CTS(請求發送/清除發送)流控制時,應將通訊兩端的RTS、CTS線對應相連,數據終端設備(如計算機)使用RTS來起始調制解調器或其它數據通訊設備的數據流,而數據通訊設備(如調制解調器)則用CTS來起動和暫停來自計算機的數據流。這種硬件握手方式的過程爲:我們在編程時根據接收端緩衝區大小設置一個高位標誌(可爲緩衝區大小的75%)和一個低位標誌(可爲緩衝區大小的25%),當緩衝區內數據量達到高位時,我們在接收端將CTS線置低電平(送邏輯0),當發送端的程序檢測到CTS爲低後,就停止發送數據,直到接收端緩衝區的數據量低於低位而將CTS置高電平。RTS則用來標明接收設備有沒有準備好接收數據。 
常用的流控制還有還有DTR/DSR(數據終端就緒/數據設置就緒)。我們在此不再詳述。由於流控制的多樣性,我個人認爲,當軟件裏用了流控制時,應做詳細的說明,如何接線,如何應用。 

3.軟件流控制 
由於電纜線的限制,我們在普通的控制通訊中一般不用硬件流控制,而用軟件流控制。一般通過XON/XOFF來實現軟件流控制。常用方法是:當接收端的輸入緩衝區內數據量超過設定的高位時,就向數據發送端發出XOFF字符(十進制的19或Control-S,設備編程說明書應該有詳細闡述),發送端收到XOFF字符後就立即停止發送數據;當接收端的輸入緩衝區內數據量低於設定的低位時,就向數據發送端發出XON字符(十進制的17或Control-Q),發送端收到XON字符後就立即開始發送數據。一般可以從設備配套源程序中找到發送的是什麼字符。 
應該注意,若傳輸的是二進制數據,標誌字符也有可能在數據流中出現而引起誤操作,這是軟件流控制的缺陷,而硬件流控制不會有這個問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章