一、BLE協(xié)議棧架構(gòu)
BLE 協(xié)議棧(簡(jiǎn)稱(chēng)“協(xié)議”)由兩部分組成:控制器 和 主機(jī)恳邀∨潮控制器與主機(jī)分離的形式來(lái)自標(biāo)準(zhǔn)的藍(lán)牙 BR / EDR設(shè)備,這兩個(gè)部分通常分別描述轩娶。任何 profiles(配置文件)和應(yīng)用程序都是使用 GAP 與 GATT 層協(xié)議棧來(lái)編寫(xiě)程序儿奶。
1.1 控制器部分(Controller)
1.1.1 物理層(PHY)
物理層 負(fù)責(zé)數(shù)據(jù)和語(yǔ)音的發(fā)送和接收,特點(diǎn)是短距離鳄抒、低功耗闯捎。是一種帶寬自適應(yīng)跳頻 GFSK(高斯頻移鍵控),工作在免費(fèi)的工業(yè)頻段2.4GHz许溅。
1.1.2 鏈路層(LL)
鏈路層 控制設(shè)備的射頻狀態(tài)瓤鼻,有五個(gè)設(shè)備狀態(tài):待機(jī)、廣告贤重、掃描茬祷、初始化和連接。
廣播為廣播數(shù)據(jù)包并蝗,而掃描則是監(jiān)聽(tīng)廣播祭犯。
初始化狀態(tài)發(fā)送連接請(qǐng)求包,如果廣播者接受連接請(qǐng)求滚停,則廣播者和連接發(fā)起者將進(jìn)入連接狀態(tài)沃粗。當(dāng)一個(gè)設(shè)備處于連接時(shí),它將是以下兩個(gè)角色中的一個(gè):
主機(jī)(master)或從機(jī)(slave)键畴。發(fā)起連接的設(shè)備變成了主機(jī)(master)最盅,接受連接請(qǐng)求的廣播者設(shè)備變成了從機(jī)(slave)。且同一次連接中主機(jī)和從機(jī)角色不能切換。
1.1.3 主機(jī)控制接口(HCI)
主機(jī)控制接口層 向上為主機(jī)提供軟件應(yīng)用程序接口(API)涡贱,對(duì)外為外部硬件控制接口咏删。該層可以通過(guò)一個(gè)可編程接口來(lái)實(shí)現(xiàn),該可編程接口可以是 UART问词,SPI 或 USB督函。標(biāo)準(zhǔn)的 HCI 命令和事件在《Bluetooth Core Spec [14]》中描述。TI 有該應(yīng)用的使用指南《 Vendor Specific Guide [1]》戏售。
1.2 主機(jī)部分(Host)
1.2.1 鏈路邏輯控制和適配協(xié)議(L2CAP)
鏈路邏輯控制和適配協(xié)議層 提供數(shù)據(jù)封裝服務(wù)侨核,該層允許的端到端的數(shù)據(jù)通信」嘣郑基于包的協(xié)議搓译,將包傳輸?shù)紿CI,對(duì)于無(wú)主機(jī)系統(tǒng)锋喜,就將包傳給鏈路管理器LM些己。支持多路復(fù)用,包的分割和重組嘿般,以及向上層協(xié)議提交服務(wù)質(zhì)量信息段标。
1.2.2 安全管理(SM)
安全管理層 定義了配對(duì)和密鑰分配的方法,并提供了為了安全地連接與交換數(shù)據(jù)的功能炉奴。
See section 5.4 for more information on Texas Instruments’ implementation of the SM layer.
1.2.3 屬性協(xié)議(ATT)
屬性協(xié)議層 負(fù)責(zé)數(shù)據(jù)檢索逼庞,允許一個(gè)設(shè)備暴露一些數(shù)據(jù)塊給其他設(shè)備,其他設(shè)備稱(chēng)之為“屬性”瞻赶。
在ATT環(huán)境中赛糟,展示屬性的設(shè)備稱(chēng)之為服務(wù)器,與它配對(duì)的設(shè)備稱(chēng)之為客戶(hù)端砸逊。鏈路層的主機(jī)從機(jī)和這里的服務(wù)器璧南、客服端是兩種概念,主設(shè)備既可以是服務(wù)器师逸,也可以是客戶(hù)端司倚。從設(shè)備毅然。
1.2.4 通用訪問(wèn)協(xié)議(GAP)
通用訪問(wèn)協(xié)議層 是應(yīng)用程配置文件的接口篓像,用于 處理設(shè)備的發(fā)現(xiàn)和連接 相關(guān)的服務(wù)动知。GAP 還有處理安全連接等特征。GAP給設(shè)備定義了若干角色员辩,其中主要的兩個(gè)是:外圍設(shè)備(Peripheral)和中心設(shè)備(Central)拍柒。
See section 5.1 for more information on Texas Instruments’implementation of the GAP layer.
1.2.4 通用屬性協(xié)議(GATT)
通用屬性協(xié)議層 使用 ATT 的服務(wù)框架和配置文件(profiles)的結(jié)構(gòu)。BLE 中所有的數(shù)據(jù)通信都需要經(jīng)過(guò)GATT屈暗。
它定義兩個(gè) BLE 設(shè)備通過(guò)叫做 Service 和 Characteristic 的東西進(jìn)行通信。GATT 就是使用了 ATT 協(xié)議,ATT 協(xié)議把 Service, Characteristic遺跡對(duì)應(yīng)的數(shù)據(jù)保存在一個(gè)查找表中养叛,次查找表使用 16 bit ID 作為每一項(xiàng)的索引种呐。
See section 5.3 for more information on Texas Instruments’ implementation of the ATT and GATT layers.
二、GAP協(xié)議
GAP(Generic Access Profile)的縮寫(xiě)弃甥,中文是通用訪問(wèn)協(xié)議爽室,它在用來(lái)控制設(shè)備連接和廣播;
GAP 使你的設(shè)備被其他設(shè)備可見(jiàn)淆攻,并決定了你的設(shè)備是否可以或者怎樣與合同設(shè)備進(jìn)行交互阔墩;
例如:Beacon 設(shè)備就只是向外廣播,不支持連接瓶珊,小米手環(huán)就等設(shè)備就可以與中心設(shè)備連接啸箫。
2.1 GAP廣播數(shù)據(jù)
在 GAP 中外圍設(shè)備通過(guò)兩種方式向外廣播數(shù)據(jù):
Advertising Data Payload(廣播數(shù)據(jù))和 Scan Response Data Payload(掃描回復(fù));
每種數(shù)據(jù)最長(zhǎng)可以包含 31 byte伞芹。這里廣播數(shù)據(jù)是必需的忘苛,因?yàn)橥庠O(shè)必需不停的向外廣播,讓中心設(shè)備知道它的存在唱较;
掃描回復(fù)是可選的扎唾,中心設(shè)備可以向外設(shè)請(qǐng)求掃描回復(fù),這里包含一些設(shè)備額外的信息南缓,例如:設(shè)備的名字胸遇。
2.2 GAP廣播的網(wǎng)絡(luò)拓?fù)?/h2>
大部分情況下外圍設(shè)備通過(guò)廣播自己來(lái)讓中心設(shè)備發(fā)現(xiàn)自己,并建立 GATT 連接汉形,從而進(jìn)行更多的數(shù)據(jù)交換纸镊;
也有些情況是不需要連接的,只要外設(shè)廣播自己的數(shù)據(jù)即可获雕,用這種方式主要目的是讓外圍設(shè)備薄腻,把自己的信息發(fā)送給多個(gè)中心設(shè)備;
因?yàn)榛?GATT 連接的方式的届案,只能是一個(gè)外設(shè)連接一個(gè)中心設(shè)備庵楷,使用廣播這種方式最典型的應(yīng)用就是蘋(píng)果的 iBeacon。
2.3 GAP通信中角色
GAP 給設(shè)備定義了若干角色楣颠,其中主要的兩個(gè)是:外圍設(shè)備(Peripheral - 從機(jī) - 服務(wù)端)和 中心設(shè)備(Central - 主機(jī) - 客戶(hù)端)尽纽。
外圍設(shè)備 - 從機(jī):
這一般就是非常小或者簡(jiǎn)單的低功耗設(shè)備,用來(lái)提供數(shù)據(jù)童漩,并連接到一個(gè)更加相對(duì)強(qiáng)大的中心設(shè)備弄贿,例如小米手環(huán);
中心設(shè)備 - 主機(jī):
中心設(shè)備相對(duì)比較強(qiáng)大矫膨,用來(lái)連接其他外圍設(shè)備差凹。例如手機(jī)等期奔;
三、GATT協(xié)議
GATT(Generic Attributes Profile)的縮寫(xiě)危尿,中文是通用屬性協(xié)議呐萌,是已連接的低功耗藍(lán)牙設(shè)備之間進(jìn)行通信的協(xié)議。
一旦兩個(gè)設(shè)備建立起了連接谊娇,GATT 就開(kāi)始起作用了肺孤,這也意味著,你必需完成前面的GAP協(xié)議济欢。
GATT使用了 ATT(Attribute Protocol)協(xié)議赠堵,ATT 協(xié)議把 Service,Characteristic 對(duì)應(yīng)的數(shù)據(jù)保存在一個(gè)查找表中法褥,查找表使用 16bit ID 作為每一項(xiàng)的索引茫叭。
GATT定義的多層數(shù)據(jù)結(jié)構(gòu)簡(jiǎn)要概括起來(lái)就是 服務(wù)(Service) 可以包含多個(gè) 特征(Characteristic),每個(gè)特征包含 屬性(Properties) 和 值(Value)挖胃,還可以包含多個(gè) 描述(Descriptor)杂靶。
3.1 GATT結(jié)構(gòu)
3.1.1 Profile(規(guī)范)
profile 可以理解為一種規(guī)范,一個(gè)標(biāo)準(zhǔn)的通信協(xié)議酱鸭,它存在于藍(lán)牙從機(jī)中(服務(wù)端)吗垮;
藍(lán)牙組織規(guī)定了一些標(biāo)準(zhǔn)的 profile,例如 HID OVER GATT凹髓,防丟器烁登,心率計(jì)等;
每個(gè) profile 中會(huì)包含多個(gè) service蔚舀,每個(gè) service 代表從機(jī)的一種能力饵沧。
3.1.2 Service(服務(wù))
service 可以理解為一個(gè)服務(wù),在 BLE 從機(jī)中有多個(gè)服務(wù)赌躺,例如:電量信息服務(wù)狼牺、系統(tǒng)信息服務(wù)等;
每個(gè) service 中又包含多個(gè) characteristic 特征值礼患;
每個(gè)具體的 characteristic 特征值才是 BLE 通信的主題是钥,比如當(dāng)前的電量是 80%,電量的 characteristic 特征值存在從機(jī)的 profile 里缅叠,這樣主機(jī)就可以通過(guò)這個(gè) characteristic 來(lái)讀取 80% 這個(gè)數(shù)據(jù)悄泥。
3.1.3 Characteristic(特征)
characteristic 特征,BLE 主從機(jī)的通信均是通過(guò) characteristic 來(lái)實(shí)現(xiàn)肤粱,可以理解為一個(gè)標(biāo)簽弹囚,通過(guò)這個(gè)標(biāo)簽可以獲取或者寫(xiě)入想要的內(nèi)容。
3.1.4 UUID(通用唯一識(shí)別碼)
uuid 通用唯一識(shí)別碼领曼,我們剛才提到的 service 和 characteristic 都需要一個(gè)唯一的 uuid 來(lái)標(biāo)識(shí)鸥鹉;
每個(gè)從機(jī)都會(huì)有一個(gè) profile蛮穿,不管是自定義的 simpleprofile,還是標(biāo)準(zhǔn)的防丟器 profile宋舷,他們都是由一些 service 組成绪撵,每個(gè) service 又包含了多個(gè) characteristic,主機(jī)和從機(jī)之間的通信祝蝠,均是通過(guò)characteristic來(lái)實(shí)現(xiàn)。
3.2 GATT連接的網(wǎng)絡(luò)拓?fù)?/h2>
一個(gè)外圍設(shè)備(從機(jī))只能連接一個(gè)中心設(shè)備(主機(jī))幻碱,而一個(gè)中心設(shè)備(主機(jī))可以連接多個(gè)外圍設(shè)備(從機(jī))绎狭,一旦建立起了連接,通信就是雙向的了褥傍,對(duì)比前面的 GAP 廣播的網(wǎng)絡(luò)拓?fù)淅芩唬珿AP 通信是單向的,如果你要讓兩個(gè)設(shè)備外圍設(shè)備(從機(jī))之間能夠通信恍风,就只能通過(guò)中心設(shè)備(主機(jī))中轉(zhuǎn)蹦狂。
3.3 GATT通信中角色
從GATT的角度來(lái)看,處于連接狀態(tài)時(shí)的兩個(gè)設(shè)備朋贬,它們各自充當(dāng)兩種角色中的一種:
服務(wù)端(Server)
包含被GATT客戶(hù)端讀取或?qū)懭氲奶卣鲾?shù)據(jù)的設(shè)備凯楔。
客戶(hù)端(Client)
從GATT服務(wù)器中讀取數(shù)據(jù)或向GATT服務(wù)器寫(xiě)入數(shù)據(jù)的設(shè)備。
外圍設(shè)備(從機(jī))作為 GATT 服務(wù)端(Server)锦募,它維持了 ATT 的查找表以及 service 和 characteristic 的定義摆屯;
客戶(hù)端和服務(wù)器的GATT角色獨(dú)立于外圍設(shè)備和中央設(shè)備的GAP角色。外圍設(shè)備可以是GATT客戶(hù)端或GATT服務(wù)器糠亩,中心可以是GATT客戶(hù)端或GATT服務(wù)器虐骑;
一旦連接建立,外設(shè)將會(huì)給中心設(shè)備建議一個(gè)連接間隔(Connection Interval)赎线,這樣中心設(shè)備就會(huì)在每個(gè)連接間隔嘗試去重新連接廷没,檢查是否有新的數(shù)據(jù);
但是垂寥,這個(gè)連接間隔只是一個(gè)建議颠黎,你的中心設(shè)備可能并不會(huì)嚴(yán)格按照這個(gè)間隔來(lái)執(zhí)行,例如你的中心設(shè)備正在忙于連接其他的外設(shè)矫废,或者中心設(shè)備資源太忙盏缤。
四、TI BLE頂層軟件體系架構(gòu)
在頂層蓖扑,CC2640 軟件環(huán)境包括三個(gè)部分:實(shí)時(shí)操作系統(tǒng)(RTOS)唉铜,應(yīng)用和協(xié)議棧。
TI-RTOS 是一個(gè)實(shí)時(shí)的操作系統(tǒng)律杠,具備多線(xiàn)程操作和任務(wù)同步等功能潭流。
APP 應(yīng)用和 BLE 協(xié)議棧作為單獨(dú)的任務(wù)存在于 RTOS 中竞惋,BLE 協(xié)議棧具有最高優(yōu)先級(jí)。間接訪問(wèn)(ICall)的消息框架被用于線(xiàn)程的同步和棧的通信:
協(xié)議棧:這包括低層的 BLE 協(xié)議棧鏈路層(LL)到 GAP 與 GAPP 的通信灰嫉,如圖1所示拆宛。大多數(shù)的 BLE 協(xié)議棧代碼作為庫(kù)提供。
應(yīng)用:這包括相關(guān)的配置文件讼撒,應(yīng)用程序浑厚,驅(qū)動(dòng)程序,和 ICall 模塊根盒。
4.1 標(biāo)準(zhǔn)項(xiàng)目任務(wù)層次
所有的項(xiàng)目都會(huì)包含至少三個(gè)實(shí)時(shí)操作系統(tǒng)的任務(wù) Task钳幅。例如 simplebleperipheral 項(xiàng)目,這些任務(wù)是以及他們的任務(wù)優(yōu)先級(jí)為:
5: BLE 協(xié)議棧的任務(wù)
3:GapRole 任務(wù)(從機(jī)角色)
1:應(yīng)用任務(wù)(simplebleperipheral)
4.2 ICall
ICall(Indirect Call Framework)的調(diào)用可以實(shí)現(xiàn)應(yīng)用程序的與 BLE 協(xié)議棧的通信(例如炎滞,線(xiàn)程同步)敢艰。
ICall 模塊的源代碼被包含在 IDE 的 應(yīng)用工程的 “ICall” 與 “ICallBLE” 文件夾內(nèi)。 IAR 如下(CCS 類(lèi)似):
4.2.1 ICall BLE 協(xié)議棧的服務(wù)
如圖6的所示册赛,ICall 可以監(jiān)聽(tīng)協(xié)議棧(服務(wù)端)與應(yīng)用程序(客戶(hù)端)間的消息钠导,注意不要把 ICall 的框架結(jié)構(gòu) 與 BLE 中的 GATT 的 S/C 結(jié)構(gòu)混淆,這樣做的原因是為了方便應(yīng)用軟件與 RTOS 操作系統(tǒng)的升級(jí)森瘪,而不會(huì)互相耦合影響牡属, 并且更方便把 CC254x 的代碼已知道 CC2640 系列芯片上來(lái)。
本質(zhì)上柜砾,當(dāng)應(yīng)用程序調(diào)用 BLE 協(xié)議棧的 API 函數(shù)時(shí)湃望,由 ICall 發(fā)指令給 BLE 協(xié)議棧,反過(guò)來(lái)痰驱,協(xié)議棧發(fā)出來(lái)的消息也是 ICall 來(lái)傳遞的证芭。
因?yàn)?ICall 模塊是應(yīng)用程序項(xiàng)目的一部分,應(yīng)用程序可以直接訪問(wèn) ICall 的函數(shù)担映。請(qǐng)注意废士,由于 BLE 協(xié)議棧具有最高優(yōu)先級(jí),因此應(yīng)用程序任務(wù)將阻塞直到收到響應(yīng)蝇完。應(yīng)用程序阻塞期間官硝,BLE 協(xié)議棧也可以異步地通過(guò) ICall 通知應(yīng)用程序某個(gè)消息(例如,事件更新)短蜕。
? 由 Leung 寫(xiě)于 2018 年 12 月 18 日
? 參考:cc2640藍(lán)牙軟件開(kāi)發(fā)指南(阿莫翻譯中文版-11.25)[提取碼vyyy]
通用屬性配置文件(GATT) - BLE-Stack用戶(hù)指南[提取碼is4a]
GATT協(xié)議及藍(lán)牙核心系統(tǒng)結(jié)構(gòu)
【IoT】藍(lán)牙 GAP 和 GATT 協(xié)議簡(jiǎn)析