當(dāng)前位置:首頁 > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 講師博文 > BLE協(xié)議棧
進(jìn)行BLE 應(yīng)用開發(fā),我們會(huì)經(jīng)常聽說到連個(gè)詞匯“協(xié)議棧”和“協(xié)議”。那他 們之間有什么關(guān)系和區(qū)別呢。
協(xié)議定義的是一系列的通信標(biāo)準(zhǔn),通信雙方需要共同按照規(guī)定好的標(biāo)準(zhǔn)進(jìn)行正常的數(shù)據(jù)收發(fā)。
舉個(gè)例子來說兩個(gè)人想要進(jìn)行交流必須要說同一種語言,這就是協(xié)議。
協(xié)議棧是協(xié)議的具體實(shí)現(xiàn)形式,通俗理解為用代碼實(shí)現(xiàn)的函數(shù)庫(kù),以便于開發(fā)人員調(diào)用。 藍(lán)牙 4.0 BLE 協(xié)議棧就是將各個(gè)層定義的協(xié)議都集合在一起,以函數(shù)的形式實(shí)現(xiàn),并提供一 些應(yīng)用層 API 供用戶調(diào)用。
下面來看一下BLE基本協(xié)議層
藍(lán)牙核心規(guī)格中說明了藍(lán)牙核心系統(tǒng)組成包含主機(jī)部分和控制器部分(一個(gè)主控制器和一 個(gè)或多個(gè)二級(jí)控制器)。主機(jī)和控制器的分離追溯到藍(lán)牙 BR/EDR 設(shè)備時(shí)期,控制器和主機(jī) 通常分開實(shí)現(xiàn)。
主機(jī)部分:所有非核心配置文件以下和主機(jī)控制接口以上層。 控制器部分:主機(jī)控制接口以下層。
ti公司的cc2540的結(jié)構(gòu),將ble協(xié)議棧的各個(gè)部分進(jìn)行了詳細(xì)的區(qū)分,這個(gè)結(jié)構(gòu)對(duì)我們來說過于復(fù)雜。
TI 公司(CC2540)精簡(jiǎn)一下,大致分可分為以下幾層。 所有 Profile (配置文件層)和應(yīng)用都建構(gòu)在 GAP 或 GATT 之上。TI 的 CC2540 器件可以單芯片實(shí)現(xiàn) BLE 藍(lán)牙協(xié)議棧結(jié)構(gòu)圖的所有組件,包括應(yīng)用程序。
下面我們簡(jiǎn)單了解一下藍(lán)牙協(xié)議棧的分層
下面解釋一下我們會(huì)涉及到的一些專業(yè)名詞:
物理層(Physical Layer):1Mbps 自適應(yīng)跳頻 GFSK(高斯頻移鍵控調(diào)制),運(yùn)行在免征的 2.4GHz 頻段。
鏈路層(Link Layer):此層為 RF 控制器,用于控制設(shè)備的射頻狀態(tài),控制設(shè)備會(huì)處于 5 種狀態(tài)之一:待機(jī)(Standby)、廣播、監(jiān)聽/掃描(Scan)、初始化、連接。廣播設(shè)備不需 要建立連接就可以發(fā)送數(shù)據(jù);而掃描設(shè)備監(jiān)聽廣播數(shù)據(jù)。發(fā)起設(shè)備響應(yīng)一個(gè)連接請(qǐng)求給廣播 設(shè)備。如果廣播設(shè)備接受連接請(qǐng)求,發(fā)起者設(shè)備和廣播設(shè)備將會(huì)進(jìn)入連接狀態(tài)。此時(shí)兩個(gè)設(shè) 備的角色變了:主機(jī)和從機(jī)。發(fā)起連接的設(shè)備叫做主機(jī),接受連接請(qǐng)求的設(shè)備稱為從機(jī)。
主機(jī)控制接口層(Host Controller Interface):為主機(jī)和控制器之間提供一個(gè)標(biāo)準(zhǔn)通信接 口。這一層可以通過軟件 API 或硬件接口實(shí)現(xiàn),例如 UART、SPI、USB。
邏輯鏈路控制及自適應(yīng)協(xié)議層(Logical link Control and Adaptation Protocol):為上層提 供數(shù)據(jù)封裝服務(wù),允許邏輯上的點(diǎn)對(duì)多點(diǎn)數(shù)據(jù)通信。
安全管理層(Security Manager):定義了配對(duì)和密鑰分配方式。并為協(xié)議棧的其它層和 其它設(shè)備之間的安全連接和交換數(shù)據(jù)提供服務(wù)。
通用訪問配置文件層(Generic Access Profile):GAP 是直接與應(yīng)用程序或配置文件 (profiles)通信的接口,處理設(shè)備發(fā)現(xiàn)和連接相關(guān)服務(wù)。另外還處理安全特性的初始化。對(duì) 上級(jí),提供應(yīng)用程序接口;對(duì)下級(jí),管理各級(jí)智能部門,尤其是指示 LL 層控制器 5 種狀態(tài) 切換。
屬性協(xié)議層(Attribute Protocol):允許設(shè)備向其它設(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 客戶端,也可以是 ATT 服務(wù)端。
通用屬性配置文件層(Generic Attribute Profile):定義了使用 ATT 的服務(wù)框架。GATT 規(guī)定了配置文件(profiles)的結(jié)構(gòu)。在 BLE 中,所有被 profile 或服務(wù)器用到的數(shù)據(jù)塊都稱之 為“特征”。兩個(gè)建立連接的設(shè)備之間的所有數(shù)據(jù)通信都是通過 GATT 子程序處理。應(yīng)用程 序和 profiles 直接使用 GATT 層。GATT 負(fù)責(zé)處理向上與應(yīng)用打交道,其關(guān)鍵工作是為檢索工 作提供合適的 profile 結(jié)構(gòu),而 profile 由檢索關(guān)鍵詞(characteristics)組成。
再需要介紹的就是協(xié)議棧頂層的配置文件層
藍(lán)牙 4.0BLE 協(xié)議棧配置文件層包括 GAP/安全配置文件、GATT 配置文件兩部分,處于 協(xié)議棧的頂層部分,配置文件將協(xié)議棧和應(yīng)用緊密地聯(lián)系在一起。這使得開發(fā)者即使對(duì)協(xié)議 棧底層的原理沒有深入的了解。也可以方便地進(jìn)行應(yīng)用的開發(fā)。
通用屬性配置文件層(Generic Attribute Profile):定義了使用 ATT 的服務(wù)框架。GATT 規(guī)定了配置文件(profiles)的結(jié)構(gòu)。在 BLE 中,所有被 profile 或服務(wù)器用到的數(shù)據(jù)塊都稱之 為“特征”。兩個(gè)建立連接的設(shè)備之間的所有數(shù)據(jù)通信都是通過 GATT 子程序處理。應(yīng)用程 序和 profiles 直接使用 GATT 層。GATT 負(fù)責(zé)處理向上與應(yīng)用打交道,其關(guān)鍵工作是為檢索工 作提供合適的 profile 結(jié)構(gòu),而 profile 由檢索關(guān)鍵詞(characteristics)組成。
剛才也說到了新的藍(lán)牙規(guī)格采用基于屬性協(xié)議(ATT)的服務(wù)結(jié)構(gòu),所有低功耗數(shù)據(jù)通信都是通過 通用屬性配置文件(GATT)運(yùn)行。從 GATT 角度來看,當(dāng)連個(gè)設(shè)備建立連接后,他們處于 兩個(gè)狀態(tài)――GATT 服務(wù)器和 GATT 客戶端。如果應(yīng)用或另一個(gè)配置文件使用 GATT 配置文 件,那么客戶端和服務(wù)器可以有序的方式進(jìn)行互動(dòng)。
GATT 服務(wù)器――它是為 GATT 客戶端提供讀寫數(shù)據(jù)服務(wù)的設(shè)備。
GATT 客戶端――它是從 GATT 服務(wù)器讀寫應(yīng)用數(shù)據(jù)的設(shè)備。
特別注意的是,GATT 角色中的客戶端和服務(wù)器與鏈路層角色的主機(jī)和從機(jī)是兩個(gè)完全 獨(dú)立的概念,與 GAP 的外設(shè)和集中器也是完全獨(dú)立的。一個(gè)從機(jī)可以是 GATT 客戶端或 GATT 服務(wù)器;主機(jī)也可以是 GATT 客戶端和 GATT 服務(wù)器。
服務(wù)器包含一個(gè)或多個(gè) GATT 服務(wù),GATT 服務(wù)是完成特定功能的一系列數(shù)據(jù)的集合。 而 GATT 配置文件定義如何利用屬性協(xié)議發(fā)現(xiàn)、讀取、編寫和獲取指示。這些功能支持基于 服務(wù)的結(jié)構(gòu)。所采用的服務(wù)在配置文件規(guī)格中有所界定。GATT 使你能了解配置文件規(guī)格所 界定的服務(wù)和特征。
GATT 結(jié)構(gòu)使創(chuàng)建和實(shí)施新的配置文件更加容易。許多新的配置文件仍在開發(fā)過程中, 因?yàn)檫@一優(yōu)勢(shì)繼續(xù)擴(kuò)大。配置文件實(shí)施十分簡(jiǎn)單,有助應(yīng)用和支持這些配置文件的嵌入式設(shè) 備迅速增加。
在 TI 公司的示例工程 SimpleBLEPeripheral 應(yīng)用中,有三個(gè)服務(wù):
強(qiáng)制的 GAP 服務(wù)――這一服務(wù)包含設(shè)備和訪問信息,例如,設(shè)備名、供應(yīng)商和產(chǎn)品 標(biāo)示,它是 BLE 協(xié)議棧的一部分,是 BLE 規(guī)范對(duì)每一個(gè) BLE 設(shè)備必須強(qiáng)制要求的, 這部分源碼并沒有提供,而是編譯到協(xié)議棧庫(kù)中了。
強(qiáng)制的 GATT 服務(wù)――這一服務(wù)包含 GATT 服務(wù)器的信息,是協(xié)議棧的一部分。是 BLE 規(guī)范對(duì)每一個(gè) GATT 服務(wù)器設(shè)備的必須要求。這部分源碼并不提供,而是編譯 到協(xié)議棧庫(kù)中。
SimpleGATTProfile 服務(wù)――這個(gè)服務(wù)是一個(gè)示例配置文件進(jìn)行測(cè)試和示范。所有的 源碼程序在 simpleGATTProfile.c 和 simpleGATTProfile.h 文件中。這個(gè)服務(wù)包含應(yīng)用 數(shù)據(jù)的信息,與應(yīng)用數(shù)據(jù)的傳遞密切相關(guān)。讀者可以按照上面示例特定的格式編寫 自己的 GATT 服務(wù)。
“特性”是服務(wù)用到的值,以及其內(nèi)容和配置信息,GATT 定義了 BLE 連接中發(fā)現(xiàn)、讀 取、寫入屬性的子過程。GATT 服務(wù)上的特性值,及其內(nèi)容和配置信息(即描述符)存儲(chǔ)于 屬性表中。屬性表是一個(gè)數(shù)據(jù)庫(kù),包含了小塊數(shù)據(jù)被稱之為屬性。除了值本身,每個(gè)屬性都 有與之相關(guān)的以下屬性。
句柄——屬性在表中的地址,每個(gè)屬性有唯一的句柄。
類型——這表明數(shù)據(jù)所代表的含義,通常由 Bluetooth SIG 規(guī)定或用戶自定義的 “UUID”(universal unique identifier)。
權(quán)限——規(guī)定了 GATT 客戶端設(shè)備對(duì)屬性的訪問權(quán)限,包括是否能訪問和怎樣訪問。
GATT 定義了 GATT 服務(wù)器和客戶端之間通信的若干個(gè)子進(jìn)程。
下面是一些子進(jìn)程:
l 讀特性值——客戶端設(shè)備請(qǐng)求讀取特定句柄處的特性值,服務(wù)器將此值回應(yīng)為客戶端 (假設(shè)屬性為可讀權(quán)限)。
l 使用特性的 UUID 讀——客戶端請(qǐng)求一個(gè)特定類型的所有特性值,服務(wù)端將所有相匹 配類型的特性的句柄和值回應(yīng)給客戶端(假定屬性有讀權(quán)限)。客戶端不需要知道 這些特性的句柄。
l 讀多個(gè)特性值——客戶端一次請(qǐng)求讀取多個(gè)句柄的特性值,服務(wù)器將這些特性值回 應(yīng)給客戶端(假定屬性有讀權(quán)限),客戶端需要知道如何解析這些不同特性值的數(shù) 據(jù)。
l 讀特性描述符——客戶端請(qǐng)求讀取特殊句柄的特性描述符,服務(wù)器將特性描述符的值 回應(yīng)為客戶端(假定屬性有讀權(quán)限)。
l UUID 發(fā)現(xiàn)特性值——客戶端通過發(fā)送“特性”的類型(UUID)來請(qǐng)求發(fā)現(xiàn)這個(gè)“特 性”的句柄,服務(wù)器將特性的聲明回應(yīng)給客戶端,其中包括特性值的句柄以及特性 的權(quán)限。
l 寫特性值——客戶端請(qǐng)求向服務(wù)器特定的句柄寫入特性值,服務(wù)器將數(shù)據(jù)是否寫入成 功的信息反饋給客戶端。
l 寫特性描述符——客戶端請(qǐng)求向服務(wù)器特定的句柄寫入特性描述符,服務(wù)器將數(shù)據(jù)是 否寫入成功的信息反饋給客戶端。
l 特性值通知——服務(wù)器將一個(gè)特性值通知給客戶端。這個(gè)客戶端無需向服務(wù)器請(qǐng)求這 個(gè)數(shù)據(jù),當(dāng)客戶端接收到通知數(shù)據(jù)后 3,也不需要回應(yīng)服務(wù)器。但必須首先配置特性 使能通知服務(wù),profile 定義了什么時(shí)候服務(wù)器應(yīng)該發(fā)送這個(gè)數(shù)據(jù)。
每個(gè) profile 初始化其相應(yīng)的服務(wù)并內(nèi)在的通過 GATT 服務(wù)注冊(cè)服務(wù)。GATT 服務(wù)添加整 個(gè)服務(wù)向?qū)傩粤斜恚⒔o每個(gè)屬性分配唯一句柄。
GATT 屬性列表中有一些特殊屬性類型,其值有藍(lán)牙技術(shù)聯(lián)盟技術(shù)定義:
GATT_PRIMARY_SERVICE_UUID——表示新服務(wù)的開始和提供的服務(wù)類型。
GATT_CHARACTER_UUID——稱之為“特性聲明”,表示緊跟其后的是 GATT 特 性值。
GATT_CLIENT_CHAR_CFG_UUID——這個(gè)屬性代表特性描述符,它與屬性表中它 前面近的句柄處的特征值相關(guān),它允許 GATT 客戶端設(shè)備使能特性值通知。
GATT_CHAR_USER_DESC_UUID——這個(gè)屬性代表特性描述符,它與屬性表中它前 面近的句柄處的特性值相關(guān),包含一個(gè) ASCII 字符串,是對(duì)相關(guān)特性的描述。
這些特定屬性類型在 BLE 規(guī)范中包括,更多其他的詳細(xì)屬性類型請(qǐng)參考文檔 BLE_API_Guide_main.htm。
下面是已經(jīng)采用的基于 GATT 的藍(lán)牙配置文件和服務(wù):
基于 GATT 的規(guī)格 服務(wù)
(可進(jìn)行資格認(rèn)證)
已采納 版本
ANP 警報(bào)通知配置文件
1.0
ANS 警報(bào)通知服務(wù)
1.0
CTS 當(dāng)前時(shí)間服務(wù)
1.0
DIS 設(shè)備信息服務(wù)
1.0
FMP Find Me 配置文件
1.0
HTP 健康體溫計(jì)配置文件
1.0
HTS 健康體溫計(jì)服務(wù)
1.0
HRP 心率配置文件
1.0
HRS 心率服務(wù)
1.0
IAS 即時(shí)警報(bào)服務(wù)
1.0
LLS 鏈路丟失服務(wù)
1.0
NDCS 下個(gè)日光節(jié)約時(shí)間更改服務(wù)
1.0
PASP 電話警報(bào)狀態(tài)配置文件
1.0
PASS 電話警報(bào)狀態(tài)服務(wù)
1.0
PXP 近距傳感配置文件
1.0
RTUS 參考時(shí)間更新服務(wù)
1.0
TIP 時(shí)間配置文件
1.0
TPS 發(fā)射功率服務(wù)
1.0
通用訪問配置文件(Generic Access Profile)
BLE 協(xié)議棧中的 GAP 層負(fù)責(zé)處理設(shè)備訪問模式和程序。包括設(shè)備發(fā)現(xiàn)、建立連接、終止
連接、初始化安全特寫和設(shè)備配置。
GAP 層總是作為下面四種角色之一:
(1) 廣播者------不可連續(xù)廣播設(shè)備;
(2) 觀察者------掃描廣播,但不發(fā)起建立連接;
(3) 外部設(shè)備------可連接的廣播設(shè)備,可以在單個(gè)鏈路層連接中作為從機(jī);
(4) 集中器------掃描廣播設(shè)備并發(fā)起連接,在單鏈路層或多鏈路層作為主機(jī),目前,TI 的 BLE 協(xié)議棧支持一個(gè)集中器連接 3 個(gè)外設(shè)。
BLE 規(guī)范說明允許特性的的多個(gè)角色組合。簡(jiǎn)單外設(shè)實(shí)例默認(rèn)僅支持外設(shè)角色,可以通 過添加源碼程序使工程同時(shí)指出外設(shè)和廣播角色。當(dāng)然在編譯廣播源碼時(shí),需禁止編譯外設(shè) 源碼。
在典型低功耗藍(lán)牙系統(tǒng)中,外部設(shè)備廣播特定數(shù)據(jù)為了是集中器知道它是一個(gè)可連接設(shè)備。廣播包包含:設(shè)備地址、以及一些額外的數(shù)據(jù),例如設(shè)備名。集中器接收到廣播包,會(huì)向外部設(shè)備發(fā)送一個(gè)掃描請(qǐng)求,這個(gè)外部設(shè)備響應(yīng)一個(gè)響應(yīng)信號(hào),被稱之“掃描回應(yīng)”。因此集中器選擇意識(shí)到外部設(shè)備,知道是可以連接的設(shè)備,這就是發(fā)現(xiàn)設(shè)備的過程。此時(shí),集中器向外部設(shè)備發(fā)送請(qǐng)求建立連接。一個(gè)連接請(qǐng)求包含許多連接參數(shù):
連接時(shí)間間隔(Connection Interval)
兩個(gè) BLE 設(shè)備連接使用跳頻機(jī)制,兩個(gè)設(shè)備發(fā)送和接收數(shù)據(jù)使用特定的信道,一段時(shí)間 后使用心得信道(鏈路層處理信道切換),兩設(shè)備在切換設(shè)備之后收發(fā)數(shù)據(jù)稱之為連接事件。 即使沒有應(yīng)用數(shù)據(jù)收發(fā),兩設(shè)備也一直通過交換鏈路層數(shù)據(jù)位置連接狀態(tài)。連接間隔就是兩 個(gè)連接時(shí)間的間隔。連接間隔以 1.25ms 為單位。連接間隔的范圍:6(7.5ms)~ 3200(4s)。
不同的應(yīng)用可能要求不同的連接間隔。長(zhǎng)時(shí)間連接間隔的優(yōu)勢(shì)是節(jié)省功耗。因?yàn)樵O(shè)備在連接過程中有大量的睡眠時(shí)間,不好之處是設(shè)備發(fā)送數(shù)據(jù)后,需要等待哦下一個(gè)連接設(shè)備。
短的連接間隔好處是設(shè)備收發(fā)數(shù)據(jù)機(jī)會(huì)多,因?yàn)閮蓚(gè)之間連接的頻率高。不好之處是耗能較高,因?yàn)樵O(shè)備頻繁被連接事件喚醒。
n從機(jī)延時(shí)(Slave Latency) 這項(xiàng)參數(shù)可以使從機(jī)(外設(shè))跳過幾項(xiàng)連接事件,使從機(jī)設(shè)備更靈活。如果沒有數(shù)據(jù)發(fā)
送時(shí),可以選擇跳過連接事件和休眠,以至于更省電。這個(gè)是由從機(jī)(外設(shè))決定。
從機(jī)延時(shí)值就是可以跳過大的連接事件個(gè)數(shù)。其值的范圍:0 ~ 499,0 表示不跳過任 何連接事件。然而大有效間隔時(shí)間不能大于 16s。
監(jiān)視超時(shí)(Supervision Timeout)
兩個(gè)成功連接事件之間的大允許間隔。如果超過了這個(gè)大時(shí)間而沒有成功的連接事 件,設(shè)備被認(rèn)為丟失連接,返回沒有連接狀態(tài)。參數(shù)值以 10ms 為單位。監(jiān)視超時(shí)值的范圍 從 10(100Ms) ~ 3200(32s)。另外,超時(shí)值必須大于有效連接間隔。
有效間隔時(shí)間等于連個(gè)連接事件按之間的時(shí)間。假設(shè)從機(jī)跳過可能事件的大數(shù)量被從 機(jī)延時(shí)允許(如果從機(jī)延時(shí)被設(shè)置為 0,測(cè)有效連接間隔等于真實(shí)連接事件)。下面是運(yùn)算 公式:
這就是告訴我們,在這種情況下,從機(jī)向主機(jī)沒有數(shù)據(jù)發(fā)送時(shí),從機(jī)僅僅是每個(gè) 500ms 傳輸一次連接事件。
許多應(yīng)用中,從機(jī)設(shè)置跳過連接事件大個(gè)數(shù)。因此,在選擇連接參數(shù)時(shí),需要考慮有 效連接間隔。選擇正確的連接參數(shù)對(duì) BLE 設(shè)備的功耗優(yōu)化啟到重要作用。先列表在連接參數(shù) 設(shè)置上給出一個(gè)通用概述:
減少連接間隔: u增加設(shè)備功耗
增加雙向傳輸數(shù)據(jù)量
降低設(shè)備之間數(shù)據(jù)傳輸所用的時(shí)間 增加連接間隔:
降低設(shè)備的功耗 u降低設(shè)備傳輸數(shù)據(jù)量 u提高設(shè)備之間數(shù)據(jù)傳輸所用的時(shí)間
減少?gòu)臋C(jī)延時(shí)(或這個(gè)為 0): u提高從機(jī)設(shè)備的功耗 u降低從機(jī)設(shè)備接收集中器數(shù)據(jù)的時(shí)間。
降低從機(jī)延時(shí): u外圍設(shè)備沒有數(shù)據(jù)發(fā)送集中器期間降低了功耗。、
Effective Connection Interval = (Connection Interval) * ( 1 + (Slave Latency) )
Take the following example: Connection Interval: 80 (100ms) Slave Latency: 4
Effective Connection Interval: (100ms) * ( 1 + 4 ) = 500ms
提高集中器發(fā)送給外圍設(shè)備的數(shù)據(jù)時(shí)間。
在某些情況,集中器向外設(shè)請(qǐng)求一個(gè)連接參數(shù)包,對(duì)外設(shè)也是不容易的。在其他情況, 一個(gè)外設(shè)可能期望改變連接中的參數(shù),以外設(shè)應(yīng)用為基礎(chǔ)。外設(shè)可以通過向集中器發(fā)送“連 接參數(shù)參數(shù)更新請(qǐng)求”來改變連接設(shè)置,這個(gè)請(qǐng)求由協(xié)議棧的 L2CAP 層處理。這個(gè) 請(qǐng)求包 括 4 個(gè)參數(shù):小連接間隔、大連接間隔、從機(jī)延時(shí)和超時(shí)連接。這些參數(shù)值代表外設(shè)所 要求的連接參數(shù)。集中器接收請(qǐng)求后可以選擇接收或拒絕這些新的參數(shù)。
連接可以被主機(jī)和從機(jī)以任何原因自動(dòng)終止。一方發(fā)起終止,并且另一方必須響應(yīng),因此兩個(gè)設(shè)備都退出連接狀態(tài)。
GAP 層也處理 BLE 連接中安全特性的初始化,只有在已認(rèn)證連接中,特定的數(shù)據(jù)才能被 讀寫。一旦連接建立,兩個(gè)設(shè)備進(jìn)行配對(duì)。當(dāng)配對(duì)完之后,形成加密和認(rèn)證鏈接的秘鑰。典 型案例中,外設(shè)請(qǐng)求集中器提供秘鑰來完成配對(duì)工作。秘鑰可能是一個(gè)固定值,例如“000000”, 也可以是一個(gè)隨機(jī)產(chǎn)生的值提供給使用者。當(dāng)集中器發(fā)送正確的秘鑰后,兩個(gè)設(shè)備交換安全 秘鑰并加密和認(rèn)證鏈接。
在許多情況下,同一對(duì)集中器和外設(shè)會(huì)不時(shí)地連接和斷開,BLE 有一個(gè)安全特性在配對(duì) 時(shí),提供一個(gè)長(zhǎng)期的安全秘鑰信息。這種特性叫做綁定。它允許兩個(gè)設(shè)備重新連接后快速完 成加密和認(rèn)證,并且不需要每次連接執(zhí)行配對(duì)過程,只需要兩個(gè)之間存儲(chǔ)這個(gè)長(zhǎng)期秘鑰信息。
參考 SimpleBLEPeripheral 應(yīng)用,GAP 部分由 GAP 配置文件處理,并且綁定信息管理由 GAP 安全配置文件(security profile)處理,更多的信息在 TI 的 CC2540/41 BLE 協(xié)議棧的 GAP 配置文件頭文件
鏈路層規(guī)格
借助先進(jìn)的省電和加密功能,鏈路層將提供超低耗能的閑置模式運(yùn)行、簡(jiǎn)單的設(shè)備發(fā)現(xiàn) 以及可靠的點(diǎn)對(duì)多點(diǎn)數(shù)據(jù)傳輸。
使用 GAP 和 GATT 的堆棧 API
應(yīng)用程序和配置文件直接調(diào)用 GAP 和 GATT API 功能來實(shí)現(xiàn) BLE 相關(guān)功能,例如,廣
播、連接、讀寫“特性” 。
APIs 中有不同層的 BLE 協(xié)議棧的詳細(xì)信息。可以在 HTML 指導(dǎo)中咨詢,更多其他的詳
細(xì)信息請(qǐng)參考 BLE_API_Guide_main.htm 文檔。 使用 GAP 和 GATT 的 API 功能一般步驟如下: (1) 使用適當(dāng)?shù)膮?shù)調(diào)用 API 功能;
(2) 協(xié)議棧執(zhí)行特定的操作并返回;
(3) 操作完成后,或者任何時(shí)候堆棧有消息需要報(bào)告給調(diào)用 API 功能的任務(wù),堆棧發(fā)送 一條 OSAL 纖細(xì)給調(diào)用 API 的任務(wù)。
(4) 調(diào)用 API 任務(wù)接收和處理相應(yīng)地消息;
(5) 調(diào)用 API 的任務(wù)釋放消息;
從 GAP 從機(jī)角色 profile 可以看到一個(gè)過程的示例(peripheral.c)。
(1) Profile 調(diào)用 GAP API 函數(shù) GAP_DeviceInit 初始化設(shè)備;、
(2) GAP 進(jìn)行初始化并返回 SUCCESS(0x00);
(3) 初始化之完成后,BLE 協(xié)議棧發(fā)送 OSAL 消息,外圍角色 profile 的頭事件值為 GAP_MSG_EVENT,并且操作碼為 GAP_DEVICE_INIT_DONE_EVENT;
(4) Profile 任務(wù)接收 SYS_EVENT_MSG 事件,表明它是一個(gè)消息,Profile 接收到這個(gè) 消息并查看消息頭和操作碼的值。基于這些,Profile 知道將消息數(shù)據(jù)歸類到相應(yīng)的類型 (gapDeviceInitDoneEvent_t)并處理。這種情況下,Profile 將生成密鑰存儲(chǔ)到 Flash 存儲(chǔ)器, 并在本地保存設(shè)備地址;
(5) Profile 釋放消息并返回;
這是另外一個(gè)示例,如果 GATT 客戶端向共同體 GATT 服務(wù)器請(qǐng)求一個(gè) GATT 讀請(qǐng)求,
它是可能存在的。
(1) 應(yīng)用調(diào)用 GATT 子程序 API 功能,連接通過,特性句柄(包含數(shù)據(jù)類型),它自己
的任務(wù) ID 作為參數(shù)。
(2) GATT 處理請(qǐng)求,并返回 SUCCESS;
(3) 在下次連接事件協(xié)議棧發(fā)送讀請(qǐng)求,遠(yuǎn)處的設(shè)備接收到讀請(qǐng)求,協(xié)議棧發(fā)送一個(gè)包含 讀響應(yīng)的 OSAL 消息給應(yīng)用,消息包括頭事件值為 GATT_MSG_EVENT,操作碼為 ATT_READ_RSP;
(4) 應(yīng)用任務(wù)接收到 SYS_EVENT_MSG 事件,表示它是一個(gè)消息,Profile 接收到這個(gè)消 息并查看消息頭和操作碼。基于這些,Profile 知道將消息歸類到相應(yīng)的類型(attReadRsp_t), 檢索在讀響應(yīng)中接收的數(shù)據(jù)。
(5) Profile 釋放消息并返回;
GATT 的 Profile 層次結(jié)構(gòu)
為了實(shí)現(xiàn)用戶的應(yīng)用,profile 通常有一個(gè)或者多個(gè)“Services”組成。
一個(gè) service 或許包含某個(gè)特征值“characteristic values”,(例如,在一個(gè)溫度采集設(shè)備 中,通常會(huì)包含一個(gè)溫度的特征值) 每一個(gè)特征值必須有占用一個(gè)特征申明結(jié)構(gòu),其中包括他的其他特性,它是服務(wù)端和客 戶端共享的讀寫空間
這個(gè)特征值可以包含一個(gè)可選的描述(descriptor 字串),來只是這個(gè)特征值的含義。