對於無線通信,數據是在某一頻率上傳輸的,BLE采用頻率是2.4GHz,頻段范圍是2.4000 GHz - 2.4835GHz,在這個范圍內,又為40個通道,其中37,38,39通道是廣播通道。其余37個通道是數據通道,如下圖所示:
從圖中可以看到,40個通道並不是線性遞增分布的,3個廣播通道是分散的,BLE數據傳輸過程中采用跳頻技術,而跳頻的計算要就要考慮跳過廣播通道,3個廣播分散的另一個好處就是有利於避開干擾。
如下圖所示,廣播通道避開了部分802.11WIFI信道,其仍然有9個數據通道和802.11不重合。
2. BLE設備之間交互的數據
在BLE設備建立連接之前,他們之間可以通過廣播通道上(37,38,39 channel)交互數據,例如發送廣播,掃描以及掃描回應,在建立連接之后,BLE設備之間在數據通道上交互數據。
BLE的數據可以概括為廣播通道上傳輸的數據和數據通道上傳輸的數據:
-
廣播通道PDU:在廣播通道上傳送的數據。
-
數據通道PDU:在數據通道上傳送的數據。
3. BLE數據包結構
BLE規范中只有一個固定的包結構:
每一個包都有四個部分組成:
-
1-2字節的前導碼preamble
-
4個字節的接入地址Access Address,
-
2-257個字節數據包PDU,
-
3個字節的PDU校驗碼 CRC
Preamble:用於頻率的同步,時間估計以及自動增益控制(AGC)等,對於廣播通道的數據,前導碼為:0xAA,對於數據通道,前導碼為0xAA 或者0x55,當接入地址的最低位是1時,前導碼是0x55,否則為0xAA.
當是1M PHY時,preamble是一個字節;
當是2M PHY時,preamble是兩個字節;
接入地址(Access Address):對於廣播通道的數據,接入地址定義為0x8E89BED6,而對於數據通道的接入地址,每次設備建立連接時都不同,具體需要滿足一定的規則,可以參考Version 4.2 [Vol 6, Part B] 2.1。接入地址和藍牙地址是兩個不同的概念,接入地址是為了同步用的,真正建立連接時使用的地址才是藍牙地址。 PDU: 分為兩類: 廣播類型PDU (在廣播通道上傳送的PDU) 和數據類型PDU (在數據通道上傳輸的PDU) CRC: 是一個針對PDU校驗的24位數據,CRC的算法定義可以參考PACKET FORMAT。4. BLE的PDU分類
BLE的PDU分為兩類,廣播類型PDU和數據類型PDU,結構如下:
PDU中前兩個字節的是header,通過header的內容,就可展開PDU類型,分析具體的payload,在后面的章節中逐漸展開,例如,廣播通道PDU進一步展開:
廣播通道上的PDU數據總共有7個類型,分別為4 Advertising + 2 Scanning +1 Connect-request。
以此類推,就能分解出BLE所有的包。
我們先看看一個大的BLE PDU展開圖:
進一步的,要分析廣播通道上的PDU,先分析這個包屬於哪一類PDU,在找到該類型的PDU數據結構,進而解析具體含義。