藍(lán)牙4.0 BLE

藍(lán)牙

藍(lán)牙的波段為2400-2483.5MHz(包括防護(hù)頻帶)。這是全球范圍內(nèi)無需取得執(zhí)照(但定不是無管制的)的工業(yè)、科學(xué)和醫(yī)療用(ISM)波段的2.4GHz短距離無線電頻段。

藍(lán)牙使用跳頻技術(shù),講傳輸?shù)臄?shù)據(jù)分割成數(shù)據(jù)包,通過79個指定的藍(lán)牙頻道分別傳輸數(shù)據(jù)包。每個頻道的頻寬為1MHz。藍(lán)牙4.0使用2 MHz間距,可容納40個頻道。第一個頻道始于 2402 MHz,每 1MHz一個頻道,至2480MHz 。有了適配跳頻(AFH)功能,通常每秒跳1600次。

通訊連接

藍(lán)牙主設(shè)備最多可與一個微微網(wǎng)(一個采用藍(lán)牙技術(shù)的臨時計算機(jī)網(wǎng)絡(luò))中的七個設(shè)備通訊,當(dāng)然并不是所有設(shè)備都能夠達(dá)到這一最大量。設(shè)備之間可通過協(xié)議轉(zhuǎn)換角色,從設(shè)備也可以轉(zhuǎn)換為主設(shè)備(比如,一個頭戴式耳機(jī)如果向手機(jī)發(fā)起連接請求,它作為連接的發(fā)送者,自然是主設(shè)備,但是隨后也許會作為從設(shè)備運行。)

藍(lán)牙核心規(guī)格提供兩個或以上的微微網(wǎng)連接以形成分布式網(wǎng)絡(luò),讓特定的設(shè)備在這些薇薇網(wǎng)中自動同時的分別扮演主和從的角色。
數(shù)據(jù)傳輸可隨時在主設(shè)備和其他設(shè)備之間進(jìn)行(應(yīng)用極少的廣播模式除外)。主設(shè)備可選擇要訪問的蔥設(shè)備;典型的情況是,它可以在設(shè)備之間以輪替的方式快速轉(zhuǎn)換。因為是主設(shè)備來選擇要訪問的從設(shè)備,理論上從設(shè)備就要在接收槽內(nèi)待命,主設(shè)備的負(fù)擔(dān)要比從設(shè)備少一些。主設(shè)備可以于七個從設(shè)備相連接,但是從設(shè)備卻很難于一個以上的主設(shè)備相連。規(guī)格對于散射網(wǎng)中的行為要求是模糊的。

藍(lán)牙是一個標(biāo)準(zhǔn)的無限通訊協(xié)議,基于設(shè)備低成本的收發(fā)器芯片,傳輸距離近、低功耗。由于設(shè)備使用無線電(廣播)通訊系統(tǒng),他們并非以實際可見的線相連,然而準(zhǔn)光學(xué)無線路徑則必須是可行的。射程范圍取決于功率和類別,但是有效射程范圍在實際應(yīng)用中會各有差異。
有效射程因傳輸條件,材料覆蓋、生產(chǎn)樣本的變化、天線配置和電池狀態(tài)有關(guān)。多數(shù)藍(lán)牙應(yīng)用是為室內(nèi)環(huán)境而設(shè)計的,由于墻的衰弱和信號反射造成的信號衰落會使得射程遠(yuǎn)小于藍(lán)牙產(chǎn)品規(guī)定的射程范圍。多數(shù)藍(lán)牙應(yīng)用是由電池供電的2類設(shè)備,無論對方設(shè)備是1類或2類,射程差異均不明顯,因為射程范圍通常取決于低功率的設(shè)備。在某些情況下,當(dāng)2類設(shè)備連接到一個敏感度和發(fā)射功率都高于典型的2類設(shè)備的1類接收器上時,數(shù)據(jù)鏈的有效射程可被延長,然而多數(shù)情況下,1類設(shè)備于2類設(shè)備的美感度是相近的。

