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