不太懂L2CAP?不急,一文介紹相關術語,並用面向連接的通道示例

邏輯鏈路控制和適配層協議(L2CAP)

L2CAP運行在HCI之上的Host,實現Host的更高層(GAP,GATT,APP)和低層協議棧傳輸數據。該層負責在Host和協議棧之間把交換的數據進行分割(segmentation)和重組(reassembly )以提供協議的多路處理能力。L2CAP允許更高級別的協議和應用程序發送和接收高達64KB(實際受限於藍牙設備實際內存)長的上層數據包(L2CAP服務數據單元,SDU)。

不太懂L2CAP?不急,一文介紹相關術語,並用面向連接的通道示例

注意:可能還是不太明白這裡的L2CAP,簡單理解就是對我們上層議數據多路處理,同時提供數據緩存能力,以及重新拆包組包能力。

L2CAP術語

不太懂L2CAP?不急,一文介紹相關術語,並用面向連接的通道示例

最大傳輸單位(MTU)

藍牙低功耗協議棧支持在鏈路層將L2CAP PDU的分割(segmentation)和重組(reassembly )。這種分段允許L2CAP和構建在L2CAP之上的和更高級協議(如屬性協議(ATT))使用更大的有效負載小,從而減少與較大數據傳輸不斷拆分開銷。當使用分片時,較大的數據包直接被分割成多個鏈路層數據包,並由對等設備的鏈路層重新組合。

不太懂L2CAP?不急,一文介紹相關術語,並用面向連接的通道示例

L2CAP PDU的大小決定了 屬性協議最大傳輸單元(Attribute Protocol Maximum Transmission Unit (|ATT_MTU|))。默認情況下,LE設備L2CAP PDU的大小為27字節,這決定了在單個連接事件數據包可以傳輸的LE數據包的最大大小。在這種情況下,L2CAP協議頭為4字節,ATT_MTU默認大小為23。

注意:上圖所示的|L2CAP ATT_MTU_SIZE|支持最大長度251的配置,但是 受限於 BLE4.0/4.1設備硬件 LL PDU 大小 27字節,其實L2CAP幫助我們在Host層進行分割和重組。Controller 依然按照最大長度27進行收發。升級的CC2640R2F BLE4.2/5.0LE Data Length Extension直接使能 LL PDU的251字節,實現了硬件上提高數據吞吐量。

L2CAP通道

L2CAP基於信道。L2CAP信道的每個端點由信道標識符(CID)標識。有關L2CAP信道標識符的更多詳細信息,請參閱藍牙核心規範版本5.0的“信道標識符”部分([第3卷,第A部分,第2.1節))。信道可分為固定和動態信道。例如,通過GATT協議交換的數據使用信道0x0004。動態分配的CID以標識邏輯鏈路和本地端點。本地端點必須在0x0040到0xFFFF之間。該端點用於以下部分中描述的面向連接的L2CAP通道。

L2CAP面向連接的通道(CoC)示例

藍牙低功耗協議棧SDK提供API來創建L2CAP CoC通道,以在支持此功能的兩個藍牙低功耗設備之間雙向傳輸數據。該功能默認在協議棧中啟用。下圖顯示了一個簡單的連接,使用L2CAP面向連接的通道基於LE信用流量控制模式讓數據在主機和從機之間交換。

不太懂L2CAP?不急,一文介紹相關術語,並用面向連接的通道示例


分享到:


相關文章: