一. 引言
藍牙技術(shù)將計算和通訊很好地結(jié)合起來,,根據(jù)網(wǎng)絡(luò)的概念提供點對點和點對多點的無線鏈接,使人們能隨時隨地地進行數(shù)據(jù)信息的交換與傳輸,。隨著各種藍牙終端設(shè)備的普及,,為它們提供局域網(wǎng)訪問的嵌入式局域網(wǎng)接入點會有廣泛的應用場合。使用籃牙無線通信的直接網(wǎng)絡(luò)接入要優(yōu)于同等條件下的有線接入,,隨著各種藍牙終端設(shè)備的普及,,為它們提供局域網(wǎng)訪問的嵌入式接入點會有廣泛的應用場合。
本文所介紹的局域網(wǎng)接入點 LAP(LAN Access Point)解決了藍牙設(shè)備對有線網(wǎng)絡(luò)的訪問問題,,它不同于目前基于Windows開發(fā)平臺的藍牙網(wǎng)關(guān),。如圖一所示,本嵌入式局域網(wǎng)接入點類似于一個小小插件,,直接插在現(xiàn)有的有線網(wǎng)絡(luò)拓撲結(jié)構(gòu)里,,只是在最后一步才是無線的,,這樣就有效地利用了已有網(wǎng)絡(luò)資源,需要更少的配制和干預,,也更接近人們的使用習慣,,讓各種藍牙終端設(shè)備便利的接入現(xiàn)有的局域網(wǎng),給藍牙技術(shù)的推廣應用帶來極大的方便,。藍牙局域網(wǎng)接入點實現(xiàn)了藍牙協(xié)議子集中的LAN Access Profile,,對于已經(jīng)實現(xiàn)TCP/IP協(xié)議的藍牙設(shè)備,藍牙局域網(wǎng)接入點可以運行PPP 協(xié)議與該類藍牙設(shè)備實現(xiàn)通訊,,從而達到將該類藍牙設(shè)備接入到Ethernet及Internet的目的,。
二. 系統(tǒng)硬件結(jié)構(gòu)
本系統(tǒng)的硬件主要由兩大部分組成:藍牙模塊和嵌入式微處理器,另外還有電源,、鍵盤,、顯示等輔助電路。圖二給出了籃牙局域網(wǎng)接入點LAP (LAN Access Point)的硬件框圖,。藍牙模塊采用愛立信的 BOM4E,,它將無線射頻、基帶,、鏈路控制器和管理器封裝在一起,。在模塊中,無線層和鏈路控制器通過硬件來實現(xiàn),,而鏈路管理器在固件中實現(xiàn),,將該模塊附著在一個主機設(shè)備上后,該設(shè)備就具有了藍牙無線通信的功能,。藍牙模塊的射頻單元功率也符合FCC關(guān)于ISM頻段的要求,,采用時分雙工(TDD)方案來實現(xiàn)全雙工傳輸。藍牙模塊通過UART接口同微處理器通訊,,它提供了標準的主機控制器接口(Host Control Interface), 允許包括應用在內(nèi)的高層協(xié)議訪問基帶層,、鏈路管理層以及其他的硬件寄存器,主機發(fā)射和接受數(shù)據(jù)時,,無論是同步業(yè)務還是異步業(yè)務都是通過HCI來傳送,。當接收到來自微處理器的HCI命令后,模塊可以進入某一種給定的操作模式,,比如,完成一種鑒權(quán)操作,,或者執(zhí)行一個設(shè)備的尋呼狀態(tài),。反之,模塊可以通過HCI事件向高層協(xié)議傳送一個設(shè)備請求操作結(jié)果等,。
微處理器是本系統(tǒng)的核心部分,,負責藍牙中間層協(xié)議的處理,、網(wǎng)絡(luò)協(xié)議的實現(xiàn)以及整個系統(tǒng)的控制功能。IP2022是一款高性能的微處理器,,它有兩個全雙工串化解串接口(Ser/Des),能方便地同藍牙模塊以及網(wǎng)絡(luò)接口相連,。它包含64K FLASH數(shù)據(jù)存儲器,20K SRAM程序存儲器,。內(nèi)置三個定時器和一個硬件看門狗,。微處理器的網(wǎng)絡(luò)處理功能通過以太網(wǎng)接口RJ45直接將藍牙無線網(wǎng)絡(luò)接入到局域網(wǎng)絡(luò)(LAN)中。它能進行數(shù)據(jù)的上傳和下行,,既能將無線接收到的數(shù)據(jù)打包為標準的TCP/IP包上傳到局域網(wǎng),,也能接受來自局域網(wǎng)上的數(shù)據(jù)。用戶可以使用預創(chuàng)建軟件模塊和配置工具,,對IP2022進行編程和重編程,,為各種設(shè)備間通信和人機通信創(chuàng)建真正的單片式網(wǎng)絡(luò)應用方案。在模塊內(nèi)部實現(xiàn)了物理層,、鏈路層,、網(wǎng)絡(luò)層協(xié)議及部分應用層協(xié)議,在網(wǎng)絡(luò)傳輸層,,可以進行TCP,、UDP傳輸,在應用層,,有FTP文件傳輸?shù)确铡?/p>
三. 軟件協(xié)議棧
藍牙的核心部分是協(xié)議棧,,藍牙協(xié)議棧允許多個設(shè)備進行相互的定位、連接和交換數(shù)據(jù),,并能實現(xiàn)互操作和交互式的應用,。藍牙的協(xié)議棧分別運行在藍牙模塊及微處理器上面,是管理系統(tǒng)資源,、控制硬件,、通過HCI對來自主機的命令進行處理、完成藍牙功能的嵌入式軟件,。由于本系統(tǒng)的藍牙模塊提供了基帶的功能和實現(xiàn)鏈路管理器協(xié)議,,主機是通過HCI層來控制藍牙的,所以系統(tǒng)要做的工作就是要給主機提供HCI的接口,,并在HCI接口上開發(fā)中間層協(xié)議以及為應用提供應用接口,。在藍牙的協(xié)議中,藍牙主機軟件實現(xiàn)L2CAP功能和上層HCI的驅(qū)動程序;PPP,、IP,、TCP/UDP等協(xié)議歸屬于TCP/IP協(xié)議,已經(jīng)相當成熟,并且被絕大多數(shù)操作系統(tǒng)實現(xiàn),,在本系統(tǒng)中由微處理器IP2022來完成,。設(shè)計協(xié)議和協(xié)議棧的主要原則是盡可能利用現(xiàn)有的各種高層協(xié)議,保證現(xiàn)有協(xié)議與藍牙技術(shù)的融合以及各種應用之間的互通性,,充分利用兼容藍牙技術(shù)規(guī)范的軟硬件系統(tǒng),。協(xié)議棧(如圖三)的各種單元在邏輯上可以被分為三組:底層協(xié)議組、中間件協(xié)議組,、應用協(xié)議組,。
1) 底層協(xié)議組:這個協(xié)議組包含的協(xié)議主要用于使籃牙設(shè)備能確認彼此的相互位置,并且能夠創(chuàng)建,、配置和管理物理以及邏輯的鏈路,,以便使高層協(xié)議和上層應用經(jīng)這些鏈路利用傳輸協(xié)議來傳輸數(shù)據(jù)。這個協(xié)議組包括無線,、基帶,、鏈路控制器和管理器協(xié)議。本系統(tǒng)采用的藍牙模塊已經(jīng)固化有藍牙的底層協(xié)議,,并且提供了標準的訪問接口(HCI),,不再這里討論。
2) 中間協(xié)議組:這是本系統(tǒng)需要開發(fā)的核心部分,,包括有邏輯鏈路控制及適配協(xié)議(L2CAP),、服務搜索協(xié)議(SDP)、基于TS07.10的串口仿真協(xié)議(RFCOMM),。
3) 應用協(xié)議組:本系統(tǒng)實現(xiàn)了籃牙的協(xié)議子集LAN Access Point(LAP),,這種應用模式在藍牙連接上使用IETF的點到點協(xié)議(PPP),PPP是一種廣泛使用的Internet標準,,為IP通訊提供了主機配置和準備,,PPP是為在同等單元之間傳輸數(shù)據(jù)包這樣的簡單的鏈路而設(shè)計的。這種鏈路提供全雙工操作,,并按照順序傳遞數(shù)據(jù)包,。PPP為基于各種主機、網(wǎng)橋和路由器的簡單連接提供一種共通的解決方案,。使用PPP是LAP的關(guān)鍵,,PPP適用于數(shù)據(jù)接入點和數(shù)據(jù)終端間的連接。IP網(wǎng)絡(luò)業(yè)務能夠在PPP鏈路上傳輸,,PPP在設(shè)計時已經(jīng)考慮到了要在串行連接上使用,,因此在LAP中PPP可以運行在串口仿真協(xié)議RFCOMM之上。UDP,、TCP&IP是由IETF定義,,主要用于Internet上的通訊,。四. 協(xié)議棧的實現(xiàn)
籃牙協(xié)議棧的設(shè)計主要包括:結(jié)構(gòu)設(shè)計,,重要數(shù)據(jù)結(jié)構(gòu)的設(shè)計,,任務的管理,內(nèi)存的管理等等,。
1) 結(jié)構(gòu)設(shè)計:系統(tǒng)采用單進程的結(jié)構(gòu),,由主程序循環(huán)的調(diào)用幾個任務。當一個任務執(zhí)行完之后,,才會進入對下一個任務的執(zhí)行,。任務的執(zhí)行不影響中斷的產(chǎn)生和中斷服務程序的調(diào)用,可以保證系統(tǒng)對外部事件的響應,,構(gòu)成典型地前后臺系統(tǒng),。
2) 重要數(shù)據(jù)結(jié)構(gòu)的確定:根據(jù)對藍牙協(xié)議的分析可知,協(xié)議的中心任務是建立和管理幾個藍牙設(shè)備之間的連接,,建立通訊鏈路,,并借此傳輸數(shù)據(jù)。因此對這種連接的建立,,維護和參數(shù)管理是軟件最基本的功能,。根據(jù)藍牙規(guī)范中連接的屬性和各種協(xié)議數(shù)據(jù)包的定義,可以確定對應的數(shù)據(jù)結(jié)構(gòu),。例如可以用結(jié)構(gòu)l2cap_con來描述邏輯鏈路控制和適配協(xié)議層的對等層間的連接通道,。
struct l2cap_con {
BD_ADDR remote_bd; /* 6 bytes */
unsigned short local_cid;
unsigned short remote_cid;
int current_state;
unsigned short psm;
unsigned short remote_mtu;
unsigned short flush_timeout;
…
};
其中BD_ADDR是一個6字節(jié)的結(jié)構(gòu),記錄連接中另一方的藍牙地址,,local_cid是邏輯信道本地端設(shè)備信道標示符,,remote_con是遠端信道標示符,current_state表示目前的連接狀態(tài),,psm是協(xié)議/服務復用段,,remote_mtu是遠端最大傳輸單位等等。還有其他一些變量用來說明這個連接的一些屬性和狀態(tài),。通過這個數(shù)據(jù)結(jié)構(gòu),,可以描述在L2CAP 對等層間的數(shù)據(jù)通道。除了結(jié)構(gòu)l2cap_con之外,,還有許多用來描述各層協(xié)議數(shù)據(jù)包屬性的結(jié)構(gòu)也都是系統(tǒng)的核心結(jié)構(gòu),,這里不再詳細列出。
3) 任務管理:針對協(xié)議任務和事件數(shù)量多,,并且之間相關(guān)性大的特點,,使用有限狀態(tài)機的方法來處理,并采用過程驅(qū)動方案來實現(xiàn)有限狀態(tài)機,,為每個輸入狀態(tài)啟動一個過程,。當某一個事件發(fā)生時,,系統(tǒng)利用當前狀態(tài)來選取一個適當?shù)膭幼鳎搫幼魈幚磔斎胧录⒏庐斍盃顟B(tài)變量值,。如圖四所示是L2CAP的面向連接信道的狀態(tài)機,,顯示了由哪一個事件導致狀態(tài)轉(zhuǎn)換,以及在狀態(tài)轉(zhuǎn)換時采取哪一個動作,。信道的操作共有七個狀態(tài):關(guān)閉,、高層連接請求、L2CAP層連接請求,、配置,、打開、高層斷開連接請求,、L2CAP層斷開連接請求,。
4) 內(nèi)存管理:內(nèi)存管理通常是操作系統(tǒng)的核心任務之一,由于本系統(tǒng)沒有使用操作系統(tǒng),,所以這部分任務是系統(tǒng)必需而重要的任務,。輸入的數(shù)據(jù)包必須被保存在內(nèi)存中,并將其傳遞給適當?shù)娜蝿兆鬟M一步的處理,。同時,,應用程序產(chǎn)生的輸出數(shù)據(jù)也必須以數(shù)據(jù)包的形式存儲在內(nèi)存中,并將其傳遞給硬件設(shè)備傳送出去,。設(shè)計要做到快速分配存儲空間,,并且避免數(shù)據(jù)包在各層協(xié)議之間移動時的數(shù)據(jù)復制。針對本系統(tǒng)處理的實際情況:藍牙協(xié)議數(shù)據(jù)報只有一些固定的大小的包類型,,因此采用系統(tǒng)分配大小固定的緩沖區(qū)的方案,。這樣作可以杜絕內(nèi)存碎片。需要緩沖區(qū)的時候,,系統(tǒng)調(diào)用allot_bt_buffer函數(shù),。只要緩沖區(qū)分配完成,需要保存的僅僅是指向緩沖區(qū)的指針,,所以歸還緩沖區(qū)到空閑緩沖區(qū)列表的時候,,系統(tǒng)調(diào)用unallot_bt_buffer,將被釋放的緩沖區(qū)的指針交還給它,。采用這種方法,,協(xié)議軟件只需傳遞指向該緩沖區(qū)的指針,處理過程統(tǒng)一,,并且避免了處理過程中數(shù)據(jù)的移動,。
從一般軟件設(shè)計分類的角度來看,設(shè)備管理和系統(tǒng)資源管理是操作系統(tǒng)的任務,。在綜合考慮系統(tǒng)簡單性和成本等因素之后,,本系統(tǒng)中沒有使用獨立的實時操作系統(tǒng),,而是由嵌入式軟件完成部分應該由操作系統(tǒng)完成的功能。
五. 結(jié)束語
本嵌入式局域網(wǎng)訪問點已可以應用于對機器人的遠程訪問上,。如果將現(xiàn)有接入點進行適當改動和擴展,,就能實現(xiàn)其他功能,例如給它擴展上一個語音解碼芯片后很容易擴展到語言信號的傳輸,。