Android-BLE藍牙原理


https://www.jianshu.com/p/f98e77c9ec65

藍牙4.1BLE協議棧的結構圖如下:

  • PHY(Physical Layer):物理層,藍牙是工作在2.4GHz附近,這是工業、科學、醫療ISM的頻段,免許可證。WIFI也是工作在同一個頻段。藍牙把頻段切分為40個通道,3個廣播通道,37個數據通道,按照一個規律跳頻通信。

  • LL(Linker Layer):鏈路層,用於控制設備的射頻狀態,設備將處於五種狀態之一:等待、廣告、掃描、初始化、連接。廣播設備不需要建立連接就可以發送數據,而掃描設備接收廣播設備發送的數據;發起連接的設備通過發送連接請求來回應廣播設備,如果廣播設備接受連接請求,那么廣播設備與發起連接的設備將會進入連接狀態。發起連接的設備稱為主機,接受連接請求的設備稱為從機。

  • HCI(Host Controller Interface):主機和控制器就是通過這個接口來進行同學的,通信的介質就是HCI命令。這層在協議棧中是可選的,一些小型終端可能沒有,但是Android設備上肯定有,這層是藍牙上層和芯片的交互必經之路,對於藍牙硬件開發者,這里的log能夠很好的幫助解決問題。

  • HOST部分要復雜一些,有鏈路控制和適配層(L2CAP),安全管理(SM)等。其中L2CAP和SM我們知道概念就可以了,這里就不多關注了。我們重點來看屬性協議層,也就是ATT。它是整個BLE通信的基礎。ATT負責數據封裝,向外暴露為"屬性",提供"屬性"的為服務端,獲取"屬性"的為客戶端。ATT是專門為BLE低功耗藍牙而設計的傳輸協議,結構簡單,傳輸數據短(后面會有提及)。

  • GATT(Generic Attribute Profile):全稱叫做通用屬性配置文件,是基於ATT做進一步的邏輯封裝,定義數據的交互方式和含義,APP的開發其實就已經接觸到這一層了。GATT按照層級定義了三個非常重要的概念:服務(Service)、特征(Characteristic)、描述(Descripter)。他們之間的關系如下:

  • 一個Service可以包含若干個Characteristic,一個Characteristic可以包含屬性(properties)和值(value),還可以包含多個descripter。Characteristic實際上具有讀、寫、通知等權限,我們在對一個BLE設備發起連接成功以后,對他進行讀寫,其實就是對Characteristic的讀寫或者訂閱通知。圖中所謂的Profile,實際上是一組服務的集合,這些服務被人組合起來就形成了一個特定的使用場景。比如說,小米手環,里面就有一個計算用戶當前步數的服務。這就是這個Ble可以做的事情,也就是它的profile。

  • 第5個我們又提到一個BLE設備實際上就是一組Service的集合,那BLE藍牙以什么來標識多個Service呢。答案就是UUID。BLE中的Service,Characteristic,Descripter都是使用UUID來作為唯一標識。所以我們在讀寫BLE藍牙數據時,都要帶上相應的UUID。

  • GAP(Generic Access Profile):通用訪問控制配置文件。定義了BLE整個通信過程中的流程,負責處理設備訪問模式和程序,包括設備發現,建立連接,終止連接,初始化安全特性,設備配置。GAP層總是作為下面四種角色之一:(1)廣播者:不可連接的廣播設備。(2)觀察者:掃描設備,但不發起建立連接。(3)外部設備:可連接的廣播設備,可以在單個鏈路層連接中作為從機。(4)集中器:掃描廣播設備並發起連接,可以在單個鏈路層連接中作為主機。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM