找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2739|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

低功耗藍(lán)牙之GAP、GATT

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:409908 發(fā)表于 2018-10-15 17:40 | 只看該作者 回帖獎(jiǎng)勵(lì) |正序?yàn)g覽 |閱讀模式
   本篇主要介紹一下關(guān)于BLE開發(fā)過程中必須了解的兩個(gè)協(xié)議:GAP(通用訪問協(xié)議)、GATT(通用屬性協(xié)議)。兩個(gè)協(xié)議都隸屬于Host層,直接關(guān)系到應(yīng)用層開發(fā),與BLE開發(fā)人員的關(guān)系比較密切,其分別負(fù)責(zé)連接前數(shù)據(jù)廣播和連接后的數(shù)據(jù)傳輸。

二、平臺(tái)

Software Version:BLE_STACK_CC26XX_2.1.0

Hardware Version:CC2640/CC2650

IDE:IAR 7.40

三、GAP

    1、藍(lán)牙低能耗技術(shù)“完成”一次連接(即掃描其它設(shè)備、建立鏈路、發(fā)送數(shù)據(jù)、認(rèn)證和適當(dāng)?shù)亟Y(jié)束)只需3ms。而標(biāo)準(zhǔn)藍(lán)牙技術(shù)完成相同的連接周期需要數(shù)百毫秒。

    GAP層有4種不同類型的廣播:通用的、定向的、不可連接的以及可發(fā)現(xiàn)的。

    設(shè)備每次廣播時(shí),會(huì)在3個(gè)廣播信道上發(fā)送相同的報(bào)文。這些報(bào)文被稱為一個(gè)廣播事件。除了定向報(bào)文以外,其他廣播事件均可以選擇20ms - 10.28s不等的間隔。通常,一個(gè)廣播中的設(shè)備會(huì)每一秒廣播一次。廣播事件之間的時(shí)間稱為廣播間隔。主機(jī)可以控制該間隔。但是,設(shè)備周期性的發(fā)送廣播會(huì)有一個(gè)問題:由于設(shè)備間的時(shí)鐘會(huì)不同程度的漂移,兩個(gè)設(shè)備可能在很長(zhǎng)一段時(shí)間同時(shí)廣播而造成千擾。為防止選一情況的發(fā)生,在上一次廣播事件發(fā)生后加入隨機(jī)延時(shí)。它們發(fā)送下一個(gè)廣播事件時(shí)也很可能不再?zèng)_突。

    通用廣播:通用廣播是用途最廣的廣播方式。進(jìn)行通用廣播的設(shè)備能夠被掃描設(shè)備掃描到,或者在接收到連接請(qǐng)求時(shí)作為從設(shè)備進(jìn)入一個(gè)連接。通用廣播可以在沒有連接的情況下發(fā)出,換句話說,沒有主從設(shè)備之分。

    定向廣播:有時(shí)候,設(shè)備間需要快速建立連接。如果從設(shè)備想這么做,就需要進(jìn)行廣播。定向廣播事件就是為了盡可能快的建立連接。這種報(bào)文包含兩個(gè)地址:廣播者的地址和發(fā)起者的地址。發(fā)起設(shè)備收到發(fā)紿自己的定向廣播報(bào)文后,可以立即發(fā)送連接請(qǐng)求作為回應(yīng)。

    不可連接廣播:不想被連接的設(shè)備使用不可連接廣播事件。這種廣播的典型應(yīng)用包括設(shè)備只想廣播數(shù)據(jù),而不想被掃描或者連接。速也是唯一可用于只有發(fā)射機(jī)而沒有接收機(jī)設(shè)備的廣播類型。不可連接廣播設(shè)備不會(huì)進(jìn)入連接態(tài),因此,它只能根據(jù)主機(jī)的要求在廣播態(tài)和就緒態(tài)之間切換。

    可發(fā)現(xiàn)廣播:最后一種廣播事件是可發(fā)現(xiàn)廣播。這種廣播不能用于發(fā)起連接,但允許其他設(shè)備掃描該廣播設(shè)備。這意味著該設(shè)備可以被發(fā)現(xiàn),既可以廣播數(shù)據(jù),又可以響應(yīng)掃描,但不能建立連接。這是一種適用于廣播數(shù)據(jù)的廣播形式,動(dòng)態(tài)數(shù)據(jù)可以包含于廣播數(shù)據(jù)之中,而靜態(tài)數(shù)據(jù)可以包含于掃描響應(yīng)數(shù)據(jù)之中?砂l(fā)現(xiàn)廣播不會(huì)進(jìn)入連接態(tài),而只能在停止后回到就緒態(tài)。

    如上面所述,BLE設(shè)備可以進(jìn)行廣播。但是,一個(gè)廣播設(shè)備必須在廣播中包含一些有用的數(shù)據(jù)。這意味著可以通過4種廣播事件中的3種進(jìn)行廣播:通用廣播、不可連接廣播以及可發(fā)現(xiàn)廣播。進(jìn)行廣播時(shí),需要在廣播報(bào)文中給數(shù)據(jù)打上標(biāo)簽。之所以要這么做,是因?yàn)椴⒎撬性O(shè)備都能理解所有可能的廣播數(shù)據(jù)。因此,需要給廣播數(shù)據(jù)打上標(biāo)簽并指出其長(zhǎng)度。每個(gè)數(shù)據(jù)片段均起始于一個(gè)長(zhǎng)度域,用以指示后面的類型及數(shù)據(jù)域的長(zhǎng)度;接下來是類型域,接收機(jī)可根據(jù)其內(nèi)容判斷自己是否能夠理解后面的數(shù)據(jù)。


