版權聲明:本文為博主原創文章,轉載請注明作者和出處。 作者:強光手電[艾克姆科技-無線事業部]
1. 掃描請求和掃描響應
廣播包含掃描請求SCAN_REQ和掃描響應SCAN_RSP。
- 掃描請求:由鏈路層處於掃描態的設備發送,鏈路層處於廣播態的設備接收。
- 掃描響應:由鏈路層處於廣播態的設備發送,鏈路層處於掃描態的設備接收。
處於掃描態的設備可以接收廣播信道的報文,通過掃描可以偵聽哪些設備正在廣播。掃描分為主動掃描和被動掃描。主動掃描發送掃描請求給處於廣播態的設備,並通過處於廣播態的設備返回的掃描響應獲取額外的數據。而被動掃描僅僅接收廣播報文,不會發送掃描請求。
掃描中有兩個重要的時間參數需要注意:
- 掃描窗口(scan window):一次掃描進行的時間寬度。
- 掃描間隔(scan interval):兩個連續的掃描窗口的起始時間之間的時間差,包括掃描休息的時間和掃描進行的時間。
下圖說明了掃描窗口和掃描間隔的關系和要求。
圖1:掃描窗口和掃描間隔
1.1. 掃描請求
掃描請求PDU載荷如下圖所示,由ScanA(掃描設備地址)和AdvA組成(廣播設備地址),ScanA是掃描設備的公共或隨機地址(由TxAdd確定),AdvA是廣播設備的公共或隨機地址(由RxAdd確定)。
圖2:掃描請求PDU載荷
廣播報文的報頭中的TxAdd指示了掃描設備使用的是公共地址(Public Address)還是隨機地址(Random Address)。
- TxAdd = 0:公共地址。
- TxAdd = 1:隨機地址。
RxAdd指示了廣播設備使用的是公共地址(Public Address)還是隨機地址(Random Address)。
- RxAdd = 0:公共地址。
- RxAdd = 1:隨機地址。
1.2. 掃描響應
掃描響應PDU載荷如下圖所示,由AdvA(廣播設備地址)和ScanRspData組成(掃描響應數據),AdvA是廣播設備的公共或隨機地址(由TxAdd確定)。
圖3:掃描響應PDU載荷
廣播報文的報頭中的TxAdd指示了廣播設備使用的是公共地址(Public Address)還是隨機地址(Random Address)。
- TxAdd = 0:公共地址。
- TxAdd = 1:隨機地址。
廣播報文的長度域指示了載荷的字節數(AdvA和ScanRspData)。
2. SCAN_REQ和SCAN_RSP解析
2.1. 捕獲SCAN_REQ
按照《藍牙4.0BLE抓包(一)》中的描述進行抓包,下面是我們捕獲一個心率計的SCAN_REQ包。
圖4:捕獲的SCAN_REQ包
2.2. 分析SCAN_REQ
為了方便分析,我們先取出這個SCAN_REQ包實際傳輸的數據,如圖3中所示。心率計完整的廣播報文如下:
D6 BE 89 8E 83 0C 7F 0F 72 DD DF 68 DA B5 E9 D2 CC F3 BD BF 27
在分析數據之前,再次說明:廣播包含掃描請求和掃描響應,所以掃描請求和掃描響應得包格式遵循廣播包的格式。
分析報文時,需要注意一下報文各個域的字節序。
2.1.1 接入地址
D6 BE 89 8E:接入地址,對廣播來說是固定值。注意一下這里的字節序,接入地址傳輸時是低字節在前的。
2.1.2 PDU
1). 83:廣播報文報頭。
- bit0~bit3是0011,說明廣播類型是SCAN_REQ,即掃描請求。
- bit7(RxAdd)是1:說明廣播設備使用的是隨機地址。
- bit6(TxAdd)是0:說明掃描設備使用的是公共地址。
2). 0C:長度,表示SCAN_REQ報文的長度是12個字節。
3). 7F 0F 72 DD DF 68:掃描設備的公共地址(報頭里的TxAdd指示了這個地址是公共地址)。這里使用的實驗設備是[艾克姆科技]的EN-nRF51DK開發板和小米3手機,掃描設備是小米3手機,在圖3中可以看到該公共地址對應的是Xiao_mico_72。
4). DA B5 E9 D2 CC F3:廣播設備的地址(報頭里的RxAdd指示了這個地址是隨機地址)。
2.1.3 校驗
BD BF 27:24字節CRC校驗。
2.3. 捕獲SCAN_RSP
按照《藍牙4.0BLE抓包(一)》中的描述進行抓包,捕獲一個心率計的SCAN_REQ包。
圖5:捕獲的SCAN_RSP包
2.4. 分析SCAN_RSP
同樣,在這里我們先取出SCAN_REQ包的數據,便於分析。
D6 BE 89 8E 44 06 DA B5 E9 D2 CC F3 61 6A 0F
2.4.1 接入地址
D6 BE 89 8E:接入地址,對廣播來說是固定值。注意一下這里的字節序,接入地址傳輸時是低字節在前的。
2.4.2 PDU
1). 44:廣播報文報頭。
- bit0~bit3是0100,說明廣播類型是SCAN_RSP,即掃描響應。
- bit6(TxAdd)是1:說明廣播設備使用的是隨機地址。
2). 06:長度,表示SCAN_ RSP報文的長度是6個字節。
3). DA B5 E9 D2 CC F3:廣播設備的地址(報頭里的RxAdd指示了這個地址是隨機地址)。
2.4.3 校驗
61 6A 0F:24字節CRC校驗。