兩個敏感度和發(fā)射功率都較高的1類設(shè)備相連接,射程可遠(yuǎn)高于一般水平的100m ,取決于應(yīng)用所需要的吞吐量。有些設(shè)備在開放的環(huán)境中的射程能夠高達(dá)1km 甚至更遠(yuǎn)。

藍(lán)牙配置文件

要使用藍(lán)牙無線技術(shù),設(shè)備必須能夠解譯某些藍(lán)牙配置文件,藍(lán)牙配置文件定義了可能的應(yīng)用,并規(guī)定了藍(lán)牙設(shè)備之間通信的一般行為。這些配置文件包括對通信參數(shù)和控制的最初設(shè)定。配置文件能夠節(jié)約在雙向鏈路起效之前重新發(fā)送參數(shù)的時間。廣泛的藍(lán)牙配置文件描述很多不同類型的應(yīng)用或設(shè)備用例。

BLE協(xié)議層

  • 物理層(PHY)

    • 運行在 2.4GHz ISM band
    • GFSK 調(diào)制方式(高斯頻移鍵控) -40 頻道 2MHz 的通道間隙
      *3 個固定的廣播通道 *37 個自適應(yīng)自動調(diào)頻數(shù)據(jù)通道
  • LL層、RF控制層
    控制芯片工作在 standby(準(zhǔn)備)、advertising(廣播)、scanning
    (監(jiān)聽/掃描),initiating(發(fā)起連接)、connected(已連接)這五個狀態(tài)中的一種。五 種狀態(tài)的切換描述為:advertising(廣播)不需要連接就可以發(fā)送數(shù)據(jù)(告訴所有人, 我來了),scanning(監(jiān)聽/掃描)來自廣播的數(shù)據(jù),initiator(發(fā)起人)將攜帶 connection request(連接請求)來相應(yīng)廣播者,如果 advertiser(廣播者)同意該請求,那么廣播 這和發(fā)起者都會進(jìn)入已連接狀態(tài),發(fā)起連接的設(shè)備變?yōu)?master(主機(jī)),接收連接請求 的設(shè)備變?yōu)?slave(從機(jī))。

  • HCI層 通信層
    向 host 和 controller 提供一個標(biāo)準(zhǔn)化的接口。該層可以由軟件 api 實現(xiàn)或 者使用硬件接口 uart、spi、usb 來控制。

  • L2CAP
    相當(dāng)于快遞,將數(shù)據(jù)打包,可以讓客戶點對點的通信。

  • SM層
    安全服務(wù)層,提供配對和密鑰的分發(fā),實現(xiàn)安全連接和數(shù)據(jù)交換。

  • ATT層
    允許設(shè)備向另外一個設(shè)備展示一塊特定的數(shù)據(jù),稱之為“屬性”,在 ATT 環(huán)境中,
    展示“屬性”的設(shè)備稱為服務(wù)器,與之配對的設(shè)備稱為客戶端。
    鏈路層狀態(tài)(主機(jī)和從 機(jī))與設(shè)備的 ATT 角色是相互獨立的,也就是說,主機(jī)設(shè)備可以是 ATT 服務(wù)器,也可以 是 ATT 客戶端。從機(jī)也一樣。

  • GATT層
    從名字就能看出,GATT 是在 ATT 上面的一層結(jié)構(gòu),定義了使用 ATT 的服務(wù)框架, GATT 規(guī)定了配置文件(鼎鼎有名的 profile)的結(jié)構(gòu),在 BLE 中,所有被 profile 或者服 務(wù)用到的數(shù)據(jù)塊都稱為“特性,characteristic”兩個建立連接的設(shè)備之間的所有數(shù)據(jù)通 信都是通過 GATT 子程序處理,應(yīng)用程序和 profile 直接使用 GATT 層,在后面具體的代 碼中,我們會經(jīng)常見到 GATT。

藍(lán)牙4.0