四、GATT

    通用屬性配置文件(GATT)在屬性協(xié)議(ATT)的基礎(chǔ)上構(gòu)建,為屬性協(xié)議傳輸和存儲(chǔ)數(shù)據(jù)建立了一些通用操作和框架。

1)GATT定義了兩個(gè)角色:服務(wù)器和客戶端。

    GATT的角色并不一定與特定的GAP角色有關(guān)聯(lián),但可能由更高層級(jí)的配置文件指定。GATT和ATT不是傳輸專用,也可以用于BR/EDR和低耗能。但是,由于GATT和ATT用作發(fā)現(xiàn)服務(wù),故必須在低耗能技術(shù)中實(shí)施。GATT服務(wù)器存儲(chǔ)通過屬性協(xié)議傳輸?shù)臄?shù)據(jù),并接受GATT客戶端發(fā)出的屬性協(xié)議請(qǐng)求、指令及確認(rèn)。GATT服務(wù)器發(fā)送請(qǐng)求回復(fù),而如果在配置時(shí)GATT服務(wù)器發(fā)生特定事件,則會(huì)向GATT客戶端異步發(fā)送指示和通知。GATT還指定GATT服務(wù)器中所載的數(shù)據(jù)格式。

    屬性在當(dāng)經(jīng)由屬性協(xié)議傳輸時(shí),會(huì)被格式化為相關(guān)的服務(wù)和特性。服務(wù)可能包括許多特征。特征包括單一值和許多描述特征值的描述符。

憑借經(jīng)定義的服務(wù)、特征和特征描述符架構(gòu),并非配置文件特定的GATT客戶端仍然可以遍歷GATT服務(wù)器,并向用戶顯示特征值。特征描述符可用于顯示特征值的描述符,從而可讓用戶了解該值。

2)GATT配置文件層級(jí)

    GATT配置文件規(guī)格規(guī)定了交換配置文件數(shù)據(jù)的架構(gòu)。此架構(gòu)定義了配置文件所用的基本元素,例如服務(wù)和特征。

該層級(jí)的最高層是配置文件(profile)。配置文件由實(shí)現(xiàn)用例所需的一個(gè)或多個(gè)服務(wù)組成。服務(wù)由特征或有關(guān)其它服務(wù)的引用組成。每一個(gè)特征包括一個(gè)值,還可能包括有關(guān)該值的可選信息。服務(wù)、特征以及特征的組件(即特征值和特征描述符)構(gòu)成了配置文件數(shù)據(jù),并全部存儲(chǔ)在服務(wù)器的屬性中。

3)服務(wù)

    服務(wù)是數(shù)據(jù)和完成設(shè)備或設(shè)備的某些部分的特定功能或特征的相關(guān)行為的集合。服務(wù)可能涉及其它主要或次要服務(wù)和/或構(gòu)成該服務(wù)的特征集合。

