低功耗藍牙學習筆記-L2CAP

注:本篇博客摘抄《BLE4.0 低功耗藍牙協議總結 作者:劉權》的部分內容,該文檔是學習ble很好的文檔,推薦!

L2CAP的全稱是邏輯鏈路控制和適配協議。L2CAP是一個複用層,可以讓低功耗藍牙複用三條不同的信道。它也支持數據的分隔和重組功能,使得較大的報文可以在底層無線電中傳輸。

 

L2CAP信道

L2CAP有個很簡單的概念,信道。信道是指數據包序列,連接兩個設備上的一對服務。在兩個設備允許同時啓用多條信道。低功耗藍牙只支持固定信道。固定信道指的是兩個設備一建立連接就已經存在的、沒有任何配置參數的信道。

這裏整個低功耗藍牙中第三次出現信道,但這裏的信道是針對主機而言。低功耗藍牙中主機抽象出屬性協議、安全管理等模塊,當控制器接受到來自對端設備的數據而發送給主機時,主機需要分辯這些數據給到誰,有可能給到屬性協議、安全管理或者L2CAP層自身的低功耗藍牙信令。這就是低功耗藍牙LACAP存在的含義。

低功耗藍牙一共使用了3條信道:

信道0x0004,用於屬性協議

信道0x0005,用於低功耗藍牙信令通道

信道0x0006,用於安全管理

 

L2CAP數據包結構

在所有低功耗藍牙信道上,信息載荷均始於23字節的最大傳輸單元(MTU)。在鏈路層規定數據報文加密/未加密報文不超過27字節的限制,L2CAP頭部佔了4字節,所以L2CAP Payload信息載荷只有23字節的最大長度。

 

低功耗藍牙信令通道

低功耗藍牙信令通道用於主機層級的信令,每個低功耗藍牙信令信道的數據包均含有一操作碼,隨後爲各種參數。

低功耗藍牙信令通道支持的命令操作碼如下:

  • 命令拒絕

  • 連接參數更新請求

  • 連接參數更新響應

關於 payload信息載荷詳細說明如下:

Code:操作碼,對於 BLE 來說其實只有 3 個可用的命令

Identifier: 標識符, 這個的作用是確保應答包對應哪個請求包,發送一個請求包,接收到應答包中的 identity 值如果和請求包中的一致,說明是對這個請求包的應答。 identity 的值發送每個請求命令都是不同的值,而對方設備的應答信息中的 ID 和發送請求中的ID 是一樣的,確保對其應答。 0x00 是一個非法的值,不能用。 

Length:長度,這個長度表示的是後面 data 中的字節數。 

 Data:數據,每個操作碼都有固定格式的數據。

命令拒絕

命令拒絕操作碼,用於對接收到的不支持的數據包的迴應。這個命令是沿用經典藍牙的,它的數據格式如下:

Reason 佔用兩個字節,對於 BLE 只有 2 個值是可用的,如下:

Data:數據長度爲 0 或者大於 0 字節的數,主要是對原因進行描述補充, 而“命令不理解”是沒有數據需要進行說明的。只有
“ Signaling MTU exceeded”有兩個字節的數據去應答能接收的最大的字節數是多少,對於 BLE 就是 MTU=23bytes。

連接參數更新請求和響應

主機通過 LL 層就可實現連接參數更新,那麼從機也有更新連接參數的權利, 通過這個命令即可。而且這個命令只能有從機發送給主機,如果從機接收到這個命令後,會回覆命令拒絕。

裏面的 4 個參數都是給的範圍,也就是說從機不能最終決定具體連接參數值,從機只能給主機提 出 自 己 的 想 法 , 如 果 主 機 同 意 更 新 , 那 麼 需 要 主 機 發 送“ LL_CONNECTION_UPDATE_REQ”這個命令詳細連接參數給從機,然後從機等到“瞬時”到後進行參數更新。

如果僅僅是從對等層來說, 當從機發送 Connection Parameter Update request 命令,主機需要發送Connection Parameter Update response 這個命令去迴應:

Result 爲 2 個字節的結果代碼。 當主機同意修改連接參數的時候, Result 爲 0x0000, 也就是接受 參數 更 新 的 建 議 。 當 主 機 不 同 意 修 改 連 接 參 數 的 時 候 ,Result=0x0001,拒絕參數更新 。

參數更新過程:

1. 從機向主機發送連接參數更新請求(想法)

2. 如 果 主 機 同 意 更 新 , 那 麼 需 要 主 機 發 送“LL_CONNECTION_UPDATE_REQ”這個命令詳細連接參數給從機然後從機等到“瞬時”到後進行參數更新。

3. 主機 L2CAP 層連接參數應答

採集從機L2CAP層連接參數更新請求:

採集主機LL層連接參數更新請求:

採集主機L2CAP層連接參數應答:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章