它的作用是主机的GAP,GATT,SM,通信桥梁建在Application和链路层之间,因此具有不可或缺的协议重用能力。它还具有在主机和协议栈数据交换中分段和重组数据的能力。从主机或APP发出的所有数据都被封装成L2CAPPacket。L2CAP允许更高层次的协议和APP发送和接收上层datapackets,最多可传输64KB。L2CAP还允许每个通道的流量控制和重发机制。
总结
逻辑链路层和自适应协议层
Basicl2CAPMode和蓝牙5协议栈L2CAPMode支持两种不同的工作模式LECreditBasedFlowControlMode。
从L2CAP的角度来看,所有数据包都作为完整的数据包发送到控制器和从控制器接收。这也意味着分段/重组由控制器执行,L2CAP看不见。使用分段时,较大的数据包将分成多个LL数据包,然后在对端设备的LL层进行重组。
当工作在基本模式下时,L2CAP不进行分段或重组。在LECredit基本流量控制模式下,动态通道工作可能会发生数据包的分段和重组。
这一层属于主机的内容,位于HCI层的上一层,我们可以看到以下结构1-1加强印象:
L2CAP通道
1-1BLE协议栈框架
L2CAPChannel:L2CAP通道,对端设备两个节点之间的逻辑连接,用它们的信道标识符来区分通道。SDU:不包括L2CAP帧头的服务数据单元、L2CAP和上层交换数据包。PDU:包含L2CAP帧头的协议数据单元包括L2CAP协议信息域、控制信息和上层信息数据。一个SDU可分为多个PDU进行传输。MTU:最大数据传输单元,上层应用程序可以接收的payload最大字节数,请注意,这与ATT的MTU不同。MPS:Payload最大字节数可以接收L2CAP。Credit:本蓝牙设备可接收的LE帧数。Credits取值范围为1~6553,两个设备之间采用流控制。L2CAPBasicHeader:L2CAP协议信息提前为每个PDU准备。它包括CID和长度。PSM:为了定义L2CAP信道数据的分析,协议服务复用器占用两个字节。有动态PSM和固定PSM。由SIG定义的固定PSMS,GATT可以找到动态PSMS。Fragmentation/Reconbination:分包重组,分包是将单个L2CAPPDU分解成更小的发送器发送数据段的过程。重组是控制器将片段重新组装成完整L2CAPDU的过程。根据LE数据的长度扩展特性,由控制器实现分包重组。Segmentation/Reassembly:分段是将单个L2CAPSDU分解成多个SDU段的L2CAP数据包的过程。按照与此操作相反的方式重新组装在接收侧。每一段都包装在适当的L2CAP报头中。L2CAP处理分段和重组,对上下层透明。注:SDU的最大字节等于协议栈中定义的L2CAP_SDU_SIZE。代码如下:
L2CAP术语常用
例如,GATT层的数据交互通道是0x000SMP0x00006通道。不能直接访问ATT应用程序、SMP、由于相关的Hostlayers已经使用了信号通道。上述LEsignalingchanel在L2CAP连接参数更新过程中使用,在动态通道上建立LECredit基本连接,在交换Credits上使用。 用于识别逻辑链路和本地端点的动态分配通道ID。0x0040-0xFFF是本地端点的取值范围。本地端点用于面向连接的L2CAP通道。为了在L2CAP-COC上定义自己的协议,可以通过应用程序访问和管理这些动态分配渠道。L2CAP通道是双向的,类似于套接字。有以下三个参数的动态分配通道:PSM、MTU、CID。固定PSMS由BLESIG定义,其范围为0x0010x007F。动态PSMS的范围是0x00800x00FF。PSMS可以固定在GATT服务端设备上,GATT客户端可以从GATT服务端获得PSM。
L2CAP有三种通道类型:Connection-Oriented、Connectionlessdata、L2CAPsignaling。信道标识符CID引用了L2CAP的每个端点。connectionlesdatachanels不适合蓝牙5协议栈。通道可分为固定通道和动态通道。 固定通道采用0x0001和0x003F之间的特殊L2CAP功能。每个固定通道的特点都是独立的。 下面列出了可用于协议栈和应用程序的CIDS
0x0004 | Attribute Protocol(ATT) | Sending ATT information |
0x0005 | LE Signaling Channel | Sending L2CAP commands |
0x0006 | Security Manager Protocol(SMP) | Sending Pairing/Security Information |
0x0040~0x007F | Dynamically Allocated | LE Credit Based Flow control packets |
蓝牙协议栈有两种L2CAP帧。 BasicFrame:固定通道在基本模式下使用基本帧 LEinformationFrame:低功耗信息帧用于LEcredit基本流控制模式下的动态通道。注:L2CAP处理来自主机或APP的SDU数据帧。以下是不同帧类型的帧头差异:
Basic frame | 4 | Length:2 octets CID: 2 octets |
LE information frame | 6 | Length:2 octets CID: 2 octets SDU length: 2 octets |
L2CAP的工作模式
L2CAPMTU
L2CAP帧类型
L2CAPMTU是L2CAP层可以处理的最大数据字节大小。然而,根据模式和通道类型,L2CAP使用的MTU是不同的。L2CAP_____SIG_MTUSIZE固定通道数据包的最大MTU限制是MAX_PDU_SIZE-L2CAP_HDR_SIZECOC数据包的最大字节数取决于PSM的MTU,L2CAP_SDU_SIZE限制 MTU由更高层次的协议定义为固定通道。在COC上,MTU被L2接受CAP_SDU对端设备支持的SIZE和MTU的最小值约束。
文章为作者独立观点,不代表股票交易接口观点