王孟柳,陳和平,??》澹瑒?夏
(武漢科技大學 信息科學與工程學院,湖北 武漢 430081)
藍牙是專為滿足人們在個人操作空間范圍的無線互聯(lián)而設計的,它采用調(diào)頻技術使處于個人操作空間的設備形成一個無線個人區(qū)域網(wǎng)絡,真正實現(xiàn)設備之間可移動的,自動的互聯(lián)。以“無線替代電纜”正是藍牙技術開發(fā)的初衷,同時也是藍牙最基本的用途。當然,短距離無線通信有很多種,還包括IrDA、IEEE802.11系列無線局域網(wǎng)、HomeRF、UWB等,但是藍牙技術以其低成本、低功耗、高速率以及標準的全球通用性成為發(fā)展最快,市場推廣最成功的短距離無線通信技術[1]。
藍牙技術是一種低功耗的短距離無線通信技術,它作為無線數(shù)據(jù)與語音通信的開放標準,旨在取代現(xiàn)有的PC機,打印機,移動電話等相關設備上的連線。目前包括大多數(shù)著名IT企業(yè)和通信公司在內(nèi)的藍牙SIG,已經(jīng)推出了很多藍牙產(chǎn)品,實現(xiàn)了藍牙技術的產(chǎn)品化。
實現(xiàn)各個藍牙設備間的通信,僅有底層的藍牙硬件是不夠的,還必須有藍牙協(xié)議棧的支持。藍牙協(xié)議棧運行在中央處理器之上,主要管理和分配系統(tǒng)資源,控制相關硬件,對通過HCI層的命令進行處理,完成藍牙功能[2]。由于協(xié)議找中底層的一些協(xié)議比如LMP等已經(jīng)固化在硬件中,高層的協(xié)議如PPP、TCP/IP也已經(jīng)存在??梢灾苯討茫孕枰獙崿F(xiàn)的是給主機提供HCI的接口、驅動程序、L2CAP層、RFCOMM、SDP功能等協(xié)議棧的中間層部分。
整個藍牙協(xié)議的體系結構分為藍牙底層協(xié)議、中間層協(xié)議和高端應用層3部分[3],具體結構如圖1所示。
圖1 藍牙協(xié)議棧體系結構Fig.1 System structure of Bluetooth protocol stack
射頻層(RF),基帶層(BB)和鏈路管理層(LM)屬于藍牙底層的硬件模塊,它是藍牙技術的核心,是任何藍牙設備都不可少的部分。
中間協(xié)議層主要包括邏輯鏈路控制和適配協(xié)議(L2CAP),服務發(fā)現(xiàn)協(xié)議(SDP),串口仿真協(xié)議(RFCOMM)和電話控制規(guī)范(TCS)。
在藍牙協(xié)議棧的頂層是高端應用層,它相當于各種應用的模型的profile,是profile的一部分。我們可根據(jù)具體應用的模型的不同,選擇需要的現(xiàn)有高層協(xié)議。目前可以選用的高端應用層協(xié)議主要包含:TCP/UDP/IP協(xié)議,點對點協(xié)議(PPP),無線應用協(xié)議(WAP),對象交換協(xié)議(OBEX)等。
為了使不同廠商的非集成藍牙模塊之間能夠互通,SIG定義了一個標準接口與藍牙模塊中的主機控制器進行通信,同時還定義了一個事務性通信協(xié)議,用于在主機和主機控制器之間消息的傳送。這種主機和主機控制器間的標準接口和它們之間相應的通信協(xié)議一起被稱為主機控制器接口(HCI)。
主機控制器接口(HCI)為上層協(xié)議提供了一個獨立于硬件實現(xiàn)的標準接口[4]。它主要包括兩個部分,在主機中運行的驅動程序和在硬件中運行的固件,二者之間通過傳輸層進行通信。目前,藍牙支持的傳輸層主要包括HCI USB傳輸層,HCI RS232傳輸層,HCI UART傳輸層,HCI SD傳輸層。
圖2對軟件層底層進行了概述。HCI固件通過對鏈路管理器,硬件狀態(tài)注冊器,控制注冊器,事件注冊器等的訪問來執(zhí)行藍牙硬件的基帶命令。在主機中的HCI驅動程序和藍牙硬件中的HCI固件間存在許多層次。這些中間層提供了在不需要了解數(shù)據(jù)信息的情況下傳輸數(shù)據(jù)的能力。
從圖2可以看出,HCI驅動程序并不能直接對底層硬件進行操作,而只能利用相應硬件的驅動程序所提供的服務來的操縱硬件。
圖2 藍牙協(xié)議棧底層概述Fig.2 Bottom overview of Bluetooth protocol stack
藍牙標準定義了3種不同的HCI分組類型:命令分組(Command packer)、事件分組(Event packet)和數(shù)據(jù)分組(Data packet)[5-6]。HCI分組通過HCI傳輸層進行傳輸。如圖3所示,HCI命令分組用于主機向主機控制器發(fā)送控制和管理信息,包括設置藍牙模塊的操作狀態(tài)以及寄存器的讀寫。HCI事件分組是主機控制器向主機發(fā)送的信息,用于通知藍牙模塊底層狀態(tài)的變化。HCI數(shù)據(jù)分組用于在主機和主控制器之間傳輸語音(SCO分組)和數(shù)據(jù)(ACL分組)信息。
圖3 HCI分組的三種類型Fig.3 Three types of HCI subgroups
USB是由“通用串行總線實施論壇”組織公開發(fā)表、推廣的一種串行接口標準。USB主要用于連接中低檔外設,其傳輸速率最高可達12 Mbit/s。最高可連接127個設備。圖4所示是USB作為藍牙無線模塊與主機傳輸層接口時,主機棧與藍牙棧的配置情況。
圖4 主機和藍牙無線模塊之間的關系Fig.4 Relationship between the host and Bluetooth wireless module
USB設備可看作高速設備。其固件配置由兩個接口組成。第一個接口為固定設置,并包含BULK和中斷終端。第二個接口提供可擴展的同步帶寬占用方式。該接口方式提供四種設置,以提供基于同步帶寬需求的占用方式。其缺省接口為空,以使設備能夠支持非同步帶寬。
一個HCI幀,包含一個HCI頭和HCI數(shù)據(jù),應包含于一USB事物中。此USB事物中為一個或多個包含I/O請求數(shù)據(jù)的USB幀。例如,包含256字節(jié)的ACL數(shù)據(jù)分組將在I/O請求中通過BULK終端發(fā)送。該I/O請求將需要4個64字節(jié)的USB幀,并組成一個事務。
大多數(shù)藍牙芯片主要實現(xiàn)了如下3層:無線層、基帶層和鏈路管理層。無線層主要完成頻率的合成、bit到符號的轉換和過濾,以及符號的收發(fā)操作;基帶層主要完成編碼/解碼、加密/解密、分組處理和調(diào)頻頻率的生成和選擇;鏈路管理層主要完成鏈接的建立和鏈路的管理。實現(xiàn)結構如圖5所示。
本方案使用的是英國CSR (Cambridge Silicon Radio)提供的單芯片藍牙模塊BlueCore2-Extern。BlueCore2-Extern主要由 MCU、DSP、RAM、ROM、I/O 和一個 2.4 GHz的無線收發(fā)器組成。
圖5 藍牙核心HCI棧Fig.5 Bluetooth core HCI stack
BlueCore2-Extern總共提供了4種硬件接口,UART接口、SPI接口、USB接口和PCM話音接口。本方案使用的是USB接口和PCM話音接口,BlueCore2-Extern通過USB接口與主機控制器的USB接口相連,傳輸HCI命令、HCI事件和ACL數(shù)據(jù)傳輸[7-8]。
對于天線,考慮到結構簡單和制作成本的問題,在目前已有的偶級天線、倒F型天線、折線天線以及微小型陶瓷天線等類型中,本方案選用了折線天線。折線天線的長度很難預測,由折線天線確切的幾何形狀和對地的距離決定,一般比四分之一波長略長。在本方案中我們選用的PCB折線天線印制在頂層,地平面也在頂層,并且位于貼近天線的位置。
無論是以上哪種天線,均采用50 Ω的輸入阻抗與BlueCore2-Extern的ANT端相連。理想狀態(tài)下,微帶線的特征阻抗Z0閉合算式為:
W表示線寬,h表示高度,εre表示介電常數(shù),η表示該天線的發(fā)射效率。硬件實物圖如圖6所示。
圖6 硬件實物圖Fig.6 Hardware diagram
Linux的一個特點就是把所有的東西都看作是文件。而設備驅動程序在Linux中扮演一個非常重要的角色,幾乎所有系統(tǒng)可用的設備都需要各自的驅動程序來協(xié)助訪問。驅動程序運行于內(nèi)核空間,用戶空間的應用程序通過文件系統(tǒng)中/dev/目錄下的一個相對應的文件來和它交互。
本課題采用的是基于USB端口的藍牙適配器。對于一個USB的設備驅動來說,它必須實現(xiàn)若干個系統(tǒng)已經(jīng)定義好的數(shù)據(jù)結構。這些數(shù)據(jù)通常用于向內(nèi)核進行某種注冊。
首先第一個是usb_driver結構體,它的定義如下:
這個結構體將用于向系統(tǒng)注冊新的USB驅動程序和該驅動所支持的設備的ID。當設備接入系統(tǒng)后,內(nèi)核通過注冊的id_table確定對應的驅動程序,并調(diào)用該驅動的probe函數(shù)。而當設備與主機斷開連接時,相應的disconnect函數(shù)就會被調(diào)用。
因為文中要完成的驅動需要在文件系統(tǒng)中創(chuàng)建相應節(jié)點,所有還需要用到另外兩個數(shù)據(jù)結構,sub_class_driver和file_operations,定義如下:
usb_class_driver結構用于向系統(tǒng)注冊映射到/dev/目錄下的文件節(jié)點,所以它需要一個次設備號的起始值。對于USB設備來說,usb_class_driver結構體為我們提供了注冊節(jié)點和文件操作函數(shù)。所以,它還包括了一個文件操作結構指針和一個名字。
HCI驅動的具體流程圖如圖7所示。HCI接口采用事件驅動的工作方式,主機發(fā)送命令,藍牙主控芯片以事件方式返回結果,主機分析所返回事件以確定下一個命令[9-10]。HCI接口采用數(shù)據(jù)包的方式,主要使用了其中3種:命令包,事件包和ACL數(shù)據(jù)包。
將編譯好的HCI驅動模塊移植到arm開發(fā)板并加載,和一般的模塊一樣,可以選擇使用自動加載或手工加載,這里采用手工加載。成功加載好HCI驅動后,將USB藍牙模塊接入arm開發(fā)板,啟動藍牙設備。具體信息如圖8所示。
由圖 8 可知,該藍牙設備的地址為 00:1F:81:00:01:1C,error為0,所以藍牙設備啟動成功。
圖7 HCI驅動流程Fig.7 HCI driving process
圖8 測試結果Fig.8 Test result
文中選擇以主機控制器接口為突破口對藍牙協(xié)議進行了較為深入的分析,在此基礎上針對HCI協(xié)議進行了流程分析和接口設計。HCI是實現(xiàn)藍牙協(xié)議棧時必須實現(xiàn)的一個部分,它的實現(xiàn)對于在具體硬件基礎上自主靈活地構建藍牙協(xié)議棧、開發(fā)藍牙應用起著決定性的作用。從測試結果看,本文設計的HCI驅動程序在arm開發(fā)板平臺上成功的驅動了藍牙模塊,通過所設計的HCI協(xié)議,使得PC主機與arm開發(fā)板之間能夠通過藍牙設備建立無線連接,查看對方設備信息和傳輸ACL數(shù)據(jù),達到了預期的效果。
[1]SIG.Specification of the Bluetooth System(for Bluetooth core)v1.2[S].EuropeanTelecommunicationsStandardsInstitute,1999.
[2]Hartsen J C.The Bluetooth Radio System[J].IEEE Personal Communications Magazine,2000,7(1):28-36.
[3]李靜,耿衛(wèi)東.HCI協(xié)議在嵌入式藍牙系統(tǒng)中的應用[J].半導體技術,2002(8):10-13.
LI Jing,GENG Wei-dong.The HCI protocol in the embedded Bluetooth system application[J].Semiconductor Technology,2002(8):10-13.
[4]Bluetooth Special Interest Group.Bluetooth Network Encapsulation Protocol Specification[C].Version1,2003.
[5]陸佳煒.藍牙主控制器接口簡析[J].半導體技術,2003,28(3):54-57.
LU Jia-wei.The brief analysis of bluetooth host controller interface[J].Semiconductor technology,2003,28(3):54-57.
[6]楊帆.基于BlueCore02-External芯片的藍牙鼠標的設計與實現(xiàn)[J].微機與應用,2005(5):20-22.
YANG Fan.Design and Implementation based BlueCore02-Externalchip Bluetooth mouse[J].Microcomputerand Application,2005(5):20-22.
[7]Cambridge Silicon Radio.BlueCore Serial Protocol(BCSP)[S], Cambridge,2004:7-26.
[8]ZHOU Peng,LING Xiang.HCI-based bluetooth master-slave monitoring system design[C].2010 International Conference on Computational Problem-Solving,2010:406-409.
[9] Cambridge Silicon Radio. HCI Implementation[S],Cambridge,2005:6-8.
[10]SairamK,GunasekaranN.Bluetoothinwirelesscommunication[J].IEEE Personal Communications Magazine,2002,6(40):90-96.