BLE協(xié)議 01

簡(jiǎn)介

本文將按照如下層次分析

  • PHY(物理層)
  • LL(鏈路控制層)
  • HCI(主機(jī)和控制接口)
  • L2CAP層(邏輯鏈路控制和適配層)
  • GATT(通用屬性規(guī)范)
  • ATT(屬性傳輸協(xié)議)
  • SMP(安全管理)

協(xié)議的組成圖:

PHY(物理層)

頻段

BLE使用2.4GHz工業(yè)、科學(xué)及醫(yī)療(ISM)頻段。

這個(gè)頻段有兩個(gè)特別之處:

  • 它是一個(gè)無需授權(quán)的頻段
  • 它是唯一一個(gè)在任何國(guó)家都通用的頻段,即對(duì)于2.4GHz的頻段,從2400MHz~2483.5MHz約83.5MHz的頻譜資源在任何地方都可以使用。

調(diào)制

BLE采用的GFSK調(diào)制方式(髙斯頻移鍵控),物理層的比特率為1Mbit/s(1Mbps)。

射頻信道

LL(鏈路控制層)

描述

鏈路層定義了兩個(gè)設(shè)備如何利用無線電傳輸信息,包含了報(bào)文、廣播、數(shù)據(jù)通道的詳細(xì)定義,也規(guī)定了發(fā)現(xiàn)其他設(shè)備的流程、廣播的數(shù)據(jù)、連接建立、連接管理以及連接中的數(shù)據(jù)傳輸。

鏈路層狀態(tài)機(jī)

  • 就緒態(tài)(Standby)
  • 廣播態(tài)(Advertising)
  • 掃描態(tài)(Scanning)
  • 發(fā)起態(tài)(Initiating)
  • 連接態(tài)(Connection)

空中數(shù)據(jù)包結(jié)構(gòu)

  • 前導(dǎo)碼:1字節(jié)
  • 訪問地址:4字節(jié)
  • 數(shù)據(jù)包單元:29字節(jié)
  • CRC校驗(yàn):3字節(jié)


基本概念

  • Bit流

在4.0協(xié)議中規(guī)定數(shù)據(jù)都是以小端模式存放

在內(nèi)存中,并且發(fā)送到空中的數(shù)據(jù)都是以低字節(jié)的最低bit位進(jìn)行發(fā)送。當(dāng)然也有例外,CRC是先發(fā)送的高字節(jié)的最低bit位。例

  • 數(shù)據(jù)白化

數(shù)據(jù)白化的目的是避免長(zhǎng)0長(zhǎng)1。

三種“地址”區(qū)分

  • 前導(dǎo)碼Preamble:1字節(jié)
    前導(dǎo)碼的作用是:頻率同步和增益控制。只有兩個(gè)值: 0xAA和0x55

  • 接入地址Access Address:4字節(jié)
    廣播包固定---- 0x8e89bed6
    數(shù)據(jù)包變化----每一次連接都不同

  • 芯片物理地址:6字節(jié)
    它分為:公共地址和隨機(jī)地址。隨機(jī)地址分為:靜態(tài)地址和私有地址。私有地址分為:不可解析和可解析地址。


報(bào)文結(jié)構(gòu)詳細(xì)組成

廣播通道PDU結(jié)構(gòu)

同一廣播事件中3個(gè)信道之間的時(shí)間間隔----以ADV-IND為例

連接請(qǐng)求CONNECT_REQ包

Sniffer采集到的連接請(qǐng)求包

image

數(shù)據(jù)通道PDU結(jié)構(gòu)

image
image

連接事件

和廣播事件一樣,每隔一定的時(shí)間連接事件由主機(jī)從數(shù)據(jù)信道發(fā)送一個(gè)數(shù)據(jù)包,從機(jī)接到數(shù)據(jù)如果有數(shù)據(jù)發(fā)送需要在150±2 μs做成應(yīng)答。也就是說每一個(gè)連接事件中至少包含主機(jī)發(fā)送的一個(gè)包,從機(jī)可以不發(fā)送包。

  • 連接事件的時(shí)間由兩個(gè)參數(shù)決定:connection event interval (connInterval), and slave latency (connSlaveLatency).即連接間隔和從機(jī)潛伏期。
  • lanchor point
    連接事件開始的點(diǎn)叫做錨點(diǎn)(The start of aconnection event is called an anchor point)。主機(jī)在錨點(diǎn)開始連接事件,從機(jī)需要在錨點(diǎn)前進(jìn)入偵聽狀態(tài)。
  • connEventCounter
    主機(jī)和從機(jī)都有一個(gè)16位的連接事件計(jì)數(shù)器,這個(gè)值是為了這兩個(gè)設(shè)備之間的同步。這個(gè)值只要是連接事件參數(shù)就會(huì)加1,當(dāng)然第一個(gè)連接事件時(shí)這個(gè)值為0而不是1。無論從機(jī)潛伏期的值是多少,只有從機(jī)接收到主機(jī)的連接事件這個(gè)值在從機(jī)里面就要加1。當(dāng)這個(gè)值到了0xFFFF時(shí),會(huì)翻轉(zhuǎn)到0x0000,重新開始計(jì)算。

