CC2640學(xué)習(xí)筆記(3)——BLE協(xié)議棧及TI軟件體系架構(gòu)

一、BLE協(xié)議棧架構(gòu)

圖1 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)用程序都是使用 GAPGATT 層協(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ò)叫做 ServiceCharacteristic 的東西進(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)

圖2 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è)備資源太忙盏缤。


圖3 GATT客戶(hù)端和服務(wù)器交互

四、TI BLE頂層軟件體系架構(gòu)

圖4 頂層軟件體系結(jié)構(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)似):


圖5 ICall 模塊源代碼

4.2.1 ICall BLE 協(xié)議棧的服務(wù)

圖6 ICall 在應(yīng)用與協(xié)議棧中的示意圖

如圖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)析

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末氢架,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子朋魔,更是在濱河造成了極大的恐慌岖研,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,427評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異孙援,居然都是意外死亡害淤,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)拓售,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)窥摄,“玉大人,你說(shuō)我怎么就攤上這事础淤≌阜牛” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,747評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵值骇,是天一觀的道長(zhǎng)莹菱。 經(jīng)常有香客問(wèn)我,道長(zhǎng)吱瘩,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,939評(píng)論 1 295
  • 正文 為了忘掉前任迹缀,我火速辦了婚禮使碾,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘祝懂。我一直安慰自己票摇,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布砚蓬。 她就那樣靜靜地躺著矢门,像睡著了一般。 火紅的嫁衣襯著肌膚如雪灰蛙。 梳的紋絲不亂的頭發(fā)上祟剔,一...
    開(kāi)封第一講書(shū)人閱讀 51,737評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音摩梧,去河邊找鬼物延。 笑死,一個(gè)胖子當(dāng)著我的面吹牛仅父,可吹牛的內(nèi)容都是我干的叛薯。 我是一名探鬼主播,決...
    沈念sama閱讀 40,448評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼笙纤,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼耗溜!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起省容,我...
    開(kāi)封第一講書(shū)人閱讀 39,352評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤抖拴,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后蓉冈,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體城舞,經(jīng)...
    沈念sama閱讀 45,834評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡轩触,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評(píng)論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了家夺。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片脱柱。...
    茶點(diǎn)故事閱讀 40,133評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖拉馋,靈堂內(nèi)的尸體忽然破棺而出榨为,到底是詐尸還是另有隱情,我是刑警寧澤煌茴,帶...
    沈念sama閱讀 35,815評(píng)論 5 346
  • 正文 年R本政府宣布随闺,位于F島的核電站,受9級(jí)特大地震影響蔓腐,放射性物質(zhì)發(fā)生泄漏矩乐。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評(píng)論 3 331
  • 文/蒙蒙 一回论、第九天 我趴在偏房一處隱蔽的房頂上張望散罕。 院中可真熱鬧,春花似錦傀蓉、人聲如沸欧漱。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,022評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)误甚。三九已至,卻和暖如春谱净,著一層夾襖步出監(jiān)牢的瞬間窑邦,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,147評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工岳遥, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留奕翔,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,398評(píng)論 3 373
  • 正文 我出身青樓浩蓉,卻偏偏與公主長(zhǎng)得像派继,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子捻艳,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評(píng)論 2 355