1. 程式人生 > 實用技巧 >BLE(3)—— 空口資料包組成

BLE(3)—— 空口資料包組成

基於 BLE 5.1 協議 Core Spec。

BLE 在空中進行資料傳送,在 Spec 中稱之為 Air Interface packets,俗稱空口包。既然是資料包,就一定要遵循一定的資料格式,本章來分析空口資料包的最基本的組成格式。

早在 BLE 4.2 的時代,僅僅支援 1M 的 symbol rate,隨著藍芽標準的發展,BLE 5.0 不僅僅支援了 1M PHY,同時引入了 2M PHY 和 Coded PHY(500kbps 和 125kbps)。這裡分兩組:

  • Uncoded PHY:1M、2M
  • Coded PHY: 500kbps、125kbps

SIG 宣稱的 BLE 5.0 的 Rate X 2,指的就是引入了 2M PHY

Coded PHY 的資料傳送,又稱 Long Range,能夠支援更遠的資料傳送(稍後分析原因)

1、Uncoded PHY 空口包格式

什麼叫 Uncoded PHY 呢?指的就是傳送資料的時候,資料實打實的,未經過額外的編碼的。資料的格式如下所示:

• Preamble ----------------------------空口包的前導,PHY 層含義

• Access Address -------------------接入地址,用來標示接收者ID或者空中包身份

• PDU -----------------------------------protocol data unit 協議資料單元

• CRC----------------------------------- PDU 的 24 bits CRC 計算值,用於校驗資料正確性

• Constant Tone Extension --------- CTE 可選項,BLE 5.1 引入,後面會解釋

1.1、Preamble

Preamble 指的是前導的意思,他是 BLE 資料傳送中,最先傳輸的部分。

Preamble 是 1010 的序列,到底是以 1010....開始呢,還是以 0101... 開始呢?這裡主要是根據 Access Address (AA)的 LSB 來決定,AA 的 LSB 是1,則前導是 1010...,否則是 0101...

前導根據不同的 PHY 分為兩類:

1M 的Preamble

1M 的Preamble 是 8 bits 的,當 AA 的 LSB 是 1 的時候 Preamble 是:

當 AA 的 LSB 是 0 的時候 Preamble 是:

2M 的Preamble

2M 的Preamble 是 16 bits 的

當 AA 的 LSB 是 1 的時候 Preamble 是:

當 AA 的 LSB 是 0 的時候 Preamble 是:

1.2、Access Address

Access Address 成為接入地址(與裝置的 48 bits 地址不一樣)。用來標示接收者ID或者空中包身份

根據 Access Address 的不同,又區分兩種 Packet 型別:廣播包和資料包:

  • 廣播包Access Address固定為0x8E89BED6,廣播包只能在廣播通道(channel)上傳輸,即只能在37/38/39通道上傳輸(注:從藍芽5.0開始廣播包可以在其它通道上傳輸)。廣播包傳送給附近所有的observer(掃描者)。
  • 資料包Access Address為一個32bit的隨機值,由Initiator生成。資料包,其實是資料通道上的空中包的簡稱,資料包只在資料通道上傳輸,即除37/38/39之外的其餘37通道(BLE總共佔用40個通道)。每建立一次連線,重新生成一次Access address。資料包是給連線通訊使用的,即用於master和slave之間通訊的。

AA 又稱同步欄位,在 Connection 建立的時候,雙方進行資料傳送,如果未發現 AA 或者錯誤,則稱為 Sync Error。

AA 對於 Connection ,是隨機生成的 32 bits 數,但是要滿足一些關係:

• It shall not be the Access Address for any existing Link Layer connection onthis device.
• It shall not be the Access Address for any enabled periodic advertising train.
• It shall have no more than six consecutive zeros or ones.
• It shall not be the advertising channel packets’ Access Address.
• It shall not be a sequence that differs from the advertising physical channelpackets’ Access Address by only one bit.
• It shall not have all four octets equal.
• It shall have no more than 24 transitions.
• It shall have a minimum of two transitions in the most significant six bits.

1.3、PDU

PDU(protocol data unit,協議資料單元)是 BLE 資料傳送的基本單元,在不同的狀態下 PDU 的組成也不盡相同,後面會描述不同狀態下的 PDU 的組成,這裡暫時先有一個概念即可:PDU 是資料組成的單元。

1.4、CRC

所有的資料傳送,都有資料正確性的校驗,BLE 也一樣,BLE 使用了 24bits 的CRC 來進行資料完整的說明。CRC 跟在 PDU 後, 計算包含 PDU 域的 CRC 24 的資料。

1.5、Constant Tone Extension

這個域是 BLE 5.1 新增的,最主要的功能是 AoA/AoD (藍芽定位)的應用,是一個可選的資料項,後面再分析AoA/AoD (藍芽定位)的時候,在詳細分析。

2、Coded PHY 空口包格式

BLE 5.0 以後,便支援了 Long Range,支援 Long Range 的方式呢,主要是引入了 Coded PHY。Coded PHY 分為兩種:

500kbps

125kbps

所謂 Coded PHY呢,就是將資料傳送的時候,不光是 raw data,而是加上了一個 FEC 向前糾錯編碼,使得在降低傳送速率的前提下,對資料進行編碼(FEC),達到資料低錯的目的。

它的包格式為:

分為了兩種:

S=2 -------- 500kbps

S=8 -------- 125kbps

每個域的長度和時間:

說白了,就是以犧牲速度(低速)來換資料準確傳送(通過 FEC 資料編碼)。有興趣的同學可以自行參考 Core Spec 5.1 中的 FEC 章節,看看這幾部分是如何計算的。