BLE協(xié)議--ATT、GATT

Attribute

屬性(Attribute)由以下三部分組成:

  • Handle:可以理解為屬性表中的地址
  • UUID:16bit(需要購買)或128bit
  • Value:UUID不同,含義不同

UUID

可以將屬性進(jìn)行初級(jí)的分類:

  • 0x1800 ~ 0x26FF: 服務(wù)識(shí)別碼,用來識(shí)別具體是哪個(gè)服務(wù)。
  • 0x2700 ~ 0x27FF: 度量單位,如:km/h, kg。
  • 0x2800 ~ 0x28FF: 區(qū)分屬性類型,首要/次要/包含/特性。
  • 0x2900 ~ 0x29FF: 特性描述,如:CCCD/User Description。
  • 0x2A00 ~ 0x2AFF: 區(qū)分特性類型,DeviceName/Version等。

Property

提供訪問控制,每個(gè)屬性都有一個(gè)許可,許可的分類:

  • 使用許可:可讀/可寫/讀寫。
  • 認(rèn)證許可:需要認(rèn)證/不需要認(rèn)證。需要認(rèn)證 時(shí),客戶端可以發(fā)起認(rèn)證請求。
  • 授權(quán)許可:由服務(wù)器決定,客戶端無法改變,只能等待,并重新發(fā)起請求。

Characteristic

由多條屬性(Attribute)可以組成一個(gè)特性(Characteristic),特性由以下三部分組成:

  • 特性申明:如果一個(gè)屬性是特性申明,其屬性值由性質(zhì)、句柄、UUID組成。申明了該特性的讀寫性質(zhì),句柄,UUID。
  • 特性數(shù)值:必須查詢該特性的服務(wù)規(guī)格書才知道其具體意義。
  • 特性描述符(并不是必須的,可以沒有):
    • 特性擴(kuò)展性質(zhì):可靠地寫入數(shù)值的能力,以及寫入“特性用戶描述”的能力。
    • 特性用戶描述:用來描述該特性行為,如用一串字符串“溫度特性”。
    • 客戶端特性配置:用來通知或指示客戶端。
    • 服務(wù)器特性配置:與客戶端特性配置類似,但多一個(gè)廣播位,用于廣播該特性所屬服務(wù)的相關(guān)數(shù)據(jù)。
    • 特性表示格式:表明客戶端按什么樣的格式理解數(shù)據(jù)。
    • 特性聚合格式:將不同的特性表示格式組合成一個(gè)新的格式,如經(jīng)度,緯度組合成經(jīng)緯度數(shù)據(jù)。

Service

由0條或多條特性可以組成服務(wù)(Service),也可以通過以下方法重用服務(wù)。

  • 拓展(Extend)
    比如,一臺(tái)舊設(shè)備支持A服務(wù),新的設(shè)備在A的基礎(chǔ)上擴(kuò)展了服務(wù)A,并定義了新的服務(wù)AB,新設(shè)備和舊設(shè)備通訊時(shí)會(huì)先去發(fā)現(xiàn)AB服務(wù),若失敗,則使用通用的服務(wù)A,這樣保證舊設(shè)備的兼容性。
  • 引用(Reference)
    可以在新的服務(wù)中直接引用其他服務(wù)。可以理解為C語言中的指針,并沒有在新的服務(wù)中重新實(shí)現(xiàn)或擴(kuò)展,而是一個(gè)指針指向了引用的服務(wù)。
    *結(jié)合(Combine)
    一個(gè)服務(wù)引用另外兩個(gè)服務(wù),從而結(jié)合成新的服務(wù)。并具備了新的行為。
  • 服務(wù)申明
    服務(wù)申明的屬性值指明該服務(wù)具體是什么服務(wù),UUID是多少?
  • 包含(Include)
    次要服務(wù)必須逐個(gè)發(fā)現(xiàn),所以每個(gè)服務(wù)可以有0個(gè)或多個(gè)包含屬性。
    包含服務(wù)的屬性值包括服務(wù)句柄、組結(jié)束句柄、服務(wù)UUID。

