BLE介绍
本章將介紹BLE協(xié)議不同的層,包括各個層的部件和它們的概念。?
2.1 ?通用訪問規(guī)范(Generic Access Profile,GAP)
GAP是應(yīng)用層能夠直接訪問BLE協(xié)議棧的最底層,它包括管理廣播和連接事件的有關(guān)參數(shù)。
注意:GAP的更多詳細介紹見《Bluetooth Core Specification》(藍牙核心規(guī)范)的第3卷C部分。
2.1.1 角色
為了創(chuàng)建和維持一個BLE連接,引入了“角色”這一概念。一個BLE設(shè)備不是集中器角色就是外圍設(shè)備角色,這是根據(jù)是誰發(fā)起這個連接來確定的。集中器設(shè)備總是連接的發(fā)起者,而外圍設(shè)備總是被連接者。集中器和外圍設(shè)備的關(guān)系就像鏈路層中的主機和從機的概念。
在LED Button應(yīng)用例程中,使用S110 SoftDevice燒錄到nRF51822作為外圍設(shè)備,計算機或者手機作為集中器。
除了集中器角色和外圍設(shè)備角色,藍牙核心規(guī)范還定義了觀察者角色和廣播者角色,觀察者角色監(jiān)聽空中的事件,廣播者角色只是廣播信息而不接收信息。觀察者角色和廣播者角色都只廣播而并不建立連接。它們在我們的這個應(yīng)用中并不適用。
注意:在一個連接的另一端的設(shè)備被稱為對等設(shè)備,不管它是集中器還是外圍設(shè)備。
2.1.2 廣播
????????集中器能夠與外圍設(shè)備建立連接,外圍設(shè)備必須處于廣播狀態(tài),它每經(jīng)過一個時間間隔發(fā)送一次廣播數(shù)據(jù)包,這個時間間隔稱為廣播間隔,它的范圍是20ms到10.24s。廣播間隔影響建立連接的時間。
????????集中器發(fā)送一個連接請求來發(fā)起連接之前,必須接收到一個廣播數(shù)據(jù)包,外圍設(shè)備發(fā)送一個廣播數(shù)據(jù)包之后一小段時間內(nèi)只監(jiān)聽連接請求。
一個廣播數(shù)據(jù)包最多能攜帶31字節(jié)的數(shù)據(jù),它通常包含用戶可讀的名字、關(guān)于設(shè)備發(fā)送數(shù)據(jù)包的有關(guān)信息、用于表示此設(shè)備是否可被發(fā)現(xiàn)的標(biāo)志等類似的標(biāo)志。
當(dāng)集中器接收到廣播數(shù)據(jù)包后,它可能發(fā)送請求更多數(shù)據(jù)包的請求,稱為掃描請求,如果它被設(shè)置成主動掃描,外圍設(shè)備將會發(fā)送一個掃描回應(yīng)做為對集中器請求的回應(yīng),掃描回應(yīng)最多可以攜帶31字節(jié)的數(shù)據(jù)。
廣播,包括掃描請求和掃描回應(yīng),出現(xiàn)在遠離WLAN使用的2.4G頻段之外的3個頻率上,以防止被WiFi干擾。
2.1.3 掃描
??掃描是集中器監(jiān)聽廣播數(shù)據(jù)包和發(fā)送掃描請求的過程,它有2個定時參數(shù)需要特別注意:掃描窗口和掃描間隔。
對于每一個掃描間隔,集中器掃描的時間等于一個掃描窗口,這就意味著如果掃描窗口等于掃描間隔,那么集中器將處于連續(xù)掃描之中。掃描窗口和掃描間隔之比為掃描占空比。
2.1.4 發(fā)起
如果集中器想建立一個連接,當(dāng)掃描監(jiān)聽到廣播數(shù)據(jù)包后它將采用相同的過程:當(dāng)要發(fā)起連接時,集中器接收到一個廣播數(shù)據(jù)包之后將會發(fā)送一個連接請求。
2.1.5 連接
集中器和外圍設(shè)備第一次交換數(shù)據(jù)定義為連接狀態(tài)。在一個連接狀態(tài)中,集中器將會在一個特定定義的間隔從外圍設(shè)備請求數(shù)據(jù),這個間隔稱為連接間隔,它由集中器決定并應(yīng)用于連接,但是外圍設(shè)備可以發(fā)送連接參數(shù)更新請求給集中器。根據(jù)藍牙核心規(guī)范,連接間隔必須在7.5ms到4s之間。
???如果外圍設(shè)備在一個時間幀內(nèi)沒有回應(yīng)集中器的數(shù)據(jù)包,稱為連接監(jiān)管超時,連接被認為丟失。
???可以通過在每一個連接間隔中傳輸多個數(shù)據(jù)包以獲得更高的數(shù)據(jù)吞吐量,每一個傳輸數(shù)據(jù)包最多可以攜帶20個字節(jié)的應(yīng)用數(shù)據(jù)。但是如果電流消耗是重點,同時外圍設(shè)備也沒有數(shù)據(jù)要發(fā)送,它可以選擇忽略一定數(shù)量的連接間隔,這個忽略連接間隔的數(shù)目稱為從機延時(slave latency)。
???在一個連接中,除了廣播信道,設(shè)備間在頻帶的所有信道中進行通信。當(dāng)然對于應(yīng)用層,這是完全透明的。
2.2 通用屬性配置文件(Generic Attribute profile,GATT)
GATT層是傳輸真正數(shù)據(jù)所在的層。
2.2?
2.2.1角色
除了GAP定義了角色之外,BLE還定義了另外2種角色:GATT服務(wù)器和GATT客戶端,它們完全獨立于GAP的角色。提供數(shù)據(jù)的設(shè)備稱為GATT服務(wù)器,訪問GATT服務(wù)器而獲得數(shù)據(jù)的設(shè)備稱為GATT客戶端。
以LED Button應(yīng)用為例,外圍設(shè)備(帶有LED和按鍵)作為服務(wù)器,集中器作為客戶端。
注意:一個設(shè)備可以同時作為服務(wù)器和客戶端。
2.2.2 GATT層
一個GATT服務(wù)器通過一個稱為屬性表的表格組織數(shù)據(jù),這些數(shù)據(jù)就是用于真正發(fā)送的數(shù)據(jù)。
?
2.2.2.1 屬性
一個屬性包含句柄、UUID、值,句柄是屬性在GATT表中的索引,在一個設(shè)備中每一個屬性的句柄都是唯一的。UUID包含屬性表中數(shù)據(jù)類型的信息,它是理解屬性表中的值的每一個字節(jié)的意義的關(guān)鍵信息。在一個GATT表中可能有許多屬性,這些屬性能可能有相同的UUID。
2.2.2.2 特性
一個特性至少包含2個屬性:一個屬性用于聲明,一個屬性用于存放特性的值。
所有通過GATT服務(wù)傳輸?shù)臄?shù)據(jù)必須映射成一系列的特性,可以把特性中的這些數(shù)據(jù)看成是一個個捆綁起來的數(shù)據(jù),每個特性就是一個自我包容而獨立的數(shù)據(jù)點。例如,如果幾塊數(shù)據(jù)總是一起變化,那么我們可以把它們集中在一個特性里。
以LED Button應(yīng)用為例,外圍設(shè)備(帶有LED和按鍵)作為服務(wù)器,集中器作為客戶端。
在LED Button服務(wù)中,LED和按鍵之間沒有任何聯(lián)系,而且它們可以各自獨立地改變, 因此,可以讓它們成為獨立的特性,所以我們用一個特性表示當(dāng)前按鍵的狀態(tài),用另一個特性用來表示當(dāng)前LED的狀態(tài)。
2.2.2.3描述符
任何在特性中的屬性不是定義為屬性值就是為描述符。描述符是一個額外的屬性以提供更多特性的信息,它提供一個人類可識別的特性描述的實例。
???????然而,有一個特別的描述符值得特別地提起:客戶端特性配置描述符(Client Characteristic Configuration Descriptor,CCCD),這個描述符是給任何支持通知或指示功能的特性額外增加的,參見第15頁第2.2.5節(jié)“空中操作和性質(zhì)”。
???????在CCCD中寫入“1”使能通知功能,寫入“2”使能指示功能,寫入“0”同時禁止通知和指示功能。
???????在S110 SoftDevice協(xié)議棧中,對任何使能了通知功能或是指示功能的特性,協(xié)議棧將自動加入這個類型的描述符。
2.2.2.4服務(wù)
一個服務(wù)包含一個或多個特性,這些特性是邏輯上相關(guān)的集合體。
GATT服務(wù)一般包含幾塊具有相關(guān)的功能,比如特定傳感器的讀取和設(shè)置,人機接口的輸入輸出。組織具有相關(guān)的特性到服務(wù)中既實用又有效,因為它使得邏輯上和用戶數(shù)據(jù)上的邊界變得更加清晰,同時它也有助于不同應(yīng)用程序間代碼的重用。GATT基于藍牙技術(shù)聯(lián)盟(SIG)官方而設(shè)計,SIG建議根據(jù)它們的規(guī)范設(shè)計自己的profile。
對于LED Button應(yīng)用例程,因為不關(guān)心它們的重用,所以把LED特性和按鍵特性放到了一個服務(wù)中。
2.2.2.5 profile(數(shù)據(jù)配置文件)
一個profile文件可以包含一個或者多個服務(wù),一個profile文件包含需要的服務(wù)的信息或者為對等設(shè)備如何交互的配置文件的選項信息。設(shè)備的GAP和GATT的角色都可能在數(shù)據(jù)的交換過程中改變,因此,這個文件應(yīng)該包含廣播的種類、所使用的連接間隔、所需的安全等級等信息。
???????需要注意的是一個profile中的屬性表不能包含另一個屬性表。
在LED BUTTON示例中的profile不是一個標(biāo)準(zhǔn)描述的profile。
2.2.3 標(biāo)準(zhǔn)的定制服務(wù)和特性
藍牙技術(shù)聯(lián)盟(SIG)已經(jīng)定義一些profile、服務(wù)、特性和根據(jù)協(xié)議棧的GATT層定義的屬性。但是,協(xié)議棧中只實現(xiàn)了一部分應(yīng)用的BLE服務(wù),那就意味著,只要協(xié)議棧支持GATT,就可能為一個應(yīng)用建立一個它需要的profile和服務(wù)。
???????既然在一個應(yīng)用中可以支持profile和服務(wù),那么就可以在這個應(yīng)用中建立一個定制的服務(wù)。
對于LED BUTTON這個示例來說,藍牙技術(shù)聯(lián)盟沒有包含這個應(yīng)用,因此它建立了一個定制的服務(wù),包括2個定制的特性。
2.2.4????UUID
在第10頁2.2.2節(jié)“GATT層”中定義的所有屬性都有一個UUID值,UUID是全球唯一的128位的號碼,它用來識別不同的特性。
2.2.4.1 藍牙技術(shù)聯(lián)盟 UUID
藍牙核心規(guī)范制定了兩種不同的UUID,一種是基本的UUID,一種是代替基本UUID的16位UUID。
所有的藍牙技術(shù)聯(lián)盟定義UUID共用了一個基本的UUID:
0x0000xxxx-0000-1000-8000-00805F9B34FB
為了進一步簡化基本UUID,每一個藍牙技術(shù)聯(lián)盟定義的屬性有一個唯一的16位UUID,以代替上面的基本UUID的‘x’部分。例如,心率測量特性使用0X2A37作為它的16位UUID,因此它完整的128位UUID為:
0x00002A37-0000-1000-8000-00805F9B34FB
雖然藍牙技術(shù)聯(lián)盟使用相同的基本UUID,但是16位的UUID足夠唯一地識別藍牙技術(shù)聯(lián)盟所定義的各種屬性。
藍牙技術(shù)聯(lián)盟所用的基本UUID不能用于任何定制的屬性、服務(wù)和特性。對于定制的屬性,必須使用另外完整的128位UUID。
2.2.4.2 供應(yīng)商特定的UUID
SoftDevice 根據(jù)藍牙技術(shù)聯(lián)盟定義UUID類似的方式定義UUID:先增加一個特定的基本UUID,再定義一個16位的UUID(類似于一個別名),再加載在基本UUID之上。這種采用為所有的定制屬性定義一個共用的基本UUID的方式使得應(yīng)用變?yōu)楦雍唵?#xff0c;至少在同一服務(wù)中更是如此。
使用軟件nRFgo Studio非常容易產(chǎn)生一個新的基本UUID,見第29頁第4.4.3節(jié)“服務(wù)初始化”。
例如,在LED BUTTON示例中,采用0x0000xxxx-1212-EFDE-1523-785FEABCD123作為基本UUID。
藍牙核心規(guī)范沒有任何規(guī)則或是建議如何對加入基本UUID的16位UUID進行分配,因此你可以按照你的意圖來任意分配。
例如,在LED BUTTON示例中,0x1523作為服務(wù)的UUID,0x1524作為LED特性的UUID,0x1525作為按鍵狀態(tài)特性的UUID。
?2.2.5 空中操作和性質(zhì)
大部分的空中操作事件都是采用句柄來進行的,因為句柄能夠唯一識別各個屬性。如何使用特性依據(jù)它的性質(zhì),特性的性質(zhì)包括:
l??寫
l??沒有回應(yīng)的寫
l??讀
l??通知
l??指示
更多的性質(zhì)在藍牙規(guī)范中有明確的定義,但以上性質(zhì)更為常用。
2.2.5?
2.2.5.1 ?寫和沒有回應(yīng)的寫
寫和沒有回應(yīng)的寫允許GATT客戶端寫入一個值到GATT服務(wù)器的一個特性中。它們之間不同的地方在于沒有回應(yīng)的寫事件沒有任何應(yīng)用層上的確認或回應(yīng)。
2.2.5.2??讀
讀性質(zhì)表明一個GATT客戶端可以讀取在GATT服務(wù)器中特性的值。
2.2.5.3??通知和指示
通知和指示性質(zhì)允許GATT服務(wù)器在其某個特性改變的時候?qū)ATT客戶端進行提醒,通知和指示之間不同之處在于指示有應(yīng)用層上的確認,而通知沒有。
---------------------?
作者:fanqh6?
來源:CSDN?
原文:https://blog.csdn.net/ge23456789/article/details/49329977?
版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請附上博文鏈接!
總結(jié)
- 上一篇: STM32的8种GPIO输入输出模式深入
- 下一篇: arm交叉编译器gnueabi、none