1.BLE的鏈路層是如何解決不同BLE節點的沖突問題
1.1 廣播時間的定義
- 在節點進入advertising state時,它會廣播advertising events,協議中規定每個event的時間為:
T_advEvent = advInterval +advDelay
- advInterval:是廣播的間隔設置,單位為0.625ms,取值范圍在20ms與10.24s之間。如果事件類型是一個可掃描的非連接事件,或者是一個非連接的非定向事件,它的值不能小於100ms;如果是可連接的非定向事件,它的值可以是20ms或更大。
- advDelay的值是一個偽隨機值,范圍是0~10ms,它由廣播事件產生。
- 從上面的公式可以看出,如果advInterval取值較大,將會降低出現沖突的概率,也降低了節點的功耗,但是,同時也會加大連接建立的時延。反之,如果advInterval取值較小,將會增加沖突概率和節點功耗,好處就是降低連接建立時延。
- 隨機數advDelay可以在一定程度上降低advInterval相同的兩個節點所發送的廣播包的沖突概率
1.2 BLE鏈路層信道選擇的算法流程
一個節點發送完廣播消息之后,如果接收到廣播消息的節點希望建立連接。如何選擇並確定數據信道
(1)首先,Master node在收到Slave node的廣播消息之后,會發送CONNECT_REQPDU,其中,攜帶channel map用於通知slave node哪些信道可以用於數據連接,哪些信道不可以用於數據連接; (詳見本章節 1.3)
(2) 節點根據如下公式首先計算unmappedChannel:
unmappedChannel =(lastUnmappedChannel + hopIncrement) mod 37
其中,如果本次發送的event是數據連接的第一個connection event,上式中的lastUnmappedChannel為0;
hopIncrement的值在CONNECT_REQ PDU中指定,它是一個跳信道間隔值,影響兩次數據傳輸信道的間隔。
當一個連接event結束時,unmappedChannel值被賦予lastUnmappedChannel。
本文圖片或內容摘自網絡,本人只是做了總結歸納。如有侵權請聯系我。