藍(lán)牙4.0是2012年最新藍(lán)牙版本,是3.0的升級版本;較3.0版本更省電、成本低、3毫秒低延遲、超長有效連接距離、AES-128加密等;通常用在藍(lán)牙耳機(jī)、藍(lán)牙音箱等設(shè)備上。

藍(lán)牙中心模式流程

  • 建立中心角色
  • 掃描外設(shè)(discover)
  • 連接外設(shè)(connect)
  • 掃描外設(shè)中的服務(wù)和特征(discover)
    • 獲得外設(shè)的services服務(wù)
    • 獲取外設(shè)的Characteristics,獲取Characteristics的值,獲取Characteristics的Descriptor和Descriptor的值
  • 與外設(shè)做數(shù)據(jù)交互(explore and interact)
  • 訂閱Characteristic的通知
  • 斷開鏈接(disconnect)

藍(lán)牙外設(shè)模式流程

  • 啟動一個Peripheral管理對象
  • 本地Peripheral設(shè)置服務(wù)、特性、描述、權(quán)限等等
  • Peripheral發(fā)送廣告
  • 設(shè)置處理訂閱、取消訂閱、讀characteristic(特性)、寫characteristic的委托方法

藍(lán)牙設(shè)備狀態(tài)

  • 待機(jī)狀態(tài)(Standby):設(shè)備沒有傳輸和發(fā)送數(shù)據(jù),并且沒有連接到任何設(shè)備
  • 廣播狀態(tài)(Advertiser):周期性廣播狀態(tài)
  • 掃描狀態(tài)(Scanner):主動尋找在廣播的設(shè)備
  • 發(fā)起鏈接狀態(tài)(Initiator):主動向掃描設(shè)備發(fā)起連接
  • 主設(shè)備(Master):作為主設(shè)備連接到其他設(shè)備
  • 從設(shè)備(Slave):作為從設(shè)備連接到其他設(shè)備

藍(lán)牙設(shè)備的物種工作狀態(tài)

  • 準(zhǔn)備 standby
  • 廣播 advertising
  • 監(jiān)聽掃描 scanning
  • 發(fā)起連接 initiating
  • 已連接 connected

名詞解釋

  • GAAT
    現(xiàn)在低功耗藍(lán)牙(BLE)連接都是建立在 GATT (Generic Attribute Profile) 協(xié)議之上。GATT 是一個在藍(lán)牙連接之上的發(fā)送和接收很短的數(shù)據(jù)段的通用規(guī)范,這些很短的數(shù)據(jù)段被稱為屬性(Attribute)。
    藍(lán)牙SIG規(guī)定了許多低功耗設(shè)備的配置文件。配置文件是設(shè)備如何在特定的應(yīng)用程序中工作的規(guī)格說明。注意一個設(shè)備可以實現(xiàn)多個配置文件。例如,一個設(shè)備可能包括心率監(jiān)測儀和電量檢測。

  • Characteristic 特性
    一個characteristic包括一個單一變量和0-n個用來描述characteristic變量的descriptor,characteristic可以被認(rèn)為是一個類型,類 似于類。

  • Descriptor
    Descriptor用來描述characteristic變量的屬性。例如,一個descriptor可以規(guī)定一個可讀的描述,或者一個characteristic變量可接受的范圍,或者一個characteristic變量特定的測量單位。

  • Service
    service是characteristic的集合。例如,你可能有一個叫“Heart Rate Monitor(心率監(jiān)測儀)”的service,它包括了很多characteristics,如“heart rate measurement(心率測量)”等

GAP

