注:文章基于蓝牙6.0
协议栈核心规范文档,由
SIG规定,原文档可
点此进入查看
目录
一、L2CAP介绍
二、L2CAP位置
三、空口包结构
未编码PHY空口包
编码PHY空口包
编码未编码Phy说明编辑
L2CAP Header
B帧(Basic Frame)
K帧(Credit-Based Frame)
C帧(Control Frame)编辑
分段和重组
一、L2CAP介绍
蓝牙低功耗(BLE)的L2CAP层是协议栈核心逻辑链路控制层,位于ATT/GATT等上层协议与HCI/LL控制层之间,具有以下核心功能:
协议复用:通过CID(通道标识符)区分不同服务,BLE固定通道CID 0x0004用于ATT协议,CID 0x0005用于LE信号通道
分段重组(SAR) :将最大64KB的SDU分割为适合空口传输的PDU,重组时通过PDU长度字段校验完整性
信用流控制:LE特有机制,通过初始信用值和动态调整实现无阻塞传输
错误恢复:仅增强模式支持重传,基础模式依赖LL层ARQ机制
(与传统蓝牙(BR/EDR)差异:BLE无重传/流控制模式,仅支持LE信用控制模式和增强信用模式)
二、L2CAP位置
三、空口包结构
未编码PHY空口包
编码PHY空口包
编码未编码Phy说明
L2CAP Header
根据Header可以分为几种帧:
B-frames, C-frames, K-frames、I-frames, S-frames,G-frames
在BLE中仅支持B-frames, C-frames, K-frames
帧类型 | 标识符 | 结构特征 | 应用场景 |
---|---|---|---|
B帧 | SAR=0b00 | 无分段,直接封装完整SDU | ATT短数据(默认MTU=23) |
K帧 | SAR=0b10 | 携带SDU长度字段+信用控制 | LE信用模式大数据传输 |
C帧 | CID=0x0005 | 信号命令(连接参数更新等) | 设备管理类操作 |
B帧(Basic Frame)
最小L2CAP协议信息
场景:ATT属性读写、SMP配对等小数据交互
K帧(Credit-Based Frame)
k帧是用于LE基于信用的流量控制模式和增强基于信用的流量控制模式的PDU。
场景:长数据传输(如OTA固件升级、语音流)
C帧(Control Frame)
c帧是包含对等L2CAP实体之间交换的L2CAP信令消息的PDU。c帧专门用于L2CAP信号通道。
场景:动态通道管理、QoS协商
各种命令如下,
如发起连接参数更新是由L2CAP_CONNECTION_PARAMETER_UPDATE_REQ (code 0x12)命令发起
MTU交换由L2CAP_LE_CREDIT_BASED_CONNECTION_REQ (code 0x14)命令发起
分段和重组
分段是将pdu分解成更小的部分,以便从L2CAP传递到较低的层。重组(Recombination)是将从底层发送上来的分片重新组合成PDU的过程。分片和重组可以应用于任何L2CAP pdu。
分段实现
通过K帧分包,第一帧包含SDU长度和PDU长度,后面延续包只包含PDU长度,LL层累加Payload长度匹配首帧的SDU_Length判断结束,流程如下:
重组实现与分段反过来,判断LLID,LLID=0b10为首帧,LLID=0b01为延续帧,判断数据与SDU长度相同为结束
注意:必须收齐所有分片并通过校验后,才将完整SDU提交上层
暂无评论内容