1.概述
BLE 連接過(guò)程中有三個(gè)重要的數(shù)據(jù)包:SCAN_REQ, SCAN_RSP 和 CONNECT_REQ。
SCAN_REQ: 掃描請(qǐng)求,由主設(shè)備(MASTER DEVICE)向從設(shè)備(SLAVE DEVICE)發(fā)出,目的是為了獲得從設(shè)備的響應(yīng)以得到更多的從設(shè)備
廣播數(shù)據(jù)信息(包括設(shè)備名字,或者服務(wù)UUID,及其它如廠家特定格式的信息(如硬件版本,軟件版本號(hào),設(shè)備系列號(hào)等等)
SCAN_RSP: 從設(shè)備對(duì)就主設(shè)備發(fā)起的SCAN_REQ的響應(yīng),作為廣播包的補(bǔ)充,從設(shè)備可以給主設(shè)備更多的廣播數(shù)據(jù),比如說(shuō),有些設(shè)備在廣播
包里面沒(méi)有設(shè)備名字,這個(gè)時(shí)候就可以把設(shè)備名字放在這個(gè)包里面發(fā)給主設(shè)備
CONNECT_REQ:主設(shè)備向從設(shè)備發(fā)出連接請(qǐng)求。至此連接建立完成(從設(shè)備不會(huì)響應(yīng)這個(gè)請(qǐng)求),如果從設(shè)備沒(méi)有連接上面的問(wèn)題的話,以后
主從雙方會(huì)開始相互交換有效數(shù)據(jù)(基于GAP,GATT及SMP協(xié)議)或者交換空包。
以下對(duì)這三個(gè)數(shù)據(jù)包進(jìn)行詳細(xì)解讀
2.關(guān)鍵字:Hollong BLE 偵聽儀,低功耗藍(lán)牙嗅探器, BLE 分析儀,BLE 數(shù)據(jù)抓取
Keyword: Hollong BLE Sniffer, BLE Data Analyzer,BLE Capture
3.抓取連接數(shù)據(jù)包的準(zhǔn)備工作
* 硬件:一個(gè)BLE設(shè)備(從設(shè)備)及對(duì)應(yīng)的主設(shè)備(如智能手機(jī)里面的相關(guān)應(yīng)用程序,或者通用BLE 工具軟件);
一臺(tái)HOLLONG BLE SNIFFER (Hollong BLE 偵聽儀)
* 軟件:Hollong 藍(lán)牙4.0/4.1 BLE協(xié)議監(jiān)控分析儀 軟件
下載鏈接:
http://www.viewtool.com/index.php/22-2016-07-29-02-11-32/205-hollong-4-0-4-1-ble
4. SCAN_REQ 包
1)完整包
2) 存取地址 (Access Address) 對(duì)于廣播包,這是一個(gè)固定長(zhǎng)度(4個(gè)字節(jié))及固定內(nèi)容(0x8e89bed6)的主從設(shè)備識(shí)別廣播包的存取地址。
3) 頭信息 (Header Info) 固定為2個(gè)字節(jié):分解為16個(gè)位來(lái)使用
位[0:3]:P廣播包(PDU) 類型,總共有6個(gè)類型:
PDU Type
b3b2b1b0 Packet Name
0000 ADV_IND: 可連接通用連接廣播
0001 ADV_DIRECT_IND:可連接定向連接(指定設(shè)備)廣播
0010 ADV_NONCONN_IND:不可連接通用廣播
0011 SCAN_REQ:掃描請(qǐng)求
0100 SCAN_RSP:掃描響應(yīng)
0101 CONNECT_REQ:連接請(qǐng)求
0110 ADV_SCAN_IND:可掃描通用廣播
0111-1111 Reserved
位[4:5]:保留
位[6]:RxAdd
位[7]:TxAdd
位[8:13]:廣播數(shù)據(jù)長(zhǎng)度 (最大為37 字節(jié))
位[14:15]:保留
4) 主設(shè)備地址
5)從設(shè)備地址
6)CRC
4. SCAN_RSP 包
1)存取地址
定義同上
2)頭信息
定義同上
3)從設(shè)備地址
固定6個(gè)字節(jié)的從設(shè)備地址(MAC ADDRESS)
4)響應(yīng)數(shù)據(jù)(廣播數(shù)據(jù))
格式同廣播數(shù)據(jù)格式(詳見(jiàn)文“1分鐘讀懂低功耗藍(lán)牙廣播數(shù)據(jù)”), 在這個(gè)包里面,數(shù)據(jù)為0(沒(méi)有數(shù)據(jù))
5)CRC
固定為3個(gè)字節(jié)
5. CONNECT_REQ 包
1)存取地址
固定4個(gè)字節(jié)和內(nèi)容(0x8e89bed6)的存取地址,BLE 芯片使用這個(gè)固定的地址作為廣播通道的BLE數(shù)據(jù)接收。
2)頭信息
二個(gè)字節(jié)的頭信息(解析格式同上)
3)主設(shè)備地址
4)從設(shè)備地址
5)存取地址
在此指定連接后使用的存取地址(BLE 數(shù)據(jù)通道),這個(gè)地址是由內(nèi)部指定的非確定的4個(gè)字節(jié)長(zhǎng)度的地址,不像廣播數(shù)據(jù)通道使用固定內(nèi)容的存取地址。
6)CRC INIT
初始化的CRC 值,以后被使用于數(shù)據(jù)CRC 校驗(yàn)
7)窗口時(shí)間 (Win Size)
8) 窗口偏移
9)數(shù)據(jù)間隔時(shí)間 (CONNECTION INTERVAL)
發(fā)送兩個(gè)數(shù)據(jù)包(或者空包)的間隔時(shí)間。
計(jì)算公式為:24 (0x18) * 1.25ms = 30ms, 在抓取的數(shù)據(jù)包中可以看到,每?jī)蓚(gè)包之間的間隔是30MS。 下載此數(shù)據(jù)包需要注冊(cè)。
10)時(shí)延(Latency)
11) 中斷連接最大時(shí)延(TIME OUT)
當(dāng)主從雙方有一方在大于此時(shí)間后沒(méi)有接收到任何數(shù)據(jù)包或者空包,則由連接狀態(tài)轉(zhuǎn)為非連接狀態(tài)(主設(shè)備可以重新開始
掃描, 從設(shè)備也可以重新開始廣播,具體做什么由應(yīng)用程序決定)。
計(jì)算方法: 最大時(shí)延 = TIME_OUT * 10MS, 在此為:72 (0X48) * 10 = 720 MS, 也就是說(shuō),如果雙方在0.72秒期間沒(méi)有收到任何數(shù)據(jù)包或者空包,則視為連接中斷,由連接狀態(tài)轉(zhuǎn)為非連接狀態(tài),開始做應(yīng)用程序要求做的事情。
12)跳頻通道圖(CHANNEL MAP)
這個(gè)跳頻圖是由BLE 芯片根據(jù)周圍環(huán)境中可以使用的BLE 通道而制定出來(lái),根據(jù)掃描測(cè)試的環(huán)境不同(指被占用的頻譜資源不同)而不同,當(dāng)這個(gè)圖(表)通過(guò)CONNECT_REQ 包發(fā)送給從設(shè)備后,主從雙方都會(huì)根據(jù)這個(gè)圖來(lái)同步跳頻(HOPPING),低功耗藍(lán)牙設(shè)備通過(guò)這個(gè)方法能夠有效避開擁堵的頻道,使用比較“干凈”,無(wú)(少)干擾的頻道來(lái)交換數(shù)據(jù),從而大幅提升傳輸數(shù)據(jù)的穩(wěn)定可靠性。
由于這個(gè)是在比較干凈(周圍幾乎沒(méi)有任何BLE 設(shè)備或者其它工作在2.4G頻段,類似頻道的強(qiáng)信號(hào)設(shè)備)的環(huán)境下面工作的主從設(shè)備,所以可以看出,它使用了所有頻道(除了廣播專用頻道37,38,39)作為跳頻圖。
13) HOP 及CLOCK
0xAF (10101111)
HOP: 10101
CLOCK: 111 => 對(duì)應(yīng)晶體精度 為0-20PPm
一個(gè)字節(jié)的前5個(gè)位指定HOP(跳頻)算法中需要的數(shù)據(jù)(HOPINCREMENT),另外三個(gè)位指定晶體的精度等級(jí)(可以有多少PPM的誤差)
SCA masterSCA, 三個(gè)位對(duì)應(yīng)的晶體精度等級(jí)如下: 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
同上
|