詳細(xì)介紹 GATT 之前,需要了解 GAP(Generic Access Profile),它在用來控制設(shè)備連接和廣播。GAP 使你的設(shè)備被其他設(shè)備可見,并決定了你的設(shè)備是否可以或者怎樣與合同設(shè)備進(jìn)行交互。例如 Beacon 設(shè)備就只是向外廣播,不支持連接,小米手環(huán)就等設(shè)備就可以與中心設(shè)備連接。

  • 設(shè)備角色
    GAP給設(shè)備定義了若干角色,其中主要就是外圍設(shè)備(Peripheral)和中心設(shè)備(Central)

    • 外圍設(shè)備:一般就是非常小活著簡單的低功耗設(shè)備,用來提供數(shù)據(jù),并連接到一個更加相對強(qiáng)大的中心設(shè)備,例如小米手環(huán)。
    • 中心設(shè)備:中心設(shè)備想對比較強(qiáng)大,用來連接其他外圍設(shè)備,例如手機(jī)。
  • 廣播數(shù)據(jù)
    在 GAP 中外圍設(shè)備通過兩種方式向外廣播數(shù)據(jù): Advertising Data Payload(廣播數(shù)據(jù))和 Scan Response Data Payload(掃描回復(fù)),每種數(shù)據(jù)最長可以包含 31 byte。這里廣播數(shù)據(jù)是必需的,因為外設(shè)必需不停的向外廣播,讓中心設(shè)備知道它的存在。掃描回復(fù)是可選的,中心設(shè)備可以向外設(shè)請求掃描回復(fù),這里包含一些設(shè)備額外的信息,例如設(shè)備的名字。

  • 連接間隔
    在兩個BLE設(shè)備的連接中使用調(diào)頻機(jī)制,兩個設(shè)備使用特定的信道收發(fā) 數(shù)據(jù),然后過一段時間后再使用新的信道。(鏈路層處理信道切換),兩設(shè)備在信道切換 后收發(fā)數(shù)據(jù)稱之為連接事件,即使沒有應(yīng)用數(shù)據(jù)的收發(fā),兩個設(shè)備任然會通過交換鏈路 層數(shù)據(jù)來維持連接,連接間隔就是兩個連接時間之間的時間間隔,連接間隔以 1.25ms 為單位,連接間隔的值為 6(7.5ms)~3200(4s)。
    不同的應(yīng)用可以要求不同的時間間隔,長的時間間隔的優(yōu)勢是顯著的節(jié)省功耗,因 為設(shè)備可以在連接事件之間有較長時間的休眠,壞處是當(dāng)設(shè)備有應(yīng)用數(shù)據(jù)需要發(fā)送時, 必須要等到下一個連接事件。短的時間間隔優(yōu)勢是兩設(shè)備連接頻發(fā),可以更快的收發(fā)數(shù) 據(jù),不利之處是設(shè)備因連接時間的到來而頻繁的喚醒,會有較多的功耗。

  • 廣播流程

    外圍設(shè)備會設(shè)定一個廣播間隔,每個廣播間隔中,它會重新發(fā)送自己的廣播數(shù)據(jù)。廣播間隔越長,越省電,同時也不太容易掃描到。


    大部分情況下,外設(shè)通過廣播自己來讓中心設(shè)備發(fā)現(xiàn)自己,并建立 GATT 連接,從而進(jìn)行更多的數(shù)據(jù)交換。也有些情況是不需要連接的,只要外設(shè)廣播自己的數(shù)據(jù)即可。用這種方式主要目的是讓外圍設(shè)備,把自己的信息發(fā)送給多個中心設(shè)備。因為基于 GATT 連接的方式的,只能是一個外設(shè)連接一個中心設(shè)備。 使用廣播這種方式最典型的應(yīng)用就是蘋果的 iBeacon。廣播工作模式下的網(wǎng)絡(luò)拓?fù)鋱D如下:

GATT

它定義了兩個BLE設(shè)備通過較多 Service 和Characteristic 的東西進(jìn)行通信。GATT 使用了ATT協(xié)議 ,ATT 協(xié)議把 Service 和Characteristic 以及對應(yīng)的數(shù)據(jù)保存在一個查找表中,使用16bit ID 作為每一項的索引。

