天天看點

BLE(7)—— 發起态資料包組成( Initiating Packets PDUs)1、CONNECT_IND2、AUX_CONNECT_REQ3、AUX_CONNECT_RSP4、總結

基于 BLE 5.1 協定 Core Spec。

目錄

1、CONNECT_IND

1.1、LLData

2、AUX_CONNECT_REQ

3、AUX_CONNECT_RSP

4、總結

發起态,是針對連接配接的。也就是這樣一個應用流程:首先呢,你開啟一個 Scan,讓裝置處于掃描狀态,這個時候,掃描到一個你想要的 Advertising,然後關閉 Scan(當然,也可以不關),這個時候,你知道了這個 Advertising 的位址了,如果你想和這個裝置進行連接配接,則需要讓裝置進入發起态,與這個 Advertising 進行一組互動,一旦互動成功,則雙方進入連接配接态。

與 Scan 類似,Init 狀态也分為了針對 Legacy 的和 Extended 的,一共有 3 中包:

• CONNECT_IND

• AUX_CONNECT_REQ

• AUX_CONNECT_RSP

注:這裡我們隻讨論 Payload 域,發起态的總體資料包組成也是和廣播态一緻,也是分為 Preamble + AA + PDU + CRC 的組成,而 PDU 的 Header 域的含義與 Advertising 含義一緻,參考 《廣播态資料包組成》

BLE(7)—— 發起态資料包組成( Initiating Packets PDUs)1、CONNECT_IND2、AUX_CONNECT_REQ3、AUX_CONNECT_RSP4、總結

1、CONNECT_IND

這個是針對 Legacy 的連結建立互動。互動過程是,本機進入發起态(Initiating state),一旦在 Primary Advertising Physical Channel 上再次接收到期望連接配接的裝置發來的可連接配接 Advertising,則立馬回複 CONNECT_IND,本機立即進入連接配接态,成為 Master。

BLE(7)—— 發起态資料包組成( Initiating Packets PDUs)1、CONNECT_IND2、AUX_CONNECT_REQ3、AUX_CONNECT_RSP4、總結

InitA:指的是本機發起态的位址,也就是本機位址

AdvA:指的是對端 Advertising 的位址

LLData :詳見下面分析

1.1、LLData

連接配接建立,是一件大事,需要互動的資訊非常之多,基本上全部包含在 CONNECT_IND 的 LLData 中:

BLE(7)—— 發起态資料包組成( Initiating Packets PDUs)1、CONNECT_IND2、AUX_CONNECT_REQ3、AUX_CONNECT_RSP4、總結

LLData 包含資訊非常豐富,我們逐個分析:

AA:這個指的是 Access Address,連接配接建立的接入位址,由 Master 生成,是一個随機數

CRCInit: CRC 計算的初始值

WinSize:這個應用于計算  transmitWindowSize ,這個  transmitWindowSize = WinSize * 1.25 ms.。在建立連接配接初期,需要計算第一個包互動的錨點,在時序分析的時候,會通過圖解的方式來展示這個玩意的應用

WinOffset:這個應用于計算   transmitWindowOffset , transmitWindowOffset = WinOffset * 1.25 ms。和上面一個一樣,計算第一個包的錨點。

Interval:連接配接間隔,每隔這個時間,來一次 Connection Event 互動。connInterval = Interval * 1.25 ms.

Latency:連接配接的 Latency,代表 Slave 并不是每個 connInterval 都需要回複包,而是可以間隔 Latency 個回複也可以。

Timeout: 也稱 TO,用于表示超過這麼長時間沒有互動,就認為連接配接斷開,connSupervisionTimeout = Timeout * 10 ms. 

ChM:全稱是 Channel Map,5 個位元組,表示了 40 個 bits 的 Bitmap(其實隻有37個有用,因為 37、38、39隻用于 Advertising 相關互動,不用于 Connection),告訴對方,我們在哪些頻道上進行資料發送。對應頻道為 1 代表有效,反之無效,不用。

Hop:跳頻參數,代表了  hopIncrement ,因為連接配接的穩定性,需要不斷的跳頻後進行資料互動,那麼下一次跳頻的地點在哪個頻道呢,事實上,并不是順序的使用頻率(1、2、3、4....),之是以叫跳頻,其實是按照固定的一套跳頻算法(後面章節會詳細講)雙方同時跳躍,這個  hopIncrement  就是跳頻計算算法的一個輸入參數。

SCA:代表了 Master 的時鐘精度,機關是 ppm,即百萬分之一。

BLE(7)—— 發起态資料包組成( Initiating Packets PDUs)1、CONNECT_IND2、AUX_CONNECT_REQ3、AUX_CONNECT_RSP4、總結

2、AUX_CONNECT_REQ

AUX_CONNECT_REQ 和 CONNECT_IND 的包組成完全一緻,差別是,AUX_CONNECT_REQ 針對于 Extended 的,其實就是 Secondary Advertising Physical Channel 上的互動,不在多說。

3、AUX_CONNECT_RSP

與 Legacy 不一樣的是,Extended 上建立連接配接上,還多了一個步驟。

Legacy 的是 Initiating 端直接發送 CONNECT_IND ,然後其進入 Connection 狀态,其并不知道對端是否收到了這個 CONNECT_IND 。

Extended 在發送 AUX_CONNECT_REQ 後,還等待 Advertising 端回複一個 AUX_CONNECT_RSP 包,雙方握手完成,正式進入 Connection 狀态:

BLE(7)—— 發起态資料包組成( Initiating Packets PDUs)1、CONNECT_IND2、AUX_CONNECT_REQ3、AUX_CONNECT_RSP4、總結

閱讀了幾個 Common Extended Advertising Payload Format ,這個肯定不在話下,隻攜帶了 AdvA 和 TargetA,進行了一個簡單的握手。

4、總結

看得出來,與針對 Scanning 類似,Initiating 的幾個包,分為了針對 Legacy 和 Extended 的,REQ 的含義和包體都幾乎一緻。連接配接稍微複雜些,因為有很多參數需要确定,以保證連接配接的可靠性。

BLE