鄒文婷
(四川長(zhǎng)虹電器股份有限公司,四川 綿陽 621000)
在V4.0 之前的版本演進(jìn)中,藍(lán)牙協(xié)議主要追求通信速度的提升。藍(lán)牙協(xié)議V4.0 版本包括三個(gè)子規(guī)范,分別是傳統(tǒng)藍(lán)牙、高速藍(lán)牙以及低功耗藍(lán)牙(Bluetooh Low Energy,BLE)技術(shù)。其中首次增加的子集——低功耗BLE 協(xié)議,與傳統(tǒng)藍(lán)牙同樣使用免許可的2.4 GHz ISM(Industrial Scientific Medical,ISM)無線電頻段(主要開放給工業(yè)、科學(xué)、醫(yī)療領(lǐng)域使用),但顯著降低了功耗及成本。因此,BLE 目前廣泛被應(yīng)用于智慧家居、運(yùn)動(dòng)醫(yī)療等領(lǐng)域[1]。
藍(lán)牙使用2.4 GHz 的ISM 頻段,BLE 的物理信道一共分為40 個(gè),每個(gè)信道帶寬為2 MHz。這40個(gè)物理信道被劃分為兩組,一組是37 個(gè)Data 數(shù)據(jù)信道,另外一組是3 個(gè)ADV 廣播信道。物理信道從0 ~39 進(jìn)行編號(hào),Index 與物理信道之間存在對(duì)應(yīng)關(guān)系,其中物理信道0 對(duì)應(yīng)Index37,物理信道12對(duì)應(yīng)Index38,物理信道39 對(duì)應(yīng)Index39。Index37,Index38,Index39 固定作為廣播信道,對(duì)應(yīng)的中心頻率分別為2 402 MHz,2 426 MHz,2 480 MHz。它們分散在整個(gè)BLE 頻段的不同區(qū)域。在藍(lán)牙連接成功建立之前,設(shè)備之間通過ADV(Advertising)廣播信道來交互數(shù)據(jù),而在藍(lán)牙連接成功建立之后,就使用Data 數(shù)據(jù)信道來進(jìn)行數(shù)據(jù)交互。一個(gè)廣播事件會(huì)在3 個(gè)廣播信道上分別發(fā)送一次,由于廣播信道之間相差至少24 MHz,因此3 個(gè)信道同時(shí)被干擾的幾率很小。在BLE 交互中,從設(shè)備通過廣播信道來表示自己的存在,主設(shè)備通過廣播信道來掃描和發(fā)起連接[2]。
低功耗藍(lán)牙規(guī)范中有兩類報(bào)文,分別是廣播報(bào)文和數(shù)據(jù)報(bào)文。這兩種報(bào)文具有兩種不同的用途。其中,廣播報(bào)文用于發(fā)現(xiàn)、連接過程,可以被多個(gè)設(shè)備掃描偵聽到,或者定向發(fā)給特定設(shè)備。而在連接建立后,則開始使用數(shù)據(jù)報(bào)文,只能被連接中的主、從設(shè)備所解析。廣播報(bào)文在廣播信道傳輸,數(shù)據(jù)報(bào)文在數(shù)據(jù)信道傳輸。報(bào)文格式為前導(dǎo)Preamble(1 Byte)+接入地址Access Address(4 Bytes)+協(xié)議數(shù)據(jù)單元PDU(2 ~39 Bytes)+CRC(3 Bytes)。
前導(dǎo)(Preamble)是報(bào)文最開始的8 bits,為10101010 或者01010101。在廣播通道固定使用10101010 即0xAA 作為前導(dǎo),用于同步通信。Access Address 是接入地址,廣播包的接入地址固定為0x8e89bed6,數(shù)據(jù)包的接入地址則為一個(gè)32 bits 的隨機(jī)值;CRC 部分有3 個(gè)字節(jié)用于CRC 數(shù)據(jù)校驗(yàn)[3]。
將PDU 進(jìn)一步展開,協(xié)議數(shù)據(jù)單元PDU=Header(2 Bytes)+Payload(最大37 Bytes)。
Header 中的Type 通過4 bits 來標(biāo)識(shí)廣播類型,其中0000,0001,0010,0110 分別為BLE 廣播可設(shè)置的4 種類型,即可連接無定向廣播、可連接定向廣播、不可連接無定向廣播以及可掃描無定向廣播。定向和無定向是針對(duì)廣播的對(duì)象而言的,如果是針對(duì)特定對(duì)象的廣播(在廣播包PDU 中會(huì)包含目標(biāo)對(duì)象的BD_ADDR)就是定向廣播,反之就是無定向??蛇B接和不可連接是指是否接受連接請(qǐng)求,如果是不可連接的廣播類型,它將不回應(yīng)連接請(qǐng)求??蓲呙桀愋褪侵缚苫貞?yīng)掃描請(qǐng)求的廣播。
嵌入藍(lán)牙技術(shù)的設(shè)備一般由藍(lán)牙底層模塊controller 和藍(lán)牙主機(jī)host 組成。在實(shí)際應(yīng)用中,controller 位于一個(gè)獨(dú)立的藍(lán)牙模塊中,負(fù)責(zé)定義RF,Baseband 等偏硬件的規(guī)范,而藍(lán)牙host 位于主控CPU,負(fù)責(zé)在邏輯鏈路的基礎(chǔ)上進(jìn)行更為友好的封裝,屏蔽藍(lán)牙的技術(shù)細(xì)節(jié),使得藍(lán)牙應(yīng)用的開發(fā)更為方便。Controller 與host 兩者之間通過主機(jī)控制器接口(Host Controller Interface,HCI)協(xié)議進(jìn)行通信[4]。
通過藍(lán)牙對(duì)設(shè)備進(jìn)行控制,一般需要被控制設(shè)備與控制設(shè)備之間配對(duì)并建立藍(lán)牙連接后才能通過連接事件(Connectiong Event)發(fā)送、接收控制信號(hào),而建立連接的過程需要設(shè)備的藍(lán)牙協(xié)議棧host 處于工作狀態(tài)。被控制設(shè)備在關(guān)機(jī)狀態(tài)下,操作系統(tǒng)及藍(lán)牙協(xié)議棧host 都不處于工作狀態(tài),無法進(jìn)行配對(duì)、連接,因此需要特殊的流程來實(shí)現(xiàn)藍(lán)牙開機(jī)[5],如圖1 所示,具體介紹如下。
圖1 開機(jī)流程實(shí)例
(1)被控制設(shè)備由HOST 與BT controller 模塊組成,彼此通過HCI 與GPIO 接口通信。
(2)被控制設(shè)備與控制設(shè)備在開機(jī)狀態(tài)下進(jìn)行配對(duì)、連接,互相保存配對(duì)密鑰及藍(lán)牙MAC。
(3)被控制設(shè)備的BT controller 模塊長(zhǎng)供電,即在關(guān)機(jī)狀態(tài)下,仍保持供電;被控制設(shè)備的host 在關(guān)機(jī)狀態(tài)下可以卸載藍(lán)牙驅(qū)動(dòng),關(guān)閉操作系統(tǒng),進(jìn)入睡眠(sleep)模式。
(4)被控制設(shè)備從開機(jī)狀態(tài)進(jìn)入關(guān)機(jī)狀態(tài)前,通過HCI 將BT controller 模塊設(shè)置為WoBLE(Wake on BLE)模式,即處于BLE scan 狀態(tài),能掃描到藍(lán)牙廣播并對(duì)收到的廣播數(shù)據(jù)進(jìn)行解析。之后判斷該廣播包是否為本機(jī)的開機(jī)廣播包,即收到的廣播數(shù)據(jù)是否為指定格式,且在指定字段中是否包含本機(jī)的藍(lán)牙MAC。
(5)控制設(shè)備發(fā)出開機(jī)廣播包,開機(jī)廣播包的payload 經(jīng)過專門的設(shè)計(jì),詳見第2 節(jié)。
(6)被控制設(shè)備的BT controller 模塊掃描到開機(jī)廣播報(bào)文,即通過GPIO 發(fā)出約定電平,控制主控CPU 部分系統(tǒng)開機(jī)、加載藍(lán)牙驅(qū)動(dòng)、運(yùn)行藍(lán)牙協(xié)議棧等操作。
(7)被控制設(shè)備系統(tǒng)開機(jī)后,通過HCI 接口設(shè)置BT controller 模塊退出WoBLE 模式。
報(bào)文實(shí)例,如表1 所示。
表1 報(bào)文實(shí)例
針對(duì)報(bào)文實(shí)例的解析如下。
Adv PDU Header 中,Type=‘0x0’即可連接無定向廣播事件。TxAdd 與RxAdd 為‘0x0’即藍(lán)牙地址類型為Public Add(公共地址)。
ADV_IND 凈 荷 為:Payload=AdvA(6 bytes)+AdvData(0 ~31 bytes)。
AdvA 為控制設(shè)備,即發(fā)出開機(jī)廣播的設(shè)備的藍(lán)牙MAC 地址。
Adv Data 由多個(gè)AD Structure(結(jié)構(gòu))組成,每個(gè)AD Structure 的格式都是由三部分構(gòu)成:長(zhǎng)度(Length)+ 類 型(AD Type)+ 數(shù) 據(jù)(AD Data)。第一個(gè)AD Structure 的第一個(gè)字節(jié)是0x02,表示這個(gè)AD Structure 由02 和跟在02 后面的2 個(gè)字節(jié)組成:02 01 05。第二個(gè)AD Structure 的第一個(gè)字節(jié)是0x14,表示這個(gè)AD Structure 由14 和跟在14 后面的20 個(gè)字節(jié)組成:14 FF 0D 00 00 0A 01 3A 1F 38 10 FF FF FF FF 43 48 42 54 52 43。如表2 所示。
表2 開機(jī)廣播報(bào)文實(shí)例Adv Data
被控制設(shè)備的BT controller 模塊掃描到以上開機(jī)廣播報(bào)文,經(jīng)解析長(zhǎng)度、格式滿足定義,且包含被控制設(shè)備的藍(lán)牙MAC(在示例中為0A 01 3A 1F 38 10),即通過IO 口輸出約定電平,控制主機(jī)部分開機(jī)。
目前,智能電視、智能機(jī)頂盒等產(chǎn)品廣泛應(yīng)用此設(shè)計(jì)方案來實(shí)現(xiàn)藍(lán)牙開機(jī)功能,或僅僅對(duì)報(bào)文內(nèi)容稍作調(diào)整定制,但流程設(shè)計(jì)相同。通過以上設(shè)計(jì)實(shí)例可以看出,雖然在BLE 技術(shù)中,廣播通常用于發(fā)現(xiàn)、連接過程,服務(wù)于最終藍(lán)牙連接的建立,但在本篇中,通過對(duì)廣播報(bào)文的特殊設(shè)計(jì),利用廣播的特性,使得在藍(lán)牙連接未能成功建立的場(chǎng)景下,也可實(shí)現(xiàn)部分控制功能。因此,根據(jù)不同報(bào)文的特點(diǎn),結(jié)合實(shí)際場(chǎng)景需求來對(duì)流程進(jìn)行設(shè)計(jì),可以幫助藍(lán)牙開發(fā)者實(shí)現(xiàn)更多的藍(lán)牙控制方式。