串口通訊―通信協議
數據透明的實現:面向字符的同步協議,不象異步起止協議那樣,需要在每個字符前后附加起始和停止位,因此,傳輸效率提高了。同時,由于采用了一些傳輸控制字,故增強了通信控制能力和校驗功能。但也存在一些問題,例如,如何區別數據字符代碼和特定字符代碼的問題,因為在數據塊中完全有可能出現與特定字符代碼相同的數據字符,這就會發生誤解。比如正文有個與文終字符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)的先進數據通信規程ADCCP(Advanced Data Communication Control Procedure)。這些協議的特點是所傳輸的一幀數據可以是任意位,而且它是靠約定的位組合模式,而不是靠特定字符來標志幀的開始和結束,故稱“面向比特”的協議。這中協議的一般幀格式如圖5所示:
圖5
幀信息的分段:由圖5可見,SDLC/HDLC的一幀信息包括以下幾個場(Filed),所有場都是從有效位開始傳送。
(1) SDLC/HDLC標志字符:SDLC/HDLC協議規定,所有信息傳輸必須以一個標志字符開始,且以同一個字符結束。這個標志字符是 01111110,稱標志場(F)。從開始標志到結束標志之間構成一個完整的信息單位,稱為一幀(Frame)。所有的信息是以幀的形傳輸的,而標志字符提供了每一幀的邊界。接收端可以通過搜索“01111110”來探知幀的開頭和結束,以此建立幀同步。
(2)地址場和控制場:在標志場之后,可以有一個地址場A(Address)和一個控制場C(Control)。地址場用來規定與之通信的次站的地址。控制場可規定若干個命令。SDLC規定A場和C場的寬度為8位或16位。接收方必須檢查每個地址字節的第一位,如果為“0”,則后面跟著另一個地址字節;若為 “1”,則該字節就是最后一個地址字節。同理,如果控制場第一個字節的第一位為為“0”,則還有第二個控制場字節,否則就只有一個字節。
(3)信息場:跟在控制場之后的是信息場I(Information)。I場包含有要傳送的數據,并不是每一幀都必須有信息場。即數據場可以為0,當它為0時,則這一幀主要是控制命令。
(4)幀校驗信息:緊跟在信息場之后的是兩字節的爭校驗,幀校驗場稱為FC(Frame Check)場或稱為幀校驗序列FCS(Frame check Squence)。SDLC/HDLC均采用16位循環冗余校驗碼CRC(Cyclic Redundancy Code)。除了標志場和自動插入的“0”以外,所有的信息都參加CRC計算。
實際應用時的兩個技術問題:
(1) “0”位插入/刪除:如上所述,SDLC/HDLC協議規定以01111110為標志字節,但在信息場中也完全有可能有同一種模式的字符,為了把它與標志區分開來,所以采取了“0”位插入和刪除技術。具體作法是發送端在發送所有信息(除標志字節外)時,只要遇到連續5個“1”,就自動插入一個“0”,當接收端在接收數據時(除標志字節)如果連續收到5個“1”,就自動將其后的一個“0”刪除是,以恢復信息的原有形式。這種“0”位的插入和刪除過程是由硬件自動完成的。
(2) SDLC/HDLC異常結束:若在發送過程中出現錯誤,則SDLC/HDLC協議常用異常結束(Abort)字符,或稱為失效序列使本幀作廢。在HDLC 規程中,7個連續的“1”被作為失效字符,而在SDLC中失效字符是8個連續的“1”。當然在試銷序列中不使用“0”位插入/刪除技術。 SDLC/HDLC協議規定,在一幀之內不允許出現數據間隔。在兩幀之間,發送器可以連續輸出標志字符序列,也可以輸出連續的高電平,它被稱為空閑(Idle)信號。
評論