一直搞不太清楚藍牙BLE協議,不知道LL層和L2CAP層是如何划分的,后來博士給我講了講就理解了,寫下來,做個記錄:
1. 我們知道,除了藍牙5.1新出的CTE,所有的BLE都是如下類型的包:
對於連接后的通訊包,PDU的最前面兩個字節為header,header的最前兩個bit為LLID,藍牙BLE就是通過LLID來區分LL層數據和L2CAP層數據的。
2. LL層的包如下:
其中LLID這兩個bit就是用於區分LL層數據和L2CAP層數據的。
當LLID為3時,該數據包為LL控制層數據,如下所示:
3. L2CAP層的包如下:
當LLID為2時,該數據包為L2CAP層數據包的起始包,起始包后續會有L2CAP層的長度和L2CAP層的channel ID,
當LLID為1時,該數據包為L2CAP層數據包的延續包,延續包后續沒有L2CAP層的長度和L2CAP層的channel ID,但這種情況只有當
MTU的值大於data length時才會出現這樣的包,但一般我們不這樣用。
如下圖為L2CAP層數據包格式:
4. L2CAP層的數據,根據channel ID不同,又分為三種不同的L2CAP指令,如下圖所示:
上圖可看出L2CAP包括三種指令:ATT指令,信令指令,SMP指令。
其中,
ATT指令用於傳輸應用通訊數據;
信令指令用於更新連接間隔的指令,和拒絕錯誤操作碼時使用此信令指令;如下圖:
SMP指令用於配對過程;