一旦兩個設(shè)備建立起了連接,GATT 就開始起作用了,這也意味著,你必須完成前邊的 GAP 協(xié)議 GATT連接,必須先經(jīng)過 GAP 協(xié)議
注意 GATT 連接是獨占的。也就是一個BLE外設(shè)同時智能被一個中心設(shè)備連接。一旦外設(shè)被連接,它就會馬上停止廣播,這樣它就對其他設(shè)備不可見了。當(dāng)設(shè)備斷開,它又開始廣播。中心設(shè)備和外設(shè)需要雙向通信的話,唯一的方法就是建立GATT連接 。


一旦建立起了連接,通信就是雙向的了,對比前面的 GAP 廣播的網(wǎng)絡(luò)拓?fù)洌珿AP 通信是單向的。如果你要讓兩個設(shè)備外設(shè)能通信,就只能通過中心設(shè)備中轉(zhuǎn)。

GATT 通信事務(wù)

GATT通信的雙方是C/S關(guān)系。外設(shè)作為GATT 服務(wù)端 (Server),它維持了ATT查找表以及 service 和characteristic 的定義。
中心設(shè)備是GATT 客戶端(Client),它向Server 發(fā)起請求。
注意:需要注意的是,所有的通信事件,都是由客戶端(主設(shè)備)發(fā)起,并且接收服務(wù)端(從設(shè)備)的相應(yīng)。

一旦連接建立,外設(shè)將會給中心設(shè)備建議一個連接間隔,這樣,中心設(shè)備就會在每個連接間隔嘗試去重新連接,檢查是否有新的數(shù)據(jù)。但是,這個間隔只是一個建議,你在中心設(shè)備可能并不會嚴(yán)格按照這個間隔來執(zhí)行。例如你的中心設(shè)備正在忙于連接其他的外設(shè),活著中心設(shè)備資源太忙。

下圖展示一個外設(shè)(GATT 服務(wù)端)和中心設(shè)備(GATT 客戶端)之間的數(shù)據(jù)交換流程,可以看到的是,每次都是主設(shè)備發(fā)起請求:

GATT結(jié)構(gòu)

BLE

  • Profile
    Profile 可以理解為一種規(guī)范,一個標(biāo)準(zhǔn)的通信協(xié)議,Profile 存在于從機(jī)中。藍(lán)牙組
    織規(guī)定了一些列的標(biāo)準(zhǔn) Profile,例如 HID OVER GATT、防丟器、心率計等。每個 Profile 中會包含多個 Service,每個 Service 代表從機(jī)的一種能力。

  • Service
    Service 可以理解為一個服務(wù),在 ble 從機(jī)中,通過有多個服務(wù),例如電量信息服務(wù)、系 統(tǒng)信息服務(wù)等,每個 Service 里又包含多個 Characteristic 特征值。每個具體的 Characteristic 特征值,才是 ble 通信的主體。比如當(dāng)前的電量是 80%,所以會通過電量 的 characteristic 特征值存在從機(jī)的 profile 里,這樣主機(jī)就可以通過這個 characteristic, 來讀取 80%這個數(shù)據(jù)

  • Characteristic
    Characteristic 特征值,BLE 主從機(jī)的通信均是通過 Characteristic 來實現(xiàn),可以理解為一 個標(biāo)簽,通過這個標(biāo)簽可以獲取或者寫入想要的內(nèi)容。

  • UUID
    UUID,統(tǒng)一識別碼,我們剛才提到的 Service 和 Characteristic,都需要一個唯一的 UUID 來標(biāo)識。

每個從機(jī)都會有一個叫做 profile 的東西存在,不管是上面的自定義的 simpleProfile,還是標(biāo)準(zhǔn)的防丟器 Profile,他們都是由一些列 Service 組成,然后每個 Service 又包含了多個 Characteristic,主機(jī)和從機(jī)之間的通信,均是通過 Characteristic 來實現(xiàn)。

數(shù)據(jù)發(fā)送

