蓝牙协议栈低功耗之逻辑链路控制和适配协议层(L2CAP)


蓝牙文章链接直达: 👇

1.profile层(待更新)

2.属性协议层(ATT)(待更新)

3.安全管理协议层(SMP)

4.通用访问协议层(GAP)(待更新)

5.通用属性协议层(GATT)(待更新)

6.逻辑链路控制和适配协议层(L2CAP)

7.主机控制器接口层(HCI)

8.链路层(LL)

9.低功耗蓝牙链路层数据格式汇总(一)

10.低功耗蓝牙链路层数据格式汇总(二)

11.蓝牙应用

L2CAP层

  • 今天我们来唠唠逻辑链路控制和适配协议层(Logical Link Control and Adaptation Protocol)。

  • L2CAP位于HCI层之上,ATT、SMP等协议之下,主要负责控制和适配协议层负责数据的分割、数据重组、通道多路复用、通道流量控制和错误检测。 SDU最大可达64Kb。

在这里插入图片描述

下图是L2CAP的组件结构:
在这里插入图片描述
具体来看,通道管理器(Channel Manager)负责L2CAP的整体控制,它通过不同命令执行信令、状态机(与链路层状态机不同)、重传数据包控制;而资源管理器则负责向信道管理器、重传和流控制块以及那些不需要重传和流控制服务的应用程序数据流提供帧中继服务。它负责在底层接口上提供的设施上,协调与多个L2CAP信道相关的数据包的传输和接收。

功能

信道复用

信道复用的目的是为了能够区分不同的上层协议实体,它通过数据包中的PSM字段来判断,如0x0001 对应 SDP协议,0x0003 对应 RFCOMM协议,当然,这些协议不属于低功耗蓝牙的范畴,这里不具体展开描述,感兴趣的同学可以私信我,给你分享这方面的资料。

CID字段来判断,如0x0001表示BT蓝牙信道,0x0005表示BLE信令信道,协议多路复用的功能允许了多个不同上层协议使用同一个L2CAP层,换句话说,L2CAP的存在使得多个协议可以同时运行。

数据分割重组

L2CAP层数据分割重组的功能有很多好处,优势如下:

  • 分割将允许应用数据以单元形式发送,以满足延迟要求。
  • 当L2CAP控制数据包大小时,内存和缓冲区管理更容易。
  • 通过重传进行纠错可以提高纠错的效率。
  • 当一个L2CAP PDU被损坏或丢失时,被破坏的数据量可以小于应用程序的数据单元。
  • 该应用程序与将应用程序数据包映射到较低层数据包所需的分段操作解耦。
数据流控
错误控制和重传输

L2CAP错误检查和重传还可以防止由于控制器冲洗而导致的数据包丢失。

流媒体支持
碎片化和重组
操作模式
模式用法
经典 L2CAP经典蓝牙和部分低功耗蓝牙信道
流控经典蓝牙
重传经典蓝牙
增强重传经典蓝牙
经典蓝牙
基于LE流控低功耗蓝牙信道
增强流控经典蓝牙和低功耗蓝牙信道
模式需通过链路层信到配置,具体见vol3 partA,7.1。
基础模式为默认工作模式,L2CAP层是不执行流程控制,如对数据不执行分段和重组操作。其余五种模式均使用了流程控制或重传机制,需要执行分段和重组操作。在L2CAP层配置阶段,会设置参数是否使用流程控制和重传机制,如果不使用则使用基础模式,否则按参数配置情况使用其他模式。

数据包格式

面向连接PDU

在这里插入图片描述
数据包中的Length字段仅表示payload长度,不包含L2CAP header长度。
CID对应不同的逻辑链路,如0x0005是低功耗蓝牙的信令链路,0x0006是安全管理协议SMP的链路,与低功耗相关的链路如下所示:

CID信道标识符描述
0x0000保留
0x0001经典蓝牙信令通道
0x0002无连接信道
0x0003AMP管理协议
0x0004ATT协议
0x0005BLE信令通道
0x0006安全管理协议SMP
0x0007-0x0003E保留
0x003FAMP测试协议
0x0040-0x007F面向连接,动态分配
Information payload最大可达 65535 字节
重传输/流量控制/流媒体模式下的面向连接的信道

信息帧(I-帧)用于L2CAP实体之间的信息传输。监控帧(S帧)用于确认I帧并请求I帧的重传
在这里插入图片描述
此PDU可用于传输音频和视频数据、文件、控制命令等,具体作用可参考蓝牙5.4核心协议VOL3 partA section3.3。

无连接PDU

在这里插入图片描述
无连接PDUCID信道号为0x0002,PSM(Protocol/Service Multiplexer)由于PSM是奇数且最重要字节的最小重要位为零,以下范围不包含有效PSM:0x0100-0x01FF、0x0300-0x03FF、0x0500-0x05FF、0x0700-0x07FF、0x0900-0x09FF、0x0B00-0x0BFF、0x0D00- 0x0DFF。所有的偶数值也不能作为psm有效。
信令通道PDU
在这里插入图片描述

信令通道

最小信令信道MTU
在这里插入图片描述
其中低功耗蓝牙常用的即为LE-U通道,23字节,即ATT层MTU,这里插播一句,23字节还要减去1字节的opcode和2字节的handle,所以蓝牙4.2版本,ATT层只能传输20字节的有效数据。但是蓝牙5.0版本更新允许协商MTU,最大可达512字节。
在这里插入图片描述
在这里插入图片描述
Code,identifer标识符,用于标识不同的信令通道,0x00无效的标识符,不能使用。以下是code字段:
在这里插入图片描述
下面我们对这些PUD进行详细的分析:

L2CAP_COMMAND_REJECT_RSP

在这里插入图片描述
在响应未知操作码时L2CAP层会返回拒绝的RSP,并返回响应拒绝的原因,如下所示:
Reason
在这里插入图片描述
Reason Data
在这里插入图片描述

L2CAP_CONNECTION_REQ

在这里插入图片描述
此处的PSM字段即协议辨识字段,用于指明是何种上层应用协议,PSM具体内容包含在assigned number协议中,已在上述列举,大家往上翻看即可。source CId表示请求设备的CID。
L2CAP_CONNECTION_RSP
在这里插入图片描述
Destination CID即响应方CID。
Result表示请求是否成功,结果代码如下:
在这里插入图片描述
Status则表示连接的状态,定义如下:
在这里插入图片描述

L2CAP_CONFIGURATION_REQ

在这里插入图片描述
flag字段:
在这里插入图片描述
其中C称为延续字段(Continuation flag),表示后续还有数据包,当小于L2CAP的值时,该值设为0。
Configuration Options包在下一节中进行描述。

L2CAP_CONFIGURATION_RSP

在这里插入图片描述
这里的Config字段与Configuration Options含义相同,详情看以下内容。
result字段含义如下:
在这里插入图片描述

L2CAP_DISCONNECTION_REQ

在这里插入图片描述
这里的字段与上述描述过字段含义相同,不再重复描述。

L2CAP_DISCONNECTION_RSP

在这里插入图片描述

L2CAP_ECHO_REQ

在这里插入图片描述
echo可选字段,蓝牙协议给厂商测试自定义内容的PDU。

L2CAP_ECHO_RSP

在这里插入图片描述
echo可选字段,蓝牙协议给厂商测试自定义内容的PDU。

L2CAP_INFORMATION_REQ

在这里插入图片描述
InfoType

valuedescription
0x0001Connectionless MTU
0x0002Extended features supported
0x0003Fixed channels supported over BR/EDR
L2CAP_INFORMATION_RSP

在这里插入图片描述
InfoType字段与请求包中的InfoType字段含义相同。
result
在这里插入图片描述
info
在这里插入图片描述
在info字段中存在EXTENDED FEATURE MASK字段,定义如下:
在这里插入图片描述
FIXED CHANNELS SUPPORTED OVER BR/EDR字段含义如下:
在这里插入图片描述

L2CAP_CONNECTION_PARAMETER_UPDATE_REQ

在这里插入图片描述
IntervalB Min最小连接间隔,IntervalB Max最大连接间隔,Lantency从机延时,Timeout超时时间,这些字段含义与链路层中的连接请求包含义相同。

L2CAP_CONNECTION_PARAMETER_UPDATE_RSP

在这里插入图片描述
result返回值,0代表接受参数值,1代表拒绝接收请求值。
在这里插入图片描述

L2CAP_LE_CREDIT_BASED_CONNECTION_REQ

在这里插入图片描述
此数据包用于BLE可信的流量控制模式,SPSM值被分为两个范围。第一个范围内的值由蓝牙SIG分配,并指示协议。第二个范围内的值是动态分配的,并与GATT服务器中定义的服务一起使用。可以使用动态分配的值支持多个上层协议。SPSM的具体分配值与PSM相同,可参考上述PSM分配值。与PSM唯一不同的是SPSM长度固定不可变。
MPS,Maximum PDU Payload Size ,最大有效Payload长度。0-65533。
initial credit初始可信值,指示对等设备可发送的最大K帧(K帧即可信BLE流控PDU)的数量。0-65535。Credit代表发送一个LE frame的权限。
SPSM范围值定义如下:
在这里插入图片描述

L2CAP_LE_CREDIT_BASED_CONNECTION_RSP

在这里插入图片描述
MPS,Initial Credits与REQ数据包相同。
以下是result字段含义:
在这里插入图片描述

L2CAP_FLOW_CONTROL_CREDIT_IND

在这里插入图片描述
Credits字段与上述含义相同。

L2CAP_CREDIT_BASED_CONNECTION_REQ

在这里插入图片描述
SPSM、MPS、initial Credits字段与之前描述含义相同。

L2CAP_CREDIT_BASED_CONNECTION_RSP

在这里插入图片描述
result字段含义如下:
在这里插入图片描述

L2CAP_CREDIT_BASED_RECONFIGURE_REQ

在这里插入图片描述

L2CAP_CREDIT_BASED_RECONFIGURE_RSP

在这里插入图片描述
result字段含义如下:
在这里插入图片描述

CONFIGURATION PARAMETER OPTIONS

可选配置的格式如下:
在这里插入图片描述

option type codeoption typeoption length
0x01MTU2
0x02FLUSH TIMEOUT2
0x03QUALITY OF SERVICE22
0x04RETRANSMISSION AND FLOW CONTROL9
0x05FRAME CHECK SEQUENCE1
0x06EXTENDED FLOW SPECIFICATION16
0x07EXTENDED WINDOW SIZE2

状态机

• CLOSED
• WAIT_CONNECT
• WAIT_CONNECT_RSP
• CONFIG
• OPEN
• WAIT_DISCONNECT

  • 23
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值