服務(wù)分為兩種類型:主要服務(wù)和次要服務(wù)。主要服務(wù)提供設(shè)備的主要功能。次要服務(wù)提供設(shè)備的輔助功能,引用自該設(shè)備至少一項(xiàng)主要服務(wù)。

為了令早前的客戶端保持向后兼容性,服務(wù)定義的其后修訂僅可增加新引用的服務(wù)或可選特征。服務(wù)定義的其后修訂也不得改變?cè)摲⻊?wù)定義先前修訂的特征。

服務(wù)可能用于一個(gè)或多個(gè)配置文件,以實(shí)現(xiàn)特定用例。

4)特征

    特征,連同屬性和有關(guān)如何訪問該值的配置信息以及有關(guān)如何顯示或表述該值的信息,是用于服務(wù)的值。特征定義包含特征聲明、特征屬性和值。它還可能包含描述該值或允許服務(wù)器配置有關(guān)特征值的描述符。

5)關(guān)于句柄handle 和UUID

    屬性句柄:一臺(tái)設(shè)備可以有許多的屬性,例如溫度傳感器可能包含溫度屬性、設(shè)備名稱屬性和電池電量屬性。表面看來,通過屬性類型似乎足以判別某種屬性。比如使用溫度屬性來獲取溫度,通過設(shè)備名稱屬性來獲取設(shè)備名等。但是,如果設(shè)備包含了兩種溫度屬性,比如一個(gè)室內(nèi)溫度傳感器加上室外溫度傳感器,情況會(huì)變得怎樣。這時(shí)你便無法直接讀取溫度傳感器,而必須讀取第一個(gè)或第二個(gè)溫度屬性?紤]到可能有任意多個(gè)溫度傳感器,問題將變得更加復(fù)雜。為了解決這個(gè)同題,我們使用了一個(gè)16位的地址,也就是屬性句柄。有效的句柄范圍從0x0001--xFFFF。0x0000為無效句柄,不能用于尋址屬性。可以根據(jù)在軟硬件或嵌入式方面的背景,把句柄(Handle)相應(yīng)地想象為內(nèi)存地址、端口號(hào)、屬性值對(duì)應(yīng)的硬件寄存器地址。

    屬性類型:可以被公開的數(shù)據(jù)有許許多多的類型:溫度、壓強(qiáng)、體積、距離、功率、時(shí)間、充電狀態(tài)、開關(guān)狀態(tài)、狀態(tài)機(jī)的狀態(tài)等。所公開的數(shù)據(jù)的種類稱作屬性類型。為了區(qū)分如此多的數(shù)據(jù)類型,一串128位的數(shù)字被用來標(biāo)識(shí)屬性的類型。這個(gè)唯一標(biāo)識(shí)碼就叫做通用唯一識(shí)別碼(UUID),128位的UUID相當(dāng)長(zhǎng),設(shè)備間為了識(shí)別數(shù)據(jù)的類型需要發(fā)送長(zhǎng)達(dá)16個(gè)字節(jié)的數(shù)據(jù)。為了提高傳輸效率,藍(lán)牙技術(shù)聯(lián)盟( SIG)定義了一種稱為“藍(lán)牙UUID基數(shù)”的128位通用唯一識(shí)別碼,結(jié)合一個(gè)較短的16位數(shù)使用。二者仍然遵循通用唯一識(shí)別碼的分配規(guī)則,只不過在設(shè)備間傳輸常用的UUID時(shí),只發(fā)送較短的16位版本,接收方收到后補(bǔ)上藍(lán)牙的UUID基數(shù)即可。

藍(lán)牙UUID基數(shù)如下:

00000000—0000—1000—8000—00805F9B34FB

例如要發(fā)送的16位識(shí)別碼位0X2A01,完整的128位UUID便是:

00002A01—0000—1000—8000—00805F9B34FB

0x1800 - 0x26FF用作服務(wù)類通用唯一識(shí)別碼

0x2700 - 0x27FF用于標(biāo)識(shí)計(jì)量單位

0x2800 - 0x28FF用于區(qū)分屬性類型

0x2900 - 0x29FF用作特性描述

0x2A00- 0x7FFF用于區(qū)分特性類型

UUID,就是用來唯一識(shí)別一個(gè)特征值的ID。

handle,就是對(duì)應(yīng)的attribute的一個(gè)句柄



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表