藍牙專題(3)——BLE協議棧(鏈路層Link Layer)*


鏈路層位於物理層之上,鏈路層和物理層一樣,都屬於BLE協議棧的controller(控制器)部分。
在我查看的文章和書籍上,都是一來就介紹鏈路層的五種狀態,這對於筆者這樣理解能力不夠又喜歡刨根問底的人來說,無疑是一種折磨,那五種狀態和鏈路層有什么關系,為什么網上各種文章還有書籍都是一來就介紹各種狀態之間的轉換?好吧,或許是因為BLE核心協議就是這樣做的,將其翻譯過來就是現在網上和書籍上的內容。這對本來就不怎么聰明的大腦無疑是雪上加霜,無法理解這些狀態和鏈路層有什么關系,為什么要在鏈路層引入那些狀態。直到我使用英文搜索問題之后,發現有如下表述:
我恍然大悟,原來鏈路層就是一個或多個狀態機,這樣就可以理解core_4.2中為什么一來就是描述鏈路層狀態。
鏈路層定義了在各種狀態下的數據包格式、時序規范和接口協議,在物理層的基礎上,提供兩個或多個設備之間,和物理層無關的邏輯傳輸通道,對鏈路層的上層屏蔽了物理層的特性,鏈路層的上層不需要再理解物理層的信息。
鏈路層的五種狀態:
• Standby State        待機態
• Advertising State    廣播態
• Scanning State       掃描態
• Initiating State        發起態
• Connection State    連接態
對於Standby狀態,有的翻譯為就緒態,有的翻譯為待機態,就我個人而言,更偏向於后者,因為待機更能准確的反映其狀態,就緒態總是會給人一種萬事俱備,只欠東風(連接)的感覺,可是Standby state是不能直接轉換成連接狀態的,所以筆者使用待機態表述Standby state。
狀態機同一時刻只能有一種狀態,鏈路層應至少具有一個支持廣播態或掃描態之一的鏈路層狀態機。
待機狀態不接收和發送任何數據包,但是任何狀態都可以轉換成待機態。通過上圖1.1可以很清楚地了解到各個狀態之間的轉換。
處於廣播狀態的鏈路層將發送廣播信道包,並可能監聽和響應由這些廣播信道包觸發的響應。廣播狀態中的設備稱為廣播者, 可以從待機狀態進入廣播狀態(各個狀態直接的轉換看figure 1.1,后面不再贅述)。
處於掃描狀態的鏈路層將偵聽來自正在播放廣播設備的廣播信道數據包,處於掃描狀態的設備稱為掃描者。掃描態有兩種子狀態,主動掃描和被動掃描。主動掃描接收了廣播報文后,對設備產生額外的興趣,想要獲取更多的信息,因而發送掃描請求給廣播設備,並且接收該設備的響應數據;被動掃描即設備僅僅簡單的偵聽那些正在廣播的設備,並接收其發送的廣播報文。被動掃描就好像你走在地鐵口,聽到的那些房產銷售廣告,僅僅是聽聽而已,你就離開了;而主動掃描則是你聽見了那些房產銷售廣告之后,你對它產生了興趣,又主動問了問該廣告的相關信息。掃描態只能和待機態進行相互轉換,開始和停止掃描是其轉換條件。
處於發起狀態的鏈路層將偵聽來自特定設備的廣播信道數據包,並響應這些數據包來啟動與設備的連接,即進入發起態之后,鏈路層監聽自己試圖連接的設備,一旦接收到該設備發送的廣播報文,則發送連接請求,並使自身進入連接態處於發起狀態的設備稱為發起者。
可以從發起狀態或廣播狀態進入連接狀態。 處於連接狀態的設備被稱為處於連接中。

連接態有兩個子角色,Master Role和Slave Role,主連接角色和從連接角色,發起連接的,由發起態進入的叫做主連接態,被動接受連接,由廣播態進入的叫做從連接態,斷開連接則進入就緒態。進入連接態之后,鏈路層可以進行連接管理和數據傳輸,主連接中的鏈路層將與從連接中的設備通信,並定義傳輸時間。

處於Master Role的設備可以和多個Slave Role分時通信;處於Slave Role的設備只能和處於Master Role的設備通信。

LL(Link Layer)的比特序采用LSB(Least Significant Bit:最低有效位)最先發送的方式,小端模式。比如一個數據參數X=3,有三個bit,其bit0=1,bit1=1,bit2=0,在空中傳輸時,先傳輸bit0,然后傳輸bit1最后傳輸bit2.

但是在core_v4.2中有以下描述:

Multi-octet fields, with the exception of the Cyclic Redundancy Check (CRC) and the Message Integrity Check (MIC), shall be transmitted with the least significant octet first.

等之后遇到CRC和MIC時,再來看它們有什么不一樣。

 

DEVICE ADDRESS(設備地址)

LL層使用設備地址識別設備,BLE的設備地址分為公共地址和隨機地址。

 

 

 

 

Public Device Address (公共設備地址

Random Device Address (隨機設備地址)
既然已經有公共地址了,為什么還需要隨機地址呢?主要原因是固定的設備地址帶來了很大安全隱患,同時,公共地址需要購買,增大了成本。顯然,隨機地址就是解決這些問題的。隨機地址又分為Static Device Address和Private Device Address兩類。
Static Device Address

Static Device Address最高兩個bit都為“1”,Random part of static address為46bits的隨機數,但是這46位不能都為1或者0。同時,在一個上電周期內,Static Device Address不允許改變,但是在下一次上電時可以選擇是否改變。

Private Device Address
Private Device Address又分為兩種:Non-resolvable private address和Resolvable private address即不可解析和可解析專用地址。
Non-resolvable private address
其中:最高兩bits為 '00';剩余的46bits是一個隨機數,不能全部為0,也不能全部為1。Non-resolvable private address會定時更新,更新的周期建議值是15分鍾。該種方式下的設備地址是動態變化的,雖然安全性得到提高,可是配對復雜性也隨之增高,該種方式不常用。
resolvable private address
resolvable private address通過一個隨機數和一個稱作identity resolving key (IRK) 的密碼生成,因此只能被擁有相同IRK的設備掃描到,可以防止被未知設備掃描和追蹤。

高位24bits是隨機數部分,其中最高兩個bits為“10”;
低位24bits是隨機數和IRK經過hash運算得到的hash值,運算的公式為hash = ah(IRK, prand),具體算法我們現在可以先不關心。

當對端BLE設備掃描到該類型的藍牙地址后,會使用保存在本機的IRK,和該地址中的prand,進行同樣的hash運算,並將運算結果和地址中的hash字段比較,相同的時候,才進行后續的操作。

NOTE:


一個BLE設備,可以使用兩種類型的地址一個BLE設備可同時具備兩種地址:Public Device Address和Random Device Address。

以上是core_4.2的Vol 6,Part B的第一小節,還有2-6小節:

這些后面根據具體應用來研究。文章標題最后有一個 (星號)* ,代表未更新完畢。


免責聲明!

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



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