在BLE 協(xié)議棧中進(jìn)行數(shù)據(jù)傳遞氛圍兩個方面,一個是GATT的client主動向service發(fā)送數(shù)據(jù),另一個是GAAT的service主動向client發(fā)送數(shù)據(jù) 。簡化為從主機(jī)向從機(jī)發(fā)送數(shù)據(jù),從機(jī)向主機(jī)發(fā)送發(fā)送數(shù)據(jù)。

  • 主機(jī)向從機(jī)發(fā)送數(shù)據(jù)
    發(fā)送可以調(diào)用 GATT_WriteCharValue 函數(shù)實現(xiàn),該函教會調(diào)用協(xié)議棧里面與硬件相
    關(guān)的函數(shù)最終將數(shù)據(jù)通過天線發(fā)送出去,這里面涉及對射頻模塊的操作,例如:打開發(fā) 射機(jī),調(diào)整發(fā)射機(jī)的發(fā)送功率等內(nèi)容,這些部分協(xié)議棧已經(jīng)實現(xiàn)了,用戶不需要自己寫 代碼去實現(xiàn),只需要掌握 GATT_WriteCharValue 函數(shù)的使用方法即可。需要發(fā)送的數(shù)據(jù) 填充到 value 中,然后數(shù)據(jù)長度填充到 len 中。如下圖。
主機(jī)發(fā)送
  • 從機(jī)向主機(jī)發(fā)送數(shù)據(jù)
    從機(jī)向主機(jī)發(fā)送數(shù)據(jù),需要調(diào)用 GATT_Notification 函數(shù)實現(xiàn),上面的主從機(jī)沒用使
    用到該函數(shù)。開發(fā)串口透傳等項目時,就需要在從機(jī)中主動向主機(jī)發(fā)送數(shù)據(jù),需要該函 數(shù)來實現(xiàn)。下面的代碼是來自我們的串口透傳中。需要填充的和 GATT_WriteCharValue 類似,value 和 len。
從機(jī)發(fā)送

數(shù)據(jù)接收

數(shù)據(jù)接收和數(shù)據(jù)發(fā)送一樣,同樣分為兩個方面。
從機(jī)接收主機(jī)發(fā)來的數(shù)據(jù)和主機(jī)接收來自從機(jī)的數(shù)據(jù)

  • 從機(jī)接收主機(jī)發(fā)送來的數(shù)據(jù)
    當(dāng)從機(jī)接收到主機(jī)發(fā)來的數(shù)據(jù)后,從機(jī)會產(chǎn)生一個 GATT Profile Callback 調(diào)用,我們 在這個 callback 中接收主機(jī)發(fā)送的數(shù)據(jù)。這個 callback 在從機(jī)初始化時向 Profile 注冊。
接收數(shù)據(jù)

主機(jī)通過 BLE 提供的數(shù)據(jù)發(fā)送接口發(fā)送數(shù)據(jù) 后,從機(jī)的協(xié)議棧收到數(shù)據(jù)后,做相應(yīng)處理,取得自己需要的數(shù)據(jù)即可,其他工作,都 由 BLE 協(xié)議棧自動完成了。

掃描回應(yīng)

當(dāng)主機(jī)掃描從機(jī)時,如果從機(jī)正在廣播,將被掃描到,并且可以看到從機(jī)的設(shè)備名,發(fā)射功率等信息,而這些信息并為出現(xiàn)在剛才的廣播數(shù)據(jù)中,這是為什么呢。

當(dāng)從機(jī)接到主機(jī)發(fā)來的掃描請求時,會有一個掃描回應(yīng) Scan Response ,在這個 response 中,攜帶了從機(jī)設(shè)備名,發(fā)送功率等信息 。

一個按鍵服務(wù)的底層實現(xiàn)

首先注冊按鍵服務(wù)程序

注冊服務(wù)

向一個全局變量中賦值自己的任務(wù) ID,從代碼中可以看出,只能第一個調(diào)用改函數(shù) 的任務(wù)才能成功注冊到按鍵服務(wù)。

參考:http://blog.sina.com.cn/s/blog_68661bd80102w14h.html

http://liuyanwei.jumppo.com/2015/07/17/ios-BLE-0.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容