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

什么是原子層刻蝕

在OSI模型中哪一層負(fù)責(zé)處理加密和解密的數(shù)據(jù)
MultiGABSE-AU物理層PMA子層及PMD子層的相關(guān)機(jī)制

OSI七層模型中的數(shù)據(jù)封裝過程
OSI七層模型在網(wǎng)絡(luò)故障排查中的應(yīng)用
OSI七層模型中各層的協(xié)議 OSI七層模型的優(yōu)勢(shì)與不足
OSI七層模型的每一層功能
詳解KiCad中的層

PCM2707C是否支持Android系統(tǒng)?PCM2707C Android應(yīng)用層怎么寫?
Linux應(yīng)用層控制外設(shè)的兩種不同的方式

評(píng)論