不太懂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?不急,一文介绍相关术语,并用面向连接的通道示例


分享到:


相關文章: