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