實驗用到的工具:
藍牙從機:CC2541模塊
抓包工具:TI Sniffer + CC2540 dongle
手機工具:BLE調試工具箱 (無線技術聯盟微信公眾號關聯的藍牙測試工具)
01
—
連接請求
TI的Btool是個非常好用的PC主機小工具,其部分界面如下所示,在Discover/Connect界面,可以配置不同的連接參數,選擇掃描以及根據掃描到的廣播設備有選擇性的進行連接。多說一句whitelist,什么是whitelist?這個和微信公眾號的白名單一樣,是得到主機授權的從機設備,當選擇只掃描whitelist的設備時(前提是已經在主機上添加了whitelist設備),主機只會掃描過濾在whitelist里面的設備。
從下圖截獲的控制數據包可以看到,主機端在廣播掃描之后發出一條CONNECT_REQ的指令,附帶LL data,開啟了主從設備連接的過程的第一步。TI的工具做的比較人性化,可以從該條語句的注釋可以看到
Adv PDU Header Type的值為5,對應Spec的值是CONNECT_REQ。
在指令后面標注出發起端(主機)和從機端的Mac地址,然后是LL data。
這一條指令嚴格來說也是屬于廣播范疇,其數據格式說明可以參考上一篇文章。
展開CONNECT_REQ包,其數據包格式可分為前導,接入地址,數據包,CRC效驗,詳細規范如下:
PDU數據包分可分為兩個部分,Header部分是指令(CONNECT_REQ),payload是詳細LL data,拉出LL Data來看,如下圖所示:
下面對LL Data格式詳細說明:
AA:連接中的兩設備的接入地址,如下圖所示,
CRCInit:CRC 初始化
WinSize:主機發送第一包數據的時間窗口
Winoffset:主機發送第一包數據的偏移時間
WinSize和Winoffset是配和使用,主機在發起CONNECT_REQ開始的Winoffset+1.25ms內準備和從機建立連接,這段時間被稱為連接建立準備時間,WinSize是主機第一包數據發送的時間窗口范圍。
Interval:藍牙連接間隔時間。
Latency:連接延遲,主多次請求才喚醒從機交互一次數據。
Timeout:超時斷開連接。
ChM:跳頻表,主機根據信道情況給出一張跳頻表,約定和從機可用的信道(0-36信道),0表示該信道不可用,1表示該信道可用。
Hop:跳頻階躍,hop是一個5~16的值。
SCA:休眠時鐘校正范圍。
跳頻算法介紹:
跳頻算法用于數據連接時候,數據信道為37個,跳頻公式如下: unmappedChannel = (lastUnmappedChannel + hopIncrement) mod 37
fn+1=(fn+hop) mod 37
hop是一個5~16的值,每次調頻之后中心頻率加hop值 mod 37。因為都是正整數,這個表達式在軟件中非常容易實現,軟件中通過求余運算便能完成運算,協議規定第一次連接事件中fn=0,fn+1=(0+hop) mod 37,也就是hop信道編號。
02
—
連接事件
連接請求發出之后,開始進入連接狀態,空中數據包如下所示,由綠色部分轉變為黃色部分。
進入藍牙連接狀態,連接狀態的數據包格式如下所示,PUD數據包包含兩個部分,頭字說明和數據包,頭字說明里面有幾種類型,分別在LLID里面詳細規定,NESN和SN控制主從發送的數據包是否被正確接收。
LLID:數據包類型格式
NESN:下一個數據包序列
SN:數據包序列
NESN和SN是配合使用,他們的作用是來標識主從是否正確交互。如主從交互所示,主發心跳包或者數據時,標記NESN和SN給從機,從機在接收到主機標識的NESN和SN之后,回傳NESN和SN+1給主,主接收到和之前發送的相差1表示之前數據正確傳輸,如果主機接收到的回傳值是非(NESN和SN+1),表示數據可能在空中存在都是,此時需要重傳。
03
—
數據交互
從機發起了MTU更新:
可以發現該LL Data出現橙黃色部分,抓包工具對數據進行的解析,橙黃部分表示從機要求更新MTU的大小,然后和主機相互約束一個MTU的值,后面數據包的格式及按照新約定的MTU大小來傳輸數據。
總結
用一張圖作為總結,整個鏈路層的連接的流程圖如下所示:
所以要想連接一個藍牙設備,主設備只需要做幾個動作,自身初始化,掃描周邊設備,對特點設備發出連接請求,開始交換數據。
到此低功耗藍牙就相互連接上了,后面應用層數據交互和加密解密就要交給GAP層和GATT層,SM層來完成,我們下次再講解。
-
SMS
+關注
關注
0文章
78瀏覽量
28601 -
GAP
+關注
關注
0文章
15瀏覽量
8313
發布評論請先 登錄
相關推薦
評論