藍(lán)牙v4.0與以前的版本有根本區(qū)別,因?yàn)樗詢蓚€(gè)協(xié)議為基礎(chǔ),而非一個(gè)協(xié)議。 這帶來了一些需要藍(lán)牙Smart品牌解決的問題”Svein-Egil Nielsen解釋說。
雖然藍(lán)牙技術(shù)聯(lián)盟(SIG)在很多事情上都備受指責(zé),但是在消費(fèi)者中成功樹立藍(lán)牙品牌卻無可非議。早在2008年進(jìn)行的一項(xiàng)獨(dú)立調(diào)查發(fā)現(xiàn),85%的消費(fèi)者“認(rèn)識(shí)了無線技術(shù)”, 今天這個(gè)數(shù)字很可能會(huì)更高。
隨著藍(lán)牙v4.0的推出,技術(shù)聯(lián)盟面臨著一個(gè)新的挑戰(zhàn),就是準(zhǔn)確解釋這項(xiàng)技術(shù)是什么。 跟以往版本不一樣,藍(lán)牙v4.0架構(gòu)采用了兩類不同的無線電技術(shù)和協(xié)議。一種類型可以與以往版本通信,而另一種則不可以。
從用戶所關(guān)注的互操性到工程人員所需,技術(shù)聯(lián)盟的答案是,新品牌可幫助消費(fèi)者在市場(chǎng)上找到所需產(chǎn)品。藍(lán)牙Smart和藍(lán)牙Smart Ready品牌背后所采用的藍(lán)牙v4.0技術(shù)正在被廣泛應(yīng)用。
藍(lán)牙4.0BLE介紹
藍(lán)牙4.0支持的角色有:
廣播者(BroadCaster)——廣告發(fā)送者,不是可連接的設(shè)備
觀察者(Observer)——掃描廣告,不能夠啟動(dòng)連接
外圍設(shè)備(Peripheral)——廣告發(fā)送者,是可連接的設(shè)備,在單一鏈路層連接時(shí)作為一個(gè)從機(jī)
中央設(shè)備(Center)——掃描廣告啟動(dòng)連接,在單一或者多鏈路層連接時(shí)作為主機(jī),支持三個(gè)同時(shí)連接
廣播者跟觀察者配對(duì)使用不能建立連接。應(yīng)用:溫度傳感器跟溫度顯示器。
中央設(shè)備跟外圍設(shè)備可以進(jìn)行連接、配對(duì)、數(shù)據(jù)通信。應(yīng)用:手表跟手機(jī)。
BLE連接的過程:
1、外圍設(shè)備發(fā)送具體的廣告數(shù)據(jù)讓任何中央設(shè)備知道他是一個(gè)可連接的設(shè)備,廣告內(nèi)容包含設(shè)備地址,還可以包含一些額外的額數(shù)據(jù),比如設(shè)備名稱、服務(wù)ID等。
2、中央設(shè)備(Center)接收到廣告后發(fā)送一個(gè)搜索請(qǐng)求給外圍設(shè)備(Peripheral),外圍設(shè)備(Peripheral)返回掃描響應(yīng)給中央設(shè)備(Center)。這樣中央設(shè)備就知道這是一個(gè)可連接的設(shè)備。
3、中央設(shè)備可以發(fā)送一個(gè)建立連接的請(qǐng)求給外圍設(shè)備。進(jìn)行配對(duì)連接,必要時(shí)進(jìn)行綁定操作(連接可以被從機(jī)或者主機(jī)任一方終止)。
配對(duì)(Pairing):建立連接,配對(duì)完成后可以進(jìn)行數(shù)據(jù)通信。
綁定(Banding): 將配對(duì)信息記錄下來,如設(shè)備地址,這樣下次連接時(shí)就不需要再次配對(duì)的過程(快速連接)。
藍(lán)牙低功耗:
低耗能藍(lán)牙技只用 3 個(gè) 信道做廣播信道,允許毫秒級(jí)快速建立連接,效率遠(yuǎn)高于傳統(tǒng)藍(lán)牙的 32 個(gè)信道方式。
少的數(shù)據(jù)頻道和寬頻道間隔:傳統(tǒng)藍(lán)牙有 79 個(gè)數(shù)據(jù)信道,頻道間隔 是 1MHz;低耗能藍(lán)牙有 40 個(gè)數(shù)據(jù)信道,頻 道間隔是 2MHz。
傳統(tǒng)藍(lán)牙的工作峰值電流一般是 35mA,睡眠狀態(tài)電流是 0.01mA。
而低耗能藍(lán)牙的工作峰值電流是小于 15mA,睡眠狀態(tài)電流是 0.004mA
還可以軟件設(shè)置以下三個(gè)參數(shù)來降低功耗。
連接間隔:當(dāng)設(shè)備建立連接時(shí),即使沒有數(shù)據(jù)的收發(fā),兩設(shè)備仍然會(huì)通過交換鏈路層數(shù)據(jù)來維持連接,連接間隔就是兩個(gè)連接事件之間的時(shí)間間隔。設(shè)置范圍(7.5ms - 4s)。
從機(jī)延遲: 從機(jī)可以跳過若干連接事件繼續(xù)休眠節(jié)省功耗。
管理超時(shí):兩個(gè)成功連接事件之間最大的允許間隔。如果超出這個(gè)時(shí)間就認(rèn)為設(shè)備斷開連接。設(shè)置范圍(100ms--32s)
藍(lán)牙4.0BLE協(xié)議與協(xié)議棧的關(guān)系
協(xié)議定義的是一系列的通信標(biāo)準(zhǔn),通信雙方需要共同按照這一標(biāo)準(zhǔn)進(jìn)行正常的數(shù)據(jù)收發(fā)。
協(xié)議棧是協(xié)議的具體實(shí)現(xiàn)形式,通俗的理解為用代碼實(shí)現(xiàn)的函數(shù)庫,以便于開發(fā)人員調(diào)用。
藍(lán)牙4.0BLE協(xié)議棧就是將各個(gè)層定義的協(xié)議都集合在一起,以函數(shù)的形式實(shí)現(xiàn),并提供一些應(yīng)用層API,供用戶調(diào)用。
注意:雖然協(xié)議是統(tǒng)一的,但是協(xié)議的具體實(shí)現(xiàn)形式是變化的,即不同廠商提供的協(xié)議棧是有區(qū)別的,例如:函數(shù)名稱和參數(shù)列表可能有區(qū)別,選擇協(xié)議棧以后,需要學(xué)習(xí)具體的例子,查看廠商提供的Demo演示程序、說明文檔(通常,實(shí)現(xiàn)協(xié)議棧的廠商會(huì)提供一些API手冊(cè)供用戶查詢)來學(xué)習(xí)各個(gè)函數(shù)的使用方式,進(jìn)而快速地使用協(xié)議棧進(jìn)行應(yīng)用程序的開發(fā)工作。
如何使用藍(lán)牙4.0BLE協(xié)議棧
既然藍(lán)牙4.0BLE協(xié)議棧已經(jīng)實(shí)現(xiàn)了藍(lán)牙4.0BLE協(xié)議,那么用戶就可以使用協(xié)議棧提供的API進(jìn)行應(yīng)用程序的開發(fā),在開發(fā)過程中不必過多的關(guān)注藍(lán)牙4.0BLE協(xié)議的具體實(shí)現(xiàn)細(xì)節(jié),只需要關(guān)注一個(gè)核心的問題:應(yīng)用程序數(shù)據(jù)從哪里來到哪里去。
至于調(diào)用協(xié)議棧中函數(shù)后,如何初始化應(yīng)用進(jìn)行數(shù)據(jù)發(fā)送等工作,藍(lán)牙4.0BLE協(xié)議棧已經(jīng)完成了所需要的初始化。
如果開發(fā)過程中確實(shí)需要或者是想要了解藍(lán)牙4.0BLE協(xié)議,可以查看SIG提供的標(biāo)準(zhǔn)協(xié)議規(guī)范。
深入理解藍(lán)牙4.0BLE協(xié)議棧
協(xié)議棧概述
我們以TI的CC254X系列BLE芯片為例來深入了解下藍(lán)牙4.0BLE協(xié)議棧。TI的藍(lán)牙4.0BLE協(xié)議棧包含兩部分:主機(jī)和控制器。主機(jī)和控制器的分離要追溯到藍(lán)牙BR/EDR設(shè)備時(shí)期,控制器和主機(jī)通常會(huì)分開實(shí)現(xiàn)。
協(xié)議棧的實(shí)現(xiàn)方式采用分層的思想,控制器部分包括:物理層、鏈路層、主機(jī)控制接口層;主機(jī)部分包括:邏輯鏈路控制及自適應(yīng)協(xié)議層、安全管理層、屬性協(xié)議層、通用訪問配置文件層、通用屬性配置文件層;上層可以調(diào)用下層提供的函數(shù)來實(shí)現(xiàn)需要的功能。
協(xié)議棧基礎(chǔ)
藍(lán)牙4.0BLE協(xié)議棧的結(jié)構(gòu)圖如下:
詳細(xì)介紹如下:
1.物理層(Physical Layer,簡寫 PHY):
是1Mbps自適應(yīng)跳頻的GFSK射頻,工作于免許可證的2.4GHz ISM(工業(yè)、科學(xué)與醫(yī)療)頻段。
2.鏈路層(Link Layer,簡寫 LL):
用于控制設(shè)備的射頻狀態(tài),設(shè)備將處于五種狀態(tài)之一:等待、廣告、掃描、初始化、連接。廣播設(shè)備不需要建立連接就可以發(fā)送數(shù)據(jù),而掃描設(shè)備接收廣播設(shè)備發(fā)送的數(shù)據(jù);發(fā)起連接的設(shè)備通過發(fā)送連接請(qǐng)求來回應(yīng)廣播設(shè)備,如果廣播設(shè)備接受連接請(qǐng)求,那么廣播設(shè)備與發(fā)起連接的設(shè)備將會(huì)進(jìn)入連接狀態(tài)。發(fā)起連接的設(shè)備稱為主機(jī),接受連接請(qǐng)求的設(shè)備稱為從機(jī)。
3.主機(jī)控制接口層(Host Controller Interface,簡寫 HCI):
為主機(jī)和控制器之間提供標(biāo)準(zhǔn)通信接口。這一層可以是軟件或者硬件接口,如UART、SPI、USB等。
4.邏輯鏈路控制及自適應(yīng)協(xié)議層(Logical Link Control and Adaptation Protocol,簡寫 L2CAP):
為上層提供數(shù)據(jù)封裝服務(wù),允許邏輯上的點(diǎn)對(duì)點(diǎn)數(shù)據(jù)通信。
5.安全管理層(Security Manager,簡寫 SM):
定義了配對(duì)和秘鑰分配方式,并為協(xié)議棧其他層與另一個(gè)設(shè)備之間的安全連接和數(shù)據(jù)交換提供服務(wù)。
6.屬性協(xié)議層(Attribute protocol,簡寫 ATT):
允許設(shè)備向另外一個(gè)設(shè)備展示一塊特定的數(shù)據(jù),稱之為“屬性”。在ATT環(huán)境中,展示“屬性”的設(shè)備稱為服務(wù)器,與之配對(duì)的設(shè)備稱為客戶端。鏈路層狀態(tài)(主機(jī)和從機(jī))與設(shè)備的ATT角色是相互獨(dú)立的。例如:主機(jī)設(shè)備既可以是ATT服務(wù)器,也可以是ATT客戶端;從機(jī)設(shè)備既可以是ATT服務(wù)器,也可以是ATT客戶端。
7.通用屬性配置文件層(Generic Attribute profile,簡寫 GATT):
定義了使用ATT的服務(wù)框架。GATT規(guī)定配置文件(profile)的結(jié)構(gòu)。在BLE中,所有被profile或者服務(wù)用到的數(shù)據(jù)塊稱為“特性”,兩個(gè)建立連接的設(shè)備之間的所有數(shù)據(jù)通信都是通過GATT子程序處理。GATT層用于已連接的藍(lán)牙設(shè)備之間的數(shù)據(jù)通信,應(yīng)用程序和profile直接使用GATT層。
當(dāng)兩個(gè)設(shè)備建立連接之后,它們就處于下面兩種角色之一:
GATT服務(wù)器:為GATT客戶端提供數(shù)據(jù)服務(wù)的設(shè)備。
GATT客戶端:從GATT服務(wù)器讀寫應(yīng)用數(shù)據(jù)的設(shè)備。
注意:GATT角色中的客戶端和服務(wù)器的概念與鏈路層的主機(jī)和從機(jī)的概念完全獨(dú)立,與GAP層角色中的外設(shè)和集中器的概念也是完全獨(dú)立。 主機(jī)既可以是GATT客戶端也可以是GATT服務(wù)器;從機(jī)既可以是GATT客戶端也可以是GATT服務(wù)器。
一個(gè)GATT服務(wù)器中可包含一個(gè)或多個(gè)GATT服務(wù),GATT服務(wù)是完成特定功能的一系列數(shù)據(jù)的集合。每一個(gè)應(yīng)用工程大致包含下列三種服務(wù):
(1)強(qiáng)制的GAP服務(wù)。這一服務(wù)包含了設(shè)備和訪問信息。例如,設(shè)備、設(shè)備供應(yīng)商和產(chǎn)品標(biāo)示。它是協(xié)議棧的一部分,是BLE規(guī)范對(duì)每一個(gè)BLE設(shè)備的強(qiáng)制要求。這部分沒有提供源代碼,而是直接編譯到協(xié)議棧庫文件中了。
(2)強(qiáng)制的GATT服務(wù)。這一服務(wù)包含了GATT服務(wù)器的信息,是協(xié)議棧的一部分,同樣也是BLE規(guī)范對(duì)每一個(gè)BLE設(shè)備的要求。這部分同樣沒有提供源代碼而是直接編譯到協(xié)議棧庫文件中了。
(3)自定義服務(wù)。這部分服務(wù)包含應(yīng)用數(shù)據(jù)的信息,與應(yīng)用數(shù)據(jù)的傳遞密切相關(guān),我們可以按照特定的格式編寫自己的GATT服務(wù)。
“特性”(Characteristic)是服務(wù)用到的值,以及其內(nèi)容和配置信息。GATT定義了在BLE連接中發(fā)現(xiàn)、讀取和寫入屬性的子過程。GATT服務(wù)器上的特性值及其內(nèi)容和配置信息(稱為描述符)存儲(chǔ)于屬性表中。屬性表是一個(gè)數(shù)據(jù)庫,包含了成為屬性的小塊數(shù)據(jù),除了值本身,每個(gè)屬性都包含下列屬性:
(1)句柄:屬性在表中的地址,每個(gè)屬性有唯一的句柄。
(2)類型:表示數(shù)據(jù)代表的事物,通常是藍(lán)牙技術(shù)聯(lián)盟規(guī)定或用戶自定義的UUID(Universally Unique Identifier)。
(3)權(quán)限:規(guī)定了GATT客戶端設(shè)備對(duì)屬性的訪問權(quán)限,包括是否能訪問和怎樣訪問。
GATT定義了若干在GATT服務(wù)器和客戶端之間的通信的子過程:
(1)讀特性值:客戶端設(shè)備請(qǐng)求讀取句柄處的特性值,服務(wù)器將此值回應(yīng)給客戶端(假定屬性有讀權(quán)限)。
(2)使用特性的UUID讀:客戶端請(qǐng)求讀基于一個(gè)特定類型的所有特性值,服務(wù)器將所有與指定類型匹配的特性的句柄和值回應(yīng)給客戶端設(shè)備(假設(shè)屬性有讀權(quán)限)。
(3)讀多個(gè)特性值:客戶端一次請(qǐng)求中讀取幾個(gè)句柄的特性值,服務(wù)器將這些特性值回應(yīng)給客戶端(假設(shè)屬性有讀權(quán)限),客戶端需要知道如何解析這些不同的特性值數(shù)據(jù)。
(4)讀特性描述符:客戶端請(qǐng)求讀特定句柄處的特性描述符,服務(wù)器將特性描述符的值回應(yīng)給客戶端設(shè)備(假設(shè)屬性有讀權(quán)限)。
(5)使用UUID發(fā)現(xiàn)特性:客戶端通過發(fā)送“特性”的類型(UUID)來請(qǐng)求發(fā)現(xiàn)這個(gè)“特性”的句柄。服務(wù)器將這個(gè)”特性”的聲明回應(yīng)給客戶端設(shè)備,其中包括特性值的句柄以及“特性”的權(quán)限。
(6)寫特性值:客戶端設(shè)備請(qǐng)求向服務(wù)器特定的句柄處寫入特性值,服務(wù)器將數(shù)據(jù)是否寫入成功的信息反饋給客戶端(假設(shè)特性有寫權(quán)限,另外有一種特殊的寫類型是不需要服務(wù)器來反饋是否寫入成功的信息的,使用的時(shí)候根據(jù)具體應(yīng)用來具體分析使用)。
(7)寫特性描述符:客戶端設(shè)備請(qǐng)求向服務(wù)器特定的句柄處寫入特性描述符,服務(wù)器將特性描述符是否寫入成功的信息反饋給客戶端(假設(shè)特性描述有寫權(quán)限)。
(8)特性值通知:服務(wù)器將一個(gè)特性值通知給客戶端,客戶端設(shè)備不需要向服務(wù)器請(qǐng)求這個(gè)數(shù)據(jù),客戶端收到這個(gè)數(shù)據(jù)時(shí),不需要屬性協(xié)議層確認(rèn)特性值是否被成功接收。
(9)特性值指示:服務(wù)器將一個(gè)特性值指示給客戶端,客戶端設(shè)備同樣不需要向服務(wù)器請(qǐng)求這個(gè)數(shù)據(jù),但是跟通知不一樣的是,客戶端收到這個(gè)數(shù)據(jù)之后,屬性協(xié)議層必須確認(rèn)特性值被成功接收。
通知與指示功能的流程如下:
何時(shí)發(fā)送通知或指示的條件可以在配置文件中設(shè)置,也可以通過應(yīng)用來設(shè)置。要想使能通知和指示功能,需要分別在相應(yīng)的句柄特性描述符寫入“0x0001”和“0x0002”,如下表所示:
每個(gè)Profile初始化其相應(yīng)的服務(wù)并內(nèi)在的通過設(shè)備的GATT服務(wù)器來注冊(cè)服務(wù)。GATT服務(wù)器將整個(gè)服務(wù)加到屬性表中,并為每個(gè)屬性分配唯一句柄。GATT屬性表中有一些特殊的屬性類型,其值由藍(lán)牙技術(shù)聯(lián)盟定義:
(1)GATT_PRIMARY_SERVICE_UUID:表示新服務(wù)的起始和提供的服務(wù)類型。
(2)GATT_CHARACTER_UUID:稱為“特性聲明”,緊隨其后的是GATT特性值。
(3)GATT_CLIENT_CHAR_CFG_UUID:這一屬性代表特性描述符,它與屬性表中它前面最近的句柄處的特性值相關(guān),它允許GATT客戶端設(shè)備使能特性值通知或者指示。
(4)GATT_CHAR_USER_DESC_UUID:這一屬性代表描述符,它與屬性表中它前面最近的句柄處的特性值相關(guān),包含一個(gè)ASCII字符串,是對(duì)相關(guān)特性的描述。
8.通用訪問配置文件層(Generic Access Profile,簡寫 GAP):
負(fù)責(zé)處理設(shè)備訪問模式和程序,包括設(shè)備發(fā)現(xiàn)、建立連接、終止連接、初始化安全特性和設(shè)備配置。
GAP層總是作為下面四種角色之一:
(1)廣播者:不可連接的廣播設(shè)備。
(2)觀察者:掃描設(shè)備,但不發(fā)起建立連接。
(3)外部設(shè)備:可連接的廣播設(shè)備,可以在單個(gè)鏈路層連接中作為從機(jī)。
(4)集中器:掃描廣播設(shè)備并發(fā)起連接,可以在單個(gè)鏈路層連接中作為主機(jī)。
外部設(shè)備廣播特定的數(shù)據(jù)使集中器知道它是一個(gè)可以連接的設(shè)備。廣播內(nèi)容包括設(shè)備地址以及一些額外的數(shù)據(jù),如設(shè)備名等,當(dāng)然也可以是自定義的數(shù)據(jù),只要滿足廣播數(shù)據(jù)中廣告的格式即可。集中器收到廣播數(shù)據(jù)后向外部設(shè)備發(fā)送掃描請(qǐng)求,然后外部設(shè)備將特定的數(shù)據(jù)回應(yīng)給集中器,稱為掃描回應(yīng)。集中器收到掃描回應(yīng)后便知道這是一個(gè)可以建立連接的外部設(shè)備。這就是設(shè)備發(fā)現(xiàn)的全過程。此時(shí)集中器可以向外部設(shè)備發(fā)起建立連接的請(qǐng)求。連接請(qǐng)求包括一些鏈接參數(shù)。
GAP層也處理BLE連接中安全特征的初始化。只有在已認(rèn)證的連接中特定的數(shù)據(jù)才能被讀寫,一旦連接建立,兩個(gè)設(shè)備進(jìn)行配對(duì),當(dāng)配對(duì)完成后,形成加密鏈接的密鑰。典型應(yīng)用中外設(shè)請(qǐng)求集中器提供密鑰來完成配對(duì)工作,密鑰可以是一個(gè)固定的值,如000000,也可以隨機(jī)生成一個(gè)數(shù)據(jù)提供給使用者,集中器設(shè)備發(fā)送正確的密鑰后,兩設(shè)備交換安全密鑰并加密認(rèn)證鏈接。
在許多情況下,同一對(duì)外設(shè)和集中器會(huì)不定時(shí)地連接和斷開,BLE的安全機(jī)制中有一項(xiàng)特性允許兩個(gè)設(shè)備之間建立長期的安全密鑰信息,這種特性稱為綁定,它允許兩設(shè)備重新連接時(shí)快速地完成加密認(rèn)證,而不需要每次連接時(shí)執(zhí)行配對(duì)的完整過程。
藍(lán)牙4.0BLE協(xié)議棧分層思想的優(yōu)點(diǎn)
藍(lán)牙4.0BLE協(xié)議棧采用分層思路的最大優(yōu)點(diǎn)是:將服務(wù)、接口和協(xié)議這三個(gè)概念明確的區(qū)分開來。服務(wù)說明某一層為上一層提供了一些什么樣的功能;接口說明上一層如何使用下一層的服務(wù);而協(xié)議涉及到如何實(shí)現(xiàn)本層的服務(wù)。這樣,各層之間就具有很強(qiáng)的獨(dú)立性,當(dāng)協(xié)議的一部分發(fā)送變化時(shí),只需對(duì)與此相關(guān)的分層進(jìn)行修改即可,其他分層不需要改變。
評(píng)論
查看更多