連接事件傳輸窗口

在上面講到了CONNECT_REQ包,這個(gè)包中包含了傳輸窗口,并且窗口偏移(WinOffset)只有是從廣播態(tài)進(jìn)入連接態(tài)時(shí)使用,或者在參數(shù)更新時(shí)使用,而WinSize時(shí)間是每個(gè)連接事件都必須使用的。

?連接間隔時(shí)間的起點(diǎn)有兩個(gè)位置:?當(dāng)從機(jī)接收?qǐng)?bào)文成功,連接間隔時(shí)間起點(diǎn),就是接收到報(bào)文的那個(gè)時(shí)刻,當(dāng)然對(duì)于nrf51822來說,就是Radio的END事件產(chǎn)生的時(shí)候了。

  • 當(dāng)從機(jī)接收?qǐng)?bào)文失敗,連接間隔時(shí)間起點(diǎn),就是掃描窗口的開始時(shí)刻。

從機(jī)在傳輸窗口中沒有接收到第一個(gè)連接事件

這種情況,從機(jī)不得不等待連接間隔時(shí)間后再次進(jìn)入傳輸窗口,等待接收下一個(gè)報(bào)文。雖然接收失敗,但是還是有幾點(diǎn)要注意的:

  • 連接事件計(jì)數(shù)值connEventCount這個(gè)值還是得加1的。
  • 數(shù)據(jù)通道的頻率還得接著跳到下一個(gè)頻率。

HCI(主機(jī)和控制接口)

HCI Commands and Events

L2CAP層(邏輯鏈路控制和適配層)

L2CAP邏輯鏈路控制和適配層

這個(gè)層的目的是將上層的數(shù)據(jù)進(jìn)行簡(jiǎn)單包裝,使得對(duì)于LL層來說,非常方便地進(jìn)行再次包裝后進(jìn)行發(fā)送。

L2CAP包結(jié)構(gòu)以及信道標(biāo)識(shí)


屬性

什么是屬性

屬性是一條公開的帶有標(biāo)簽的,可以被尋址的數(shù)據(jù)。屬性構(gòu)成就是規(guī)定數(shù)據(jù)怎么組成。在L2CAP中可以知道,HOST通往下層的數(shù)據(jù)只有3條路,并且如果是應(yīng)用的話,只有一條CID=0x0004的通道,看來對(duì)于BLE所有應(yīng)用數(shù)據(jù)都是通過ATT進(jìn)行傳輸?shù)摹D敲吹缴匙永锩嫣越鹱?,為什么可以認(rèn)出沙子里面的金子呢?因?yàn)榻鹱影l(fā)光,黃色的,這兩個(gè)就是金子的基本屬性。對(duì)于ATT跑到GATT哪里去找數(shù)據(jù),肯定得規(guī)定數(shù)據(jù)怎么放,也就是人為規(guī)定數(shù)據(jù)屬性,這樣才好找吧!在4.0協(xié)議規(guī)范中規(guī)定的這個(gè)格式就是屬性,也就是數(shù)據(jù)按照一定規(guī)則存放的規(guī)定,這個(gè)存放的規(guī)定就是組成服務(wù)的最小單元。

屬性組成最小單元
屬性句柄(Attribute Handle)

兩個(gè)作用

  • 為了方便尋找屬性的一種方式
  • 通過屬性句柄操作多個(gè)同樣屬性類型
屬性類型(Attribute Type)

屬性類型其實(shí)就是對(duì)某個(gè)東西取一個(gè)別名,讓機(jī)器可以理解,對(duì)于機(jī)器理解東西就是數(shù)字了,所以屬性類型采用了2bytes或者是16bytes的長(zhǎng)度的數(shù)字表示某個(gè)東西。例如心率計(jì),我們?nèi)寺牭叫穆视?jì)都知道是什么,但是機(jī)器并不知道,同樣對(duì)于一個(gè)不懂中文的人對(duì)他說“心率計(jì)”,他也不知道是什么。所以為了全球統(tǒng)一,心率計(jì)有一個(gè)數(shù)字代號(hào):0x180D,這是唯一的識(shí)別碼叫做通用唯一識(shí)別碼(Universally Unique IDentifier (UUID))。在服務(wù)器的數(shù)據(jù)庫中只要找到服務(wù)是 0x180D的值,所有設(shè)備都知道這是一個(gè)含有心率計(jì)服務(wù)的藍(lán)牙設(shè)備。

