藍牙通信技術(shù)的模型解析與開(kāi)發(fā)
關(guān)鍵詞: 藍牙技術(shù);無(wú)線(xiàn)通信;解析
前言
藍牙技術(shù)是基于WPAN(Wireless Personal Area Network)的無(wú)線(xiàn)網(wǎng)絡(luò )連接技術(shù),是以短程無(wú)線(xiàn)電收發(fā)技術(shù)為固定與移動(dòng)設備通信環(huán)境建立了一個(gè)短程無(wú)線(xiàn)電的特別連接。它建立一個(gè)通用的無(wú)線(xiàn)電空中接口以及控制軟件的公開(kāi)標準,使無(wú)線(xiàn)通信技術(shù)和計算機技術(shù)緊密結合,使不同廠(chǎng)家生產(chǎn)的便攜式設備在沒(méi)有電線(xiàn)或電纜相互連接的情況下在近距離范圍內具有互用、互操作的性能,代替固定與移動(dòng)通訊設備之間的電纜。利用Ericsson藍牙開(kāi)發(fā)包EBDK(Ericsson Bluetooth Development Kit),可以快速開(kāi)發(fā)出建立在藍牙通信技術(shù)之上的應用,加速產(chǎn)品開(kāi)發(fā)的進(jìn)度。
藍牙系統模塊分析
藍牙協(xié)議體系結構框架如圖1所示。
從軟件和硬件來(lái)劃分,藍牙協(xié)議體系結構可分為底層硬件模塊,中間協(xié)議層(軟件模塊)和高端應用層三大部分。鏈路管理層(LM),基帶層(BB)和射頻層(RF)屬于藍牙的硬件模塊。
中間協(xié)議層包括邏輯鏈路控制和適配協(xié)議(1.2CAP),服務(wù)發(fā)現協(xié)議(SDP),串口仿真協(xié)議(RFCOMM)和電話(huà)通信協(xié)議(TCS)。藍牙協(xié)議棧的最上部是高端應用層,它對應于各種應用模型的profile,是profile的一部分。
主控制器接口HCI(Host Controller Interface)是藍牙協(xié)議中軟硬件之間的接口。它提供一個(gè)調用下層基帶,鏈路控制層,狀態(tài)和控制寄存器等統一的命令接口。HCI協(xié)議以上的協(xié)議軟件實(shí)體運行在主機上,而HCI以下的功能由藍牙設備來(lái)完成,兩者之間通過(guò)傳輸層進(jìn)行交互。HCI提供對基帶控制器和鏈路管理器的命令接口,以及對硬件狀態(tài)和控制注冊成員的訪(fǎng)問(wèn)。該接口還提供對藍牙基帶的統一訪(fǎng)問(wèn)模式。
EBDK硬件結構
EBDK上的硬件分布結構如圖2所示。Radio模塊是藍牙硬件的射頻模擬部分,包括射頻發(fā)射器和射頻接收器,以跳頻技術(shù)實(shí)現頻率擴展,進(jìn)行ISM頻段頻率信號的發(fā)送和接收?;鶐K則對物理信道進(jìn)行管理,鏈路控制模塊進(jìn)行通信鏈路的建立、鑒權。
軟件功能分析
軟件分為兩部分:運行在主PC上的主機軟件和在藍牙基帶設備上運行的ROM程序。EBDK主機軟件在win98、NT PC上運行,通過(guò)RS-232或USB連接到EBDK。結構示意圖如圖3所示。
主機軟件功能機制
主機軟件有兩個(gè)主線(xiàn)程,一個(gè)執行主應用程序和傳輸數據包,另一個(gè)處理接收界面信息,如圖4所示。
圖4中左邊的圓圈代表主應用程序線(xiàn)程,右邊的圓圈代表接收器線(xiàn)程。接收器線(xiàn)程采用Microsoft定義的通信事件,一旦接收到一個(gè)通信事件(通常是接收緩沖區有一序列字符),就會(huì )產(chǎn)生一個(gè)windows消息,同時(shí)將接收到的字符序列送到包組裝器進(jìn)行數據包的組裝。主應用程序處理windows消息隊列發(fā)現有輸入字符的消息后,就進(jìn)行數據包的組裝,或者接收到用戶(hù)界面的變化,對windows的控制或輸入信息轉換成的數據流進(jìn)行處理,進(jìn)行數據包的整合,因為通常收到的數據不是一個(gè)完整的數據包。主程序判別出數據包的類(lèi)型,然后進(jìn)行圖形用戶(hù)界面的更新或發(fā)送數據包的相應處理。
通信過(guò)程
以EBDK中的Demo程序為例,其通信過(guò)程流程如圖5。
EBDK主機軟件結構為分層模塊化形式,每一層都進(jìn)行了封裝,其他層只有通過(guò)接口才能訪(fǎng)問(wèn)。
如果用戶(hù)應用程序發(fā)送了一序列數據,數據在到達RS-232之前,首先會(huì )進(jìn)行包的組裝,生成通信協(xié)議格式的數據包,在發(fā)送數據包之前還必須檢測指令完成狀態(tài)機。指令完成狀態(tài)機指示從發(fā)送前一條指令之后系統是否仍在等待指令完成事件。如果狀態(tài)是空閑(IDLL)則發(fā)送數據包,如果狀態(tài)是等待指令完成(WAITING_FOR_CMD_COMF)用戶(hù)程序則被通知稍候再試。
在接收方向上,執行的操作與之相反。接收來(lái)的數據首先經(jīng)過(guò)包組裝器,組裝成標準的數據包格式,然后解開(kāi)包,抽取包中的數據,進(jìn)行指令解碼,獲得數據中包含的指令。在指令被發(fā)送到指令處理器之前,仍然要檢測指令完成事件,以確定前一條指令是否已經(jīng)被處理。之后,才被指令處理器處理,處理的結果反饋到應用程序進(jìn)行界面的修改或通信狀態(tài)的改變處理。
指令通信示例
以一個(gè)簡(jiǎn)單的示例來(lái)說(shuō)明數據流動(dòng)的全過(guò)程。
從EBDK的通信界面發(fā)送一條指令:
cmd cclk 0x2345
并按回車(chē),將產(chǎn)生一個(gè)Windows事件調用字符串分析器對以空格分界的字符串進(jìn)行標記和處理,生成一條消息字符序列。這個(gè)字符序列是對應指令的HCI位字符流。這個(gè)字符序列被封裝到數據包中,經(jīng)過(guò)通信過(guò)程中的一系列過(guò)程發(fā)送給RS-232DLL,RS-232DLL再立即將它放到COMM口上,攜帶HCI指令的電信號從PC 的COM或USB口發(fā)出,沿著(zhù)RS-232或USB線(xiàn),到達EBDK的COM或USB中,穿過(guò)RS-232緩沖區buffer以及Mother Board進(jìn)入基帶連接器和基帶設備?;鶐У腞OM程序將消息解碼并執行。在這種情況下,它生成一個(gè)數據幀,在空中通過(guò)電磁波傳輸。這個(gè)幀通過(guò)與Radio Module的接口,以串行序列的形式從射頻天線(xiàn)發(fā)送出去。
射頻信號被附近的一個(gè)EBDK獲取,它的射頻模塊將射頻調制信號轉換為一個(gè)數字信號,再以串行形式送到基帶設備?;鶐Э刂坪鸵粋€(gè)HCI數據包或事件包,再由基帶設備將該包通過(guò)RS-232(或USB)線(xiàn)送到PC。PC的CPU收到一個(gè)中斷指示收到一些字節數據,這些數據被送到緩沖器中,然后被RS-232包組裝器(Packet Builder)進(jìn)行處理。應用程序收到一個(gè)消息指明有一個(gè)數據包要處理,最后根據抽取出來(lái)的指令,調用相應的函數進(jìn)行操作。這樣就完成了一個(gè)消息通信的過(guò)程。
要以程序編程實(shí)現上述的過(guò)程,就需要在程序中設置上述操作中的軟件接口動(dòng)作機制。在C++中以一個(gè)通信類(lèi)可以實(shí)現上述的基本操作。
一個(gè)基本的藍牙通信對象應該具有以下的基本操作接口。
發(fā)送消息:
LssuoCommand:發(fā)送指令
TransmitRewData:發(fā)送數據
接收消息:
CommandCompleteSuccess:指令成功完成
CommandPending:指令延遲
CotRxPacket:收到數據包
ReadyForData:準備接收數據
DisconnectionOccurred:發(fā)生連接中斷
GotBTAddress:獲得藍牙通信地址
而在實(shí)際通信操作中,要分為通信客戶(hù)端和通信服務(wù)器端。因此,在基本的通信對象的基礎上要派生出Client 和Server對象,分別就具體的操作進(jìn)行處理。
另外需要一個(gè)包組裝器專(zhuān)門(mén)處理數據包:
On_WMC_RXD_DATA:處理接收到數據之后的動(dòng)作
PackelComplete:包接收完畢的動(dòng)作
InvalidPacket:判斷包是否有效
在VC++中,可以利用藍牙工程模板自動(dòng)生成,因此藍牙通信包軟件的開(kāi)發(fā)具有易于實(shí)現和易與其他軟件捆綁的特點(diǎn)。
結語(yǔ)
本文分析了基于EBDK的藍牙通信的整個(gè)過(guò)程以及軟件實(shí)現機制,可以作為藍牙通信的應用開(kāi)發(fā)的借鑒。具備了Ericsson藍牙開(kāi)發(fā)工具包之后,由于藍牙軟件包具有捆綁性與易實(shí)現性,可以在此基礎上直接進(jìn)行應用的開(kāi)發(fā),也可以從藍牙通信的軟件實(shí)現機制上理出應用的實(shí)現思路?!?
評論