藍牙無線連接可靠性的研究與實現(xiàn)
1 引言
藍牙(Bluetooth )是一種低成本、短距離的無線連接技術標準。它是由愛立信(Ericsson ) ,國際商用機器(IBM ) ,英特爾( Intel ) ,諾基亞(Nokia )和東芝(Toshiba ) 5 家公司共同倡導的一種全球無線技術標準。其目的就是將智能移動電話與筆記本電腦、掌上電腦以及各種數(shù)字信息的外部設備用無線方式連接起來。目前,無線連接飛速普及、大受歡迎,藍牙技術的廣泛應用對無線移動數(shù)據(jù)通信將起到巨大的促進作用。
2藍牙無線頻段的選擇和抗干擾
藍牙技術采用2400~2483.5MHz 的ISM (工業(yè)、科學和醫(yī)學)頻段,這是因為:
( l )該頻段內(nèi)沒有其它系統(tǒng)的信號干擾,同時頻段向公眾開放,無須特許;
( 2 )該頻段在全球范圍內(nèi)有效。
此時,抗干擾問題便變得非常重要。因為2400~2483.5MHz ISM 頻段為開放頻段,使用其中的任何頻段都會遇到不可預測的干擾源(如某些家用電器、無繩電話和汽車開門器等),此外,對外部干擾源和其它藍牙設備的干擾也應作充分估計。
抗干擾方法分為避免干擾和抑制干擾。避免干擾可通過降低各通信單元的信號發(fā)射電平來達到;抑制干擾則通過編碼或直接序列擴頻來實現(xiàn)。然而,在不同的無線環(huán)境下,專用系統(tǒng)的干擾和有用信號的動態(tài)范圍變化極大。在超過50dB 的遠近比和不同環(huán)境功率差異的情況下,要達到1Mb/s 以上速率,僅靠編碼和處理增益是不夠的。相反,由于信號可在沒有干擾時(或干擾低時)發(fā)送,故避免干擾更容易一些。若采用時間避免干擾法,當遇到時域脈沖干擾時,發(fā)送的信號將會中止。另一方面,大部分無線系統(tǒng)是帶寬受限的,而在2.45 GHZ 頻段上,系統(tǒng)帶寬為80MHz,可找到一段無明顯干擾的頻譜,同時利用頻域濾波器對無線頻帶其余頻譜進行抑制,以達到理想效果。因此,以頻域避免干擾法更為可行。
3藍牙基帶協(xié)議中的可靠性措施
藍牙基帶協(xié)議把保證藍牙無線連接的可靠性放在了至關重要的位置上,確保匹克網(wǎng)內(nèi)各藍牙設備之間由射頻構成可靠的物理連接。實際上,為了提高藍牙無線連接的可靠性,以較小的開銷有效地降低誤碼率、切實提高藍牙無線連接的可靠性,藍牙基帶協(xié)議中定義了一系列提高藍牙無線連接可靠性的措施,主要包括:差錯檢測和校正、進行數(shù)據(jù)編解碼、差錯控制、數(shù)據(jù)加噪等。下面,我們對這些可靠性措施一一進行闡述:
3.1 藍牙基帶協(xié)議中的差錯控制方案
在藍牙基帶協(xié)議中采用的差錯控制方案有:1/3 比例前向糾錯碼(FEC);2/3比例前向糾錯碼(FEC);數(shù)據(jù)的自動重傳請求(ARQ, Automatic Repeat Request)方案。
其中,F(xiàn)EC(前向糾錯)的目的是為了減少數(shù)據(jù)載荷重發(fā)的次數(shù),使用FEC碼,檢錯、糾錯以及編解碼的過程變得簡單迅速,這對RX 和TX 間的有限處理時間非常重要。但是,采用FEC的缺點是還是會降低實際數(shù)據(jù)傳輸速率。所以,在糾錯要求不高的環(huán)境中,可以不采用FEC。藍牙規(guī)范基帶協(xié)議中的分組的定義對于在有效載荷中是否采用FEC 給出了相當?shù)撵`活度,由此而定義了ACL鏈接中使用的DM 和DH分組以及SCO鏈接中使用的HV分組。分組頭通常采用1/3比例前向糾錯碼保護,它含有很重要的鏈接信息,能夠容忍多位錯誤。
3.1.1 1/3 比例前向糾錯碼(FEC)
在這種3位重復方案中,分組頭中的每一位都重復三次。主要用來屏蔽頭中的錯誤,因為分組頭中包含有重要的連接信息。實際上在整個分組頭里都采用了三位重復碼。在這種3 位重復方案中,重復碼大部分在接收端判決,既可用于數(shù)據(jù)包頭,也可用于SCO鏈接的分組。例如,在SCO鏈接中使用的HV1分組里的話音段中也采用了這種編碼格式。
3.1.2 2/3比例前向糾錯碼(FEC)
在這一方案中,采用了一種(15, 10)精簡的(縮短的)漢明碼表示方式。每10個信息位被編碼為15位的碼字,生成多項式為:g(D)= (D+1) (D4+D+1)。此類錯誤校正方法主要用來以最可靠的方式來發(fā)送數(shù)據(jù)分組。該方案能夠在各代碼字中糾正所有奇數(shù)位錯和檢測所有偶數(shù)位錯,誤碼檢測用于數(shù)據(jù)糾錯。它既可用于SCO鏈接的同步分組,也可用于ACL 鏈接的異步分組。具體而言,2/3比例前向糾錯碼可用于DM分組、DV分組中的數(shù)據(jù)段、FHS 分組以及SCO鏈接中使用的HV2分組中。由于編碼器采用長度為10 的信息段,所以值為O的尾位可附加在CRC位之后。而所有需要編碼的位數(shù)(即:有效載荷頭、用戶數(shù)據(jù)、CRC和尾部數(shù)位)必須是10 的整倍數(shù)。通常是用線性反饋移位寄存器LFSR來生成2/3比例前向糾錯碼。
3.1.3 自動重傳請求(ARQ)
在藍牙無線連接中,為了保證可靠傳送,常用做法是采用自動重傳請求(ARQ)方案,由接收方發(fā)回特殊的控制幀,作為對輸人肯定或否定性的確認(ACK/NACK)。如果出現(xiàn)丟幀或丟掉確認消息的情況,則計時器在超時后會發(fā)出超時信號,提醒發(fā)送方可能出現(xiàn)了問題,必須重傳此幀。而且收方必須能夠辨別收到的是重復幀還是新幀。
在藍牙采用的ARQ方案中,藍牙的DM、DH和DV分組的數(shù)據(jù)段可以進行傳輸或重發(fā),直到收端返回成功接收確認信息(或超時)為止。該確認信息包含在返回分組頭里,即捎帶( Piggy backing) 。為了確定有效載荷正確與否,循環(huán)冗余校驗碼應該加載于有效載荷中。ARQ方案只工作在分組的有效載荷上(僅針對具有CRC的有效載荷)。分組頭和話音有效載荷不受ARQ 保護。
藍牙使用快速、無編號確認方案。為了應答前次接收分組,應返回ACK (ARQN=1)或NAK (ARQN=0)。在返回分組的分組頭里,生成ACK / NACK 域,同時,接收分組的分組頭中的ACK / NACK域可表明前面的負載是否正確接收,決定是否需要重發(fā)或發(fā)送下一個分組。從單元將在主-從時隙后緊跟在從-主時隙中進行應答。主單元則將在下一個事件中應答,該事件將給出同一從單元地址。由于處理時間短,當分組接收時,解碼選擇在空閑時間進行,并要簡化FEC編碼結(jié)構,以加快處理速度??焖貯RQ方案與停止等待ARQ方案相似,但時延最小,實際上沒有由ARQ方案引起的附加時延。該結(jié)構比退后n幀ARQ更有效,并與選擇重傳ARQ 效率相同,但由于只有失效的分組被重發(fā),可減少開銷。
在快速ARQ方案中,收方為了辨別是重復幀還是新幀(即過濾重傳數(shù)據(jù)),頭部將附加SEQN位。通常,每次新的CRC數(shù)據(jù)有效載荷傳輸,SEQN位將交替變化。而在重傳中,SEQN位不發(fā)生變化。這樣,通過辨認SEQN位是否發(fā)生變化,收方即可辨別出是重復幀還是新幀。
3.2 藍牙基帶協(xié)議中的錯誤校驗
在藍牙無線連接中,至少應該對HEC進行分組頭校驗。另外,必要時其有效載荷也必須進行CRC校驗。使用分組頭HEC信息和有效載荷中的CRC信息,可以檢測分組錯誤和傳輸錯誤。
3.2.1 分組頭HEC檢測
為了檢測藍牙分組頭,每個分組頭的最高8位定義為HEC ( Header-Error-Check,頭部錯誤檢測)信息。HEC由多項式647(八進制數(shù))生成,在生成HEC之前,HEC生成器用一個8 位值來初始化。在初始化后,對分組頭的其它10位進行計算,得到8位的HEC值。另外,在接收方校驗HEC之前,也必須先進行適當?shù)某跏蓟?。在接收分組時,首先校驗的是訪問碼,由于在信道訪問碼中的64位同步字來源于24位主單元的低地址部分(LAP),這樣就可以校驗LAP是否正確,并可以防止接收方接收來自其它匹克網(wǎng)的分組。
3.2.2 有效載荷的CRC校驗
CRC校驗即循環(huán)冗余碼校驗,是一種常用的檢錯編碼,而且已經(jīng)有相應的國際標準,如CRC-CCITT。在藍牙無線連接中,發(fā)送方按照國際標準CRC-CCITT ,即g (D) = ( D + 1 ) ( D7 +D4+D3+D2+D+1),并用線性反饋移位寄存器LFSR硬件電路生成有效載荷(數(shù)據(jù)信息)的CRC校驗碼,附加在數(shù)據(jù)信息后面構成完整的數(shù)據(jù)幀,由接收方在接收時檢查。若出錯,返回NAK,發(fā)送方收到NAK 后重發(fā)該數(shù)據(jù)幀。
3.3 藍牙基帶協(xié)議中的其它可靠性措施
3.3.1 教據(jù)加噪
所有的分組頭和載荷信息在發(fā)送前都要利用數(shù)據(jù)加噪字進行加噪處理。這主要是為了避免在傳輸過程中出現(xiàn)過長的連續(xù)0或1的位流模式。基帶處理器需要從接收到的模擬數(shù)據(jù)信號中判斷數(shù)據(jù)是0還是1,但過長的連續(xù)0或1位流會造成問題。因為在接收到的模擬數(shù)據(jù)信號中并不存在象直流信號中那樣的參考點,因此必須依靠接收到的最后幾個傳輸信號進行校正。任何連續(xù)的0或1的長序列位流串都可能導致校正失敗。因此需要采用數(shù)據(jù)加噪技術對信號進行擾碼處理,以大大降低出現(xiàn)長序列0或1位流串的可能性。
在藍牙無線連接的發(fā)送方,這種加噪過程先于FEC編碼完成。在接收端,接收數(shù)據(jù)使用相同的數(shù)據(jù)加噪字進行還原處理,該還原處理在FEC解碼后完成。
3.3.2 鏈路監(jiān)測
在無線連接中,有很多原因能夠引起連接中斷,比如,設備關閉、設備移出了藍牙通信范圍。而且在連接中斷發(fā)生時,通常不會有任何提前報警,所以,在藍牙主、從單元兩端對鏈路進行監(jiān)測是非常必要的。
為此,在藍牙主、從單元均使用鏈路監(jiān)測定時器。一旦收到經(jīng)過HEC校驗的分組和正確的藍牙活動成員地址(AMADDR),定時器就復位。如果在連接狀態(tài)的任何時刻,定時器達到閾值(該閾值可協(xié)商),則連接復位。SCO和ACL 連接使用同一閾值。這樣,就能夠在藍牙主、從單元兩端對鏈路進行監(jiān)測了。
4 藍牙鏈路管理層(LM)中的可靠性措施
類似地,在藍牙鏈路管理層(LM )中,也定義有保證可靠的無線連接的措施。
在藍牙接收和發(fā)送設備的鏈路管理層之間是通過協(xié)議數(shù)據(jù)單元(PDU)來相互通信的。PDU 由操作碼、事件ID和內(nèi)容參數(shù)組成,其中,7 位操作碼用來標識不同類型的PDU。
如果鏈路管理器收到不能識別操作碼的PDU,就用LMP no accepted協(xié)議數(shù)據(jù)單元(PDU)應答,并且LMP no accepted PDU中含有原因碼unknown LMP PDU。而且返回的操作碼參數(shù)同樣也是不能夠識別的操作碼。如果鏈路管理器收到含有無效參數(shù)的PDU,就用LMP no accepted PDU應答,并且LMP no accepted PDU中含有原因碼invalid LMP PDU(無效LMP 參數(shù)).
某一方在等待對方響應時,如果發(fā)現(xiàn)超過了最大響應時間或者檢測到鏈路丟失,等待應答的一方就可以認為該過程已經(jīng)終止。
信道出錯或發(fā)送方系統(tǒng)出錯都會引起發(fā)送錯誤的消息。為了檢測后一種情況,LM應監(jiān)測錯誤消息數(shù)量,一旦超過閾值就將其斷開,該閾值可根據(jù)實際情況進行設置。
由于無法實時地截獲PDU,在鏈路兩端的LM都對同一過程進行初始化而且都沒有成功時,很可能會發(fā)生沖突。這時,主單元將通過發(fā)送含有原因碼“LMP Error Transaction Collision ”的LMP no accepted PDU,中止從單元的初始化過程,從而保證主單元的初始化過程能夠順利進行。
5 藍牙應用層中可采用的可靠性措施
5.1 穩(wěn)定、可靠的藍牙文件傳輸協(xié)議:RBTFT
藍牙的文件傳輸是通過RFCOMM協(xié)議建立一條端到端的連接。所以在藍牙RFCOMM協(xié)議的基礎之上建立了本文所描述的藍牙的文件傳輸協(xié)議,稱之為RBTFT(表示為Reliable Bluetooth File Transfer),其主要目標是在藍牙設備之間建立一條可靠的無線連接通道,進行可靠的文件傳輸。該協(xié)議目前的開發(fā)是采用VC+ +,應用平臺為WIN98/2000/NT,但作為RBTFT 協(xié)議的本身不受具體編程語言及操作系統(tǒng)所限制。
RBTFT 協(xié)議支持一次傳輸多個文件、斷點續(xù)傳和CRC校驗。其設計思想是基于幀傳輸方式,即在發(fā)送數(shù)據(jù)時是一幀一幀地發(fā)送,為保證可靠的傳輸,RBTFT協(xié)議對RBTFT幀進行了精心的定義,RBTFT 幀由報頭、數(shù)據(jù)子包組成,報頭指明幀類型(有些幀是不帶數(shù)據(jù)的命令幀、信息幀,如BTFNAK ) ,還攜帶CRC校驗信息。而數(shù)據(jù)子包還有不同的子包結(jié)束符,指明后面是否有后續(xù)包等。在進行數(shù)據(jù)傳輸時,采用發(fā)送/應答/握手/失敗方式,即發(fā)送一幀數(shù)據(jù),一個應答,若應答沒收到,重新進行協(xié)商握手,握手失敗則向應用程序報告錯誤。
在利用RBTFT 協(xié)議進行實際的文件傳輸時,首先第一步是進行串口初始化操作,在串口初始化成功時,通過異步消息RBTFT C0NNECT向應用程序報告,表示一條通信鏈路建立完畢。開始發(fā)送數(shù)據(jù)時,應用程序根據(jù)內(nèi)部緩沖區(qū)的大小決定每次真正可發(fā)送的數(shù)據(jù)量,數(shù)據(jù)將被存儲在內(nèi)部緩沖區(qū)內(nèi),按照RBTFT協(xié)議,內(nèi)部緩沖區(qū)的數(shù)據(jù)分割成一幀一幀并加人幀信息和CRC校驗信息,每一幀將調(diào)用內(nèi)部線程發(fā)送數(shù)據(jù),當內(nèi)部緩沖區(qū)的數(shù)據(jù)全部發(fā)送完畢(即內(nèi)部緩沖區(qū)為空)時,則向應用程序發(fā)送消息表示內(nèi)部緩沖區(qū)的數(shù)據(jù)全部發(fā)送完畢,應用程序?qū)⒖衫^續(xù)發(fā)送其余的數(shù)據(jù)。在接收方,每到達一幀時,接收方就判讀幀信息、對到達的數(shù)據(jù)進行接收并進行CRC校驗,若發(fā)生錯誤則通過RBTFT協(xié)議所定義的方式進行重發(fā)或協(xié)商,當通信能繼續(xù)則不向應用程序發(fā)送任何消息,繼續(xù)保持鏈路,若通信不能繼續(xù),則放棄此鏈路,并且向應用程序發(fā)送RBTFT ERROR的消息,應用程序?qū)⒅匦聫臀淮随溌坊蜻M行其它相應的處理。另外,當有任何一方斷開鏈接,應用程序?qū)⒔邮盏絉BTFT CLOSE消息,表示此鏈路已經(jīng)斷開。在接收端,所接收到的分幀的數(shù)據(jù)被去掉幀頭重新歸到接收緩沖區(qū)流,重新拼裝為所傳輸?shù)奈募?。然后,再進行下一個文件的傳輸,直至傳輸完所有的文件。
對于在應用層提高藍牙無線連接的可靠性而言,最為可貴的是RBTFT協(xié)議支持斷點續(xù)傳。我們目前所實現(xiàn)的也就是將RBTFT文件傳輸協(xié)議嵌人到藍牙無線文件傳輸?shù)膽弥校@樣,即便出現(xiàn)文件傳輸中斷的情況,也可以進行斷點續(xù)傳。這對于大文件無線傳輸尤為有意義。
RBTFT協(xié)議支持斷點續(xù)傳的原理在于RBTFT數(shù)據(jù)幀在報頭中攜帶有指明文件數(shù)據(jù)在文件具體某個位置開始的偏移量。當發(fā)生錯誤或連接中斷時,接收方發(fā)送一個帶有偏移量的信息幀,說明它希望發(fā)送方從該位置重新開始傳輸。這樣就無需重傳整個文件,從而實現(xiàn)了斷點續(xù)傳。
5.2 藍牙文件傳翰RBTFT協(xié)議發(fā)送文件的詳細過程
以下是藍牙文件傳輸RBTFT 協(xié)議發(fā)送單個文件的詳細過程:
n =0; //初始化重試次數(shù)計數(shù)器,收發(fā)雙方建立連接;
file = fopen (filename,“rb ”); 設置并發(fā)送包含文件名、文件長度的報頭;
for ( ; ;) {
message =所讀取接收方發(fā)來的響應報頭信息;
switch (message) {
case 接收方返回“已經(jīng)準備接收”:
發(fā)送第一個數(shù)據(jù)子包,并以子包結(jié)束符指明后面有后續(xù)包;
Continue ;
case 接收方拒絕接收:
fclose (file);
return OK;
case 接收方返回確認信息:
發(fā)下一個包;
Continue;
case 超時:n=n+l;
if (n>20)//重試20 次,若還不能恢復連接,則放棄
{return ERROR;}
else if
{重新建立連接;
請求接收方發(fā)送帶有偏移量的信息幀;
接收該信息幀;
從指定偏移量處開始繼續(xù)傳送;
Continue;}
case 接收方放棄傳輸:
return ERROR;
case 文件傳輸完畢:
輸出“文件傳輸完畢”的屏幕提示信息;
return OK;
}
6 結(jié)論
本文敘述了藍牙無線連接在射頻、基帶協(xié)議、鏈路管理協(xié)議(LMP)中采用的可靠性措施,包括:差錯檢測和校正、進行數(shù)據(jù)編解碼、差錯控制、數(shù)據(jù)加噪等。為了進一步在無線連接中提高藍牙文件傳輸?shù)目煽啃?,在藍牙RFCOMM協(xié)議的基礎之上建立了本文所描述的藍牙的文件傳輸協(xié)議,稱之為RBTFT,其中,創(chuàng)造性地提出了支持文件斷點續(xù)傳的辦法,并得到了實現(xiàn),從而在應用層有效地提高了藍牙無線連接的可靠性。我們相信,在切實提高了藍牙無線連接的可靠性之后,藍牙技術將會得到更加廣泛的應用。
評論