一分鍾讀懂低功耗藍牙(BLE)連接數據包


一分鍾讀懂低功耗藍牙(BLE)連接數據包

1.概述

BLE 連接過程中有三個重要的數據包:SCAN_REQ, SCAN_RSP 和 CONNECT_REQ。

SCAN_REQ: 掃描請求,由主設備(MASTER DEVICE)向從設備(SLAVE DEVICE)發出,目的是為了獲得從設備的響應以得到更多的從設備

廣播數據信息(包括設備名字,或者服務UUID,及其它如廠家特定格式的信息(如硬件版本,軟件版本號,設備系列號等等)

SCAN_RSP:  從設備對就主設備發起的SCAN_REQ的響應,作為廣播包的補充,從設備可以給主設備更多的廣播數據,比如說,有些設備在廣播

包里面沒有設備名字,這個時候就可以把設備名字放在這個包里面發給主設備

CONNECT_REQ:主設備向從設備發出連接請求。至此連接建立完成(從設備不會響應這個請求),如果從設備沒有連接上面的問題的話,以后

主從雙方會開始相互交換有效數據(基於GAP,GATT及SMP協議)或者交換空包。

以下對這三個數據包進行詳細解讀

2.關鍵字:Hollong BLE 偵聽儀,低功耗藍牙嗅探器, BLE 分析儀,BLE 數據抓取

Keyword: Hollong BLE Sniffer, BLE Data Analyzer,BLE Capture

3.抓取連接數據包的准備工作

* 硬件:一個BLE設備(從設備)及對應的主設備(如智能手機里面的相關應用程序,或者通用BLE 工具軟件);

一台HOLLONG BLE SNIFFER (Hollong BLE 偵聽儀)

* 軟件:Hollong 藍牙4.0/4.1 BLE協議監控分析儀 軟件

下載鏈接:

http://www.viewtool.com/index.ph ... hollong-4-0-4-1-ble

4.SCAN_REQ 包

1)完整包

 

 

 

 

 

 

2) 存取地址 (Access Address)   對於廣播包,這是一個固定長度(4個字節)及固定內容(0x8e89bed6)的主從設備識別廣播包的存取地址。

 

 

 

 

 

 

3)  頭信息 (Header Info)   固定為2個字節:分解為16個位來使用

位[0:3]:P廣播包(PDU) 類型,總共有6個類型:

PDU Type

b3b2b1b0 Packet Name

0000 ADV_IND: 可連接通用連接廣播

0001 ADV_DIRECT_IND:可連接定向連接(指定設備)廣播

0010 ADV_NONCONN_IND:不可連接通用廣播

0011 SCAN_REQ:掃描請求

0100 SCAN_RSP:掃描響應

0101 CONNECT_REQ:連接請求

0110 ADV_SCAN_IND:可掃描通用廣播

0111-1111 Reserved

位[4:5]:保留

位[6]:RxAdd

位[7]:TxAdd

位[8:13]:廣播數據長度 (最大為37 字節)

位[14:15]:保留

 

 

 

 

 

 

 

4) 主設備地址

 

 

 

 

 

 

 

5)從設備地址

 

 

 

 

 

 

 

6)CRC

 

 

 

 

 

 

 

4.SCAN_RSP 包

1)存取地址

定義同上

 

 

 

 

 

 

 

2)頭信息

定義同上

 

 

 

 

 

 

 

3)從設備地址

固定6個字節的從設備地址(MAC ADDRESS)

 

 

 

 

 

 

 

4)響應數據(廣播數據)

格式同廣播數據格式(詳見文“1分鍾讀懂低功耗藍牙廣播數據”), 在這個包里面,數據為0(沒有數據)

 

 

 

 

 

 

 

5)CRC

固定為3個字節

 

 

 

 

 

 

 

5. CONNECT_REQ 包

1)存取地址

固定4個字節和內容(0x8e89bed6)的存取地址,BLE 芯片使用這個固定的地址作為廣播通道的BLE數據接收。

 

 

 

 

 

 

 

 

2)頭信息

二個字節的頭信息(解析格式同上)

 

 

 

 

 

 

 

 

3)主設備地址

 

 

 

 

 

 

 

4)從設備地址

 

 

 

 

 

 

 

5)存取地址

在此指定連接后使用的存取地址(BLE 數據通道),這個地址是由內部指定的非確定的4個字節長度的地址,不像廣播數據通道使用固定內容的存取地址。

 

 

 

 

 

 

 

6)CRC INIT

初始化的CRC 值,以后被使用於數據CRC 校驗

 

 

 

 

 

 

 

7)窗口時間 (Win Size)

 

 

 

 

 

 

 

8) 窗口偏移

 

 

 

 

 

 

 

9)數據間隔時間 (CONNECTION INTERVAL)

發送兩個數據包(或者空包)的間隔時間。

計算公式為:24 (0x18) * 1.25ms = 30ms, 在抓取的數據包中可以看到,每兩個包之間的間隔是30MS。 下載此數據包需要注冊。

 

 

 

 

 

 

 

10)時延(Latency)

 

 

 

 

 

 

 

11) 中斷連接最大時延(TIME OUT)

當主從雙方有一方在大於此時間后沒有接收到任何數據包或者空包,則由連接狀態轉為非連接狀態(主設備可以重新開始

掃描, 從設備也可以重新開始廣播,具體做什么由應用程序決定)。

計算方法: 最大時延 = TIME_OUT * 10MS, 在此為:72 (0X48) * 10 = 720 MS, 也就是說,如果雙方在0.72秒期間沒有收到任何數據包或者空包,則視為連接中斷,由連接狀態轉為非連接狀態,開始做應用程序要求做的事情。

 

 

 

 

 

 

 

12)跳頻通道圖(CHANNEL MAP)

這個跳頻圖是由BLE 芯片根據周圍環境中可以使用的BLE 通道而制定出來,根據掃描測試的環境不同(指被占用的頻譜資源不同)而不同,當這個圖(表)通過CONNECT_REQ 包發送給從設備后,主從雙方都會根據這個圖來同步跳頻(HOPPING),低功耗藍牙設備通過這個方法能夠有效避開擁堵的頻道,使用比較“干凈”,無(少)干擾的頻道來交換數據,從而大幅提升傳輸數據的穩定可靠性。

 

 

 

 

 

 

由於這個是在比較干凈(周圍幾乎沒有任何BLE 設備或者其它工作在2.4G頻段,類似頻道的強信號設備)的環境下面工作的主從設備,所以可以看出,它使用了所有頻道(除了廣播專用頻道37,38,39)作為跳頻圖。

13) HOP 及CLOCK

0xAF (10101111)

HOP: 10101

CLOCK: 111 => 對應晶體精度 為0-20PPm

一個字節的前5個位指定HOP(跳頻)算法中需要的數據(HOPINCREMENT),另外三個位指定晶體的精度等級(可以有多少PPM的誤差)

SCA masterSCA, 三個位對應的晶體精度等級如下:       000: 251 ppm to 500 ppm

001: 151 ppm to 250 ppm

010: 101 ppm to 150 ppm

011: 76 ppm to 100 ppm

100: 51 ppm to 75 ppm

101: 31 ppm to 50 ppm

110: 21 ppm to 30 ppm

111: 0 ppm to 20 ppm

 

 

 

 

 

 

14)CRC

同上

Core_V4.0_LE.pdf(818.21 KB, 下載次數: 19)

em9304 fineme 071117.zip

原文鏈接:

http://www.viewtool.com/bbs/foru ... e=1&extra=#pid71204


免責聲明!

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



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