實(shí)例

BLE_GATT.png

這是一張BLE的屬性表,里面有4個(gè)Service。

  • 紅色背景的屬性:
    UUID:0x2800,表明這條屬性是主服務(wù)的申明。
    Value:表明了這條服務(wù)分組具體對(duì)應(yīng)的是哪一個(gè)服務(wù)。其中0x1800為設(shè)備發(fā)現(xiàn)服務(wù),0x1801為GATT服務(wù),0x180A為設(shè)備服務(wù)。另外一條128bit的服務(wù)是自定義的數(shù)據(jù)服務(wù)。
  • 黃色背景的屬性:
    UUID: 0x2803,表明這條屬性是特性的申明。
    Value:申明了特性的Handle和UUID信息。
  • 其他白色
    背景的屬性:
    UUID: 0x2902,表明這條是特性描述符中的客戶端特性配置,0x0000關(guān)閉,0x0001打開通知,0x0002打開指示。

屬性協(xié)議

決定了客戶端如何獲取和使用屬性。
六種基本操作:

  • 請求(Request)
  • 響應(yīng)(Response)
  • 命令(Command)
sequenceDiagram
客戶端->>服務(wù)器: 請求
服務(wù)器->>客戶端: 響應(yīng)
sequenceDiagram
客戶端->>服務(wù)器: 命令

請求和命令的區(qū)別在于:請求需要響應(yīng),而命令不需要。

  • 指示(Indicate)
  • 確認(rèn)(Confirm)
  • 通知(Notification)
sequenceDiagram
客戶端->>服務(wù)器: 指示
服務(wù)器->>客戶端: 確認(rèn)

sequenceDiagram
服務(wù)器->>客戶端: 通知

通知和指示的區(qū)別在于:通知不需要確認(rèn),而指示需要。

  • 交換MTU請求
    屬性協(xié)議默認(rèn)的MTU長度為23字節(jié),如果想要發(fā)送更大的數(shù)據(jù)包,就需要協(xié)商MTU長度。

GATT協(xié)議

如果只有ATT協(xié)議,用戶使用起來還是比較麻煩,所以添加了GATT協(xié)議方便應(yīng)用層使用,GATT協(xié)議定義了如何發(fā)現(xiàn)和使用服務(wù)的一些標(biāo)準(zhǔn)方法。有以下三種規(guī)程:

  • 發(fā)現(xiàn)規(guī)程
    • 發(fā)現(xiàn)服務(wù):發(fā)現(xiàn)所有首要服務(wù)、按UUID發(fā)現(xiàn)首要服務(wù)、查找包含服務(wù)。
    • 發(fā)現(xiàn)特性:發(fā)現(xiàn)所有特性、發(fā)現(xiàn)所有特性描述符。
  • 客戶端發(fā)起規(guī)程:讀/寫特性值、讀/寫特性描述符。
  • 服務(wù)端發(fā)起規(guī)程:通知/指示。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,535評(píng)論 19 139
  • 一、屬性(Attribute) 用過BLE的同學(xué)都知道“屬性”(簡稱ATT),那么什么是屬性呢?寬泛的講,屬性是一...
    飛哥物聯(lián)閱讀 16,959評(píng)論 4 7
  • Key Terms And Concepts 關(guān)鍵術(shù)語和概念 Here is a summary of key B...
    Jaesoon閱讀 2,563評(píng)論 0 5
  • 藍(lán)牙——BLE 介紹 1.BLE 是 Bluetooth Low Energy 的縮寫,意思為低功耗藍(lán)牙。由藍(lán)牙技...
    Kip_Salens閱讀 2,321評(píng)論 1 3
  • 相關(guān)概念 BRBasic Rate,早期的傳統(tǒng)藍(lán)牙技術(shù) V1.1, V1.2 版本,傳輸速率為748~810kb/...
    七零八落問號(hào)閱讀 9,898評(píng)論 2 26

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