串口通訊―通信協(xié)議
數(shù)據(jù)透明的實(shí)現(xiàn):面向字符的同步協(xié)議,不象異步起止協(xié)議那樣,需要在每個(gè)字符前后附加起始和停止位,因此,傳輸效率提高了。同時(shí),由于采用了一些傳輸控制字,故增強(qiáng)了通信控制能力和校驗(yàn)功能。但也存在一些問題,例如,如何區(qū)別數(shù)據(jù)字符代碼和特定字符代碼的問題,因?yàn)樵跀?shù)據(jù)塊中完全有可能出現(xiàn)與特定字符代碼相同的數(shù)據(jù)字符,這就會(huì)發(fā)生誤解。比如正文有個(gè)與文終字符ETX的代碼相同的數(shù)據(jù)字符,接收端就不會(huì)把它當(dāng)作為普通數(shù)據(jù)處理,而誤認(rèn)為是正文結(jié)束,因而產(chǎn)生差錯(cuò)。因此,協(xié)議應(yīng)具有將特定字符作為普通數(shù)據(jù)處理的能力,這種能力叫做“數(shù)據(jù)透明”。為此,協(xié)議中設(shè)置了轉(zhuǎn)移字符DLE(Data Link Escape)。當(dāng)把一個(gè)特定字符看成數(shù)據(jù)時(shí),在它前面要加一個(gè)DLE,這樣接收器收到一個(gè)DLE就可預(yù)知下一個(gè)字符是數(shù)據(jù)字符,而不會(huì)把它當(dāng)作控制字符來處理了。DLE本身也是特定字符,當(dāng)它出現(xiàn)在數(shù)據(jù)塊中時(shí),也要在它前面加上另一個(gè)DLE。這種方法叫字符填充。字符填充實(shí)現(xiàn)起來相當(dāng)麻煩,且依賴于字符的編碼。正是由于以上的缺點(diǎn),故又產(chǎn)生了新的面向比特的同步協(xié)議。
(3)面向比特的同步協(xié)議
特點(diǎn)與格式:面向比特的協(xié)議中最具有代表性的是IBM的同步數(shù)據(jù)鏈路控制規(guī)程SDLC(Synchronous Data Link Control),國(guó)際標(biāo)準(zhǔn)化組織ISO(International Standard Organization)的高級(jí)數(shù)據(jù)鏈路控制規(guī)程HDLC(High Level Data link Control),美國(guó)國(guó)家標(biāo)準(zhǔn)協(xié)會(huì)(Americal National Standard Institute)的先進(jìn)數(shù)據(jù)通信規(guī)程ADCCP(Advanced Data Communication Control Procedure)。這些協(xié)議的特點(diǎn)是所傳輸?shù)囊粠瑪?shù)據(jù)可以是任意位,而且它是靠約定的位組合模式,而不是靠特定字符來標(biāo)志幀的開始和結(jié)束,故稱“面向比特”的協(xié)議。這中協(xié)議的一般幀格式如圖5所示:
圖5
幀信息的分段:由圖5可見,SDLC/HDLC的一幀信息包括以下幾個(gè)場(chǎng)(Filed),所有場(chǎng)都是從有效位開始傳送。
(1) SDLC/HDLC標(biāo)志字符:SDLC/HDLC協(xié)議規(guī)定,所有信息傳輸必須以一個(gè)標(biāo)志字符開始,且以同一個(gè)字符結(jié)束。這個(gè)標(biāo)志字符是 01111110,稱標(biāo)志場(chǎng)(F)。從開始標(biāo)志到結(jié)束標(biāo)志之間構(gòu)成一個(gè)完整的信息單位,稱為一幀(Frame)。所有的信息是以幀的形傳輸?shù)模鴺?biāo)志字符提供了每一幀的邊界。接收端可以通過搜索“01111110”來探知幀的開頭和結(jié)束,以此建立幀同步。
(2)地址場(chǎng)和控制場(chǎng):在標(biāo)志場(chǎng)之后,可以有一個(gè)地址場(chǎng)A(Address)和一個(gè)控制場(chǎng)C(Control)。地址場(chǎng)用來規(guī)定與之通信的次站的地址??刂茍?chǎng)可規(guī)定若干個(gè)命令。SDLC規(guī)定A場(chǎng)和C場(chǎng)的寬度為8位或16位。接收方必須檢查每個(gè)地址字節(jié)的第一位,如果為“0”,則后面跟著另一個(gè)地址字節(jié);若為 “1”,則該字節(jié)就是最后一個(gè)地址字節(jié)。同理,如果控制場(chǎng)第一個(gè)字節(jié)的第一位為為“0”,則還有第二個(gè)控制場(chǎng)字節(jié),否則就只有一個(gè)字節(jié)。
(3)信息場(chǎng):跟在控制場(chǎng)之后的是信息場(chǎng)I(Information)。I場(chǎng)包含有要傳送的數(shù)據(jù),并不是每一幀都必須有信息場(chǎng)。即數(shù)據(jù)場(chǎng)可以為0,當(dāng)它為0時(shí),則這一幀主要是控制命令。
(4)幀校驗(yàn)信息:緊跟在信息場(chǎng)之后的是兩字節(jié)的爭(zhēng)校驗(yàn),幀校驗(yàn)場(chǎng)稱為FC(Frame Check)場(chǎng)或稱為幀校驗(yàn)序列FCS(Frame check Squence)。SDLC/HDLC均采用16位循環(huán)冗余校驗(yàn)碼CRC(Cyclic Redundancy Code)。除了標(biāo)志場(chǎng)和自動(dòng)插入的“0”以外,所有的信息都參加CRC計(jì)算。
實(shí)際應(yīng)用時(shí)的兩個(gè)技術(shù)問題:
(1) “0”位插入/刪除:如上所述,SDLC/HDLC協(xié)議規(guī)定以01111110為標(biāo)志字節(jié),但在信息場(chǎng)中也完全有可能有同一種模式的字符,為了把它與標(biāo)志區(qū)分開來,所以采取了“0”位插入和刪除技術(shù)。具體作法是發(fā)送端在發(fā)送所有信息(除標(biāo)志字節(jié)外)時(shí),只要遇到連續(xù)5個(gè)“1”,就自動(dòng)插入一個(gè)“0”,當(dāng)接收端在接收數(shù)據(jù)時(shí)(除標(biāo)志字節(jié))如果連續(xù)收到5個(gè)“1”,就自動(dòng)將其后的一個(gè)“0”刪除是,以恢復(fù)信息的原有形式。這種“0”位的插入和刪除過程是由硬件自動(dòng)完成的。
(2) SDLC/HDLC異常結(jié)束:若在發(fā)送過程中出現(xiàn)錯(cuò)誤,則SDLC/HDLC協(xié)議常用異常結(jié)束(Abort)字符,或稱為失效序列使本幀作廢。在HDLC 規(guī)程中,7個(gè)連續(xù)的“1”被作為失效字符,而在SDLC中失效字符是8個(gè)連續(xù)的“1”。當(dāng)然在試銷序列中不使用“0”位插入/刪除技術(shù)。 SDLC/HDLC協(xié)議規(guī)定,在一幀之內(nèi)不允許出現(xiàn)數(shù)據(jù)間隔。在兩幀之間,發(fā)送器可以連續(xù)輸出標(biāo)志字符序列,也可以輸出連續(xù)的高電平,它被稱為空閑(Idle)信號(hào)。
評(píng)論