書名號(hào)

對(duì)于機(jī)器讀到0x180D就知道是心率計(jì)服務(wù),但是對(duì)于人來說還是喜歡形象的東西,所以又有一種方法,對(duì)于2bytes的UUID,通常不直接用它的值,而是用一個(gè)名稱并加上書名號(hào),例如心率計(jì)通常用?Heart Rate service ?表示數(shù)值為0x180D的UUID

屬性值(Attribute Value)

屬性值是一個(gè)0~512字節(jié)的數(shù)據(jù),對(duì)于屬性本身來說,屬性值是沒有用的,屬性值是給應(yīng)用用的。那么值可以有哪些呢?

  • 服務(wù)通用唯一識(shí)別碼(UUID)
  • 單位
  • 屬性類型
  • 特性描述符
  • 特性類型
屬性許可(Attribute Permissions)
  • 可讀
  • 可寫
  • 可讀且可寫
  • 需要認(rèn)證
  • 不需要認(rèn)證
  • 無授權(quán)
  • 授權(quán)
GATT 服務(wù)組成

服務(wù)是指一系列由數(shù)據(jù)和相關(guān)行為組成的集合,為了去完成某個(gè)特定的功能或者特性。而一個(gè)服務(wù)可以包含引用服務(wù)即《Include》、強(qiáng)制性和可選的特征即 《Characteristic》。

心率計(jì)服務(wù)

服務(wù)聲明

服務(wù)聲明是干什么用的?簡(jiǎn)單地講,就是告訴其他藍(lán)牙設(shè)備,我可以為你提供什么服務(wù),對(duì)于心率計(jì),就是告訴對(duì)方我可以提供心率的服務(wù)。

特性?Characteristic?聲明

  • 屬性值—特性性質(zhì)(CharacteristicProperties)
  • 屬性值—特性的屬性句柄(Characteristic ValueAttribute Handle)
  • 屬性值—特性的屬性類型(Characteristic UUID)
  • 屬性值—特性性質(zhì)(CharacteristicProperties)
屬性許可(Attribute Permissions)和特性性質(zhì)(Characteristic Properties)區(qū)別
  • Permissions:對(duì)設(shè)備本身的權(quán)限,相當(dāng)于家里臥室中也需要門鎖,防止爸媽偷看日記
  • Properties:對(duì)于對(duì)方設(shè)備而言的權(quán)限,相當(dāng)于大門的門鎖是防止外人非法進(jìn)入的。
特性值聲明

特性值的聲明是在特性聲明后的第一個(gè)屬性,所有的特性定義中一定包含有一個(gè)特性值聲明。

特性描述符聲明

特性描述是用來包含一些關(guān)于特性值的關(guān)聯(lián)信息,特性描述有多種類型,一個(gè)特性的定義可以有任意多個(gè)的描述符,而所有描述符都是用來為特性值服務(wù)的

  • 特性擴(kuò)展性質(zhì) ?Characteristic Extended Properties?:0x2900
  • 特性用戶描述 ?Characteristic User Description? :0x2901
  • 客戶端特性配置?Client Characteristic Configuration? :0x2902
  • 服務(wù)器特性配置?Server Characteristic Configuration?:0x2903
  • 特性表示格式 ?Characteristic Presentation Format?:0x2904
  • 特性聚合格式 ?Characteristic Aggregate Format? :0x2905
心率計(jì)的特性

GATT(通用屬性規(guī)范)

ATT(屬性傳輸協(xié)議)

ATT干啥用的?

ATT協(xié)議存在的目的是規(guī)定用什么樣的方法去訪問GATT服務(wù),并將訪問的到的數(shù)據(jù)傳輸給L2CAP;或者是規(guī)定L2CAP的數(shù)據(jù)怎么樣傳到GATT服務(wù)的一種規(guī)定的傳輸協(xié)議。

通信方法
屬性協(xié)議PDU
GATT映射到 ATT
ATTPDU 映射到 GATT規(guī)程

SMP(安全管理)

安全管理難點(diǎn)

安全管理難點(diǎn)在于:怎么將公共密鑰進(jìn)行安全共享

加密標(biāo)準(zhǔn)

AES-CCM 是計(jì)數(shù)器密碼塊鏈消息認(rèn)證碼模式,融合有3 種技術(shù): AES 加密引擎、計(jì)數(shù)模式和消息認(rèn)證
AES(Advanced Encyption Standard)即先進(jìn)加密標(biāo)準(zhǔn)

安全管理配對(duì)綁定數(shù)據(jù)包交互全過程

參考

https://mp.weixin.qq.com/s/_YvRgwGyVwomDCuMIEkzJQ

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

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

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