如果让我说BT目前最精彩的段落,那我肯定会想到L2CAP。

逻辑链路控制和适配层协议,称为 L2CAP。L2CAP 向具有协议复用能力以及分段和重组操作的上层协议提供面向连接和无连接的数据服务。

L2CAP 允许更高级别的协议和应用程序发送和接收长达 64 KB 的上层数据包(L2CAP 服务数据单元,Service Data Units,SDU)。

L2CAP 还允许按通道进行流量控制和重传。 L2CAP 层提供逻辑通道,称为 L2CAP 通道,它们在一个或多个逻辑链路上复用。

1. Introduction

本篇文章基于基于BLUETOOTH CORE SPECIFICATION Version 5.2 | Vol 3, Part A。

图 1.1为L2CAP其架构组件。

通道管理器(Channel Manager)提供控制平面功能并负责所有内部信令、L2CAP 点对点信令以及与更高层和更低层的信令。

重传和流控制(Retransmission and Flow Control)模块使用数据包重传提供每个通道的流控制和错误恢复。

资源管理器(Resource Manager)负责向通道管理器、重传和流控制块以及那些不需要重传和流控制服务的应用数据流提供帧中继服务。它负责通过下层接口提供的设施协调与多个 L2CAP 通道相关的数据包的发送和接收。

1.1 features

(1)Protocol/channel multiplexing 协议/通道复用

L2CAP 支持在单个控制器和多个控制器上进行多路复用。 L2CAP 通道一次应在一个控制器上运行。

通道建立期间,协议复用能力用于将连接路由到正确的上层协议

对于数据传输,需要逻辑信道复用来区分多个上层实体。可能有多个上层实体使用相同的协议。

(2)Segmentation and reassembly 分段和重组

使用资源管理器提供的帧中继服务,传输帧的长度由运行在 L2CAP 上的各个应用程序控制。如果 L2CAP 可以控制 PDU 长度,则可以更好地服务于许多多路复用应用程序。

(3)Flow control per L2CAP channel 每个 L2CAP 通道的流量控制

控制器为通过空中传输的数据提供错误和流量控制,并且为通过 HCI 传输的数据提供 HCI 流量控制。当多个数据流使用单独的 L2CAP 通道在同一个控制器上运行时,每个通道都需要单独的流量控制。提供了一种基于窗口的流量控制方案。

(4) Error control and retransmissions 错误控制和重传

当 L2CAP 通道从一个控制器移动到另一个控制器时,数据可能会丢失。此外,某些应用程序需要的残余错误率远小于某些控制器所能提供的。 L2CAP 提供 L2CAP PDU 的错误检查和重传。

L2CAP 中的错误检查可防止由于控制器错误地接受包含错误但通过基于控制器的完整性检查的数据包而导致的错误。

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

错误控制与流量控制一起工作,因为流量控制机制将限制重传以及首次传输。

(5)Support for Streaming 支持流媒体

诸如音频之类的流应用程序会设置一个具有商定数据速率的 L2CAP 通道,并且不希望流控制机制(包括控制器中的机制)来改变数据流。

(6)Fragmentation and Recombination 分割和重组

一些控制器可能具有有限的传输能力,并且可能需要不同于由 L2CAP 分段创建的片段大小。因此,L2CAP 之下的层可以进一步对 L2CAP PDU 进行分段和重组,以创建适合每一层能力的分段。

(7)Quality of Service 服务质量

L2CAP 连接建立过程允许在两个蓝牙设备之间交换有关预期服务质量 (QoS) 的信息。每个 L2CAP 实施都会监控协议使用的资源,并确保遵守 QoS 合同。

(8)不支持的功能

L2CAP 不传输为 SCO 或 eSCO 逻辑传输设计的同步数据。

L2CAP 不支持可靠的广播信道。

2. General Operation

2.1 Channel Identifiers

L2CAP 基于“通道”的概念。 L2CAP 通道的每个端点被称为一个通道标识符(CID)。

每个 ACL-U、ASB-U 和 LE-U 逻辑链路都存在不同的 CID 名称空间。 AMP-U 逻辑链路与其关联的 ACL-U 逻辑链路共享 CID 名称空间。

0x0040-0xFFFF为动态分配的范围。

2.2 OPERATION BETWEEN DEVICES

图 2.2 说明了 CID 在不同设备中相应对等 L2CAP 实体之间的通信中的使用。

面向连接的数据通道表示两个设备之间的连接,其中 CID 与逻辑链路相结合,标识通道的每个端点。(Tips:这里面向连接的数据通道并不是用于传输同步数据,仅用于建立两个设备的连接)

当用于广播传输时,无连接通道将数据流限制在单一方向。无连接通道可用于使用主动广播将数据传输到所有活动从站。当用于单播传输时,无连接通道可用于主从之间的任一方向。(Tips:关于单播、广播、组播这三个概念,可以参考Unicast, Broadcast, and Multicast)

当两个设备之间建立 ACL-U 逻辑链路时,L2CAP 信令通道 (0x0001) 和所有支持的固定通道立即可用。另一个 CID (0x0002) 保留用于所有传入和传出的无连接数据流量,无论是广播还是单播。一旦在两个设备之间建立了 ACL-U 逻辑链路并且传输设备确定远程设备支持无连接流量,无连接数据流量可能会立即流动。

当在两个设备之间建立 LE-U 逻辑链路时,L2CAP LE 信令通道 (0x0005) 和所有支持的固定通道立即可用。

2.3 OPERATION BETWEEN LAYERS

L2CAP 实现在上层协议和下层协议之间传输数据。 L2CAP 实现还应该准备好接受来自较低层的某些类型的事件并将事件生成到较高层。这些事件如何在层之间传递是特定于实现的。

2.4 MODES OF OPERATION

  • Basic L2CAP Mode
  • Flow Control Mode
  • Retransmission Mode
  • Enhanced Retransmission Mode
  • Streaming Mode
  • LE Credit Based Flow Control Mode
  • Enhanced Credit Based Flow Control Mode

2.5 MAPPING CHANNELS TO LOGICAL LINKS

L2CAP 将通道映射到控制器逻辑链路,后者又在控制器物理链路上运行。本地控制器和远程控制器之间的所有逻辑链路都运行在单个物理链路上。

3. DATA PACKET FORMAT

3.1 CONNECTION-ORIENTED CHANNELS IN BASIC L2CAP MODE

本文主要介绍面向连接的通道上使用的 L2CAP PDU 的格式,其他的请自行参考Core Spec。

图 3.1 说明了在面向连接的通道上使用的 L2CAP PDU 的格式。在基本 L2CAP 模式中,面向连接的信道上的 L2CAP PDU 也称为“B 帧”。

Length:表示信息负载的大小,不包括 L2CAP 头的长度。信息有效载荷的长度最多可达 65535 (2^16-1)。 Length 字段用于重组,并在接收端对重组的 L2CAP 数据包进行简单的完整性检查。

Channel ID:通道 ID (CID) 标识数据包的目标通道端点。

Information payload:这包含从上层协议接收到的有效载荷(传出数据包),或传递给上层协议的有效载荷(传入数据包)。

3.2 CONNECTIONLESS DATA CHANNEL IN BASIC L2CAP MODE

图 3.2 说明了无连接数据通道中的 L2CAP PDU 格式。在这里,L2CAP PDU 也被称为“G-frame”。

如前面2.2节所述,CID (0x0002) 保留用于所有传入和传出的无连接数据流量,无论是广播还是单播。

PSM协议/服务多路复用器的描述见下面的第4章。

3.3 CONNECTION-ORIENTED CHANNEL IN RETRANSMISSION/FLOW CONTROL/STREAMING MODES

为了支持流控制、重传和流传输,除了基本 L2CAP 报头之外,还定义了具有协议元素的 L2CAP PDU 类型。

信息帧(I 帧)用于 L2CAP 实体之间的信息传输。监督帧(S 帧)用于确认 I 帧并请求重传 I 帧。

3.4 CONNECTION-ORIENTED CHANNELS IN LE CREDIT BASED FLOW CONTROL MODE AND ENHANCED CREDIT BASED FLOW CONTROL MODE

为了支持基于 LE 基于信用的流控制模式和增强的基于信用的流控制模式,除了基本 L2CAP 报头之外,还定义了具有协议元素的 L2CAP PDU 类型。在这两种模式下,面向连接的信道上的 L2CAP PDU 是一个 Credit-based frame(K-frame)。

4. SIGNALING PACKET FORMATS

4.1 L2CAP_CONNECTION_REQ (CODE 0x02)

本文仅展示发送 L2CAP_CONNECTION_REQ 数据包的格式,其他的请自行参考Core Spec。

发送 L2CAP_CONNECTION_REQ 数据包以在两个设备之间创建 L2CAP 通道。 L2CAP 通道应在配置开始之前建立。图 4.4 定义了数据包的格式。

Protocol/Service Multiplexer - PSM:PSM 字段的长度至少为两个八位字节。

所有 PSM 值的最高有效八位字节的最低有效位等于 0,所有其他八位字节的最低有效位等于 1。这意味着所有 PSM 都是奇数,并且可以通过搜索第一个偶八位字节轻松找到 PSM 的结尾。

PSM 值分为两个范围。第一个范围内的有效值由蓝牙 SIG 分配并指示协议。第二个值范围是动态分配的,并与服务发现协议 (SDP) 一起使用。

参考Assigned Numbers | Bluetooth® Technology Website中Logical Link Control中内容。

Source CID-SCID:源 CID 长度为两个八位字节,表示发送请求的设备上的通道端点。一旦配置了通道,流向请求发送者的数据包将被发送到该 CID。因此,Source CID 表示发送请求和接收响应的设备上的通道端点。SCID 的值应来自表 2.1 中定义的动态分配范围,并且不应已分配给发送请求的设备上的不同通道。

4.2 Others

5. CONFIGURATION PARAMETER OPTIONS

Option是一种扩展配置参数的机制。选项应作为包含选项类型、选项长度和一个或多个选项数据字段的信息元素传输。图 5.1 说明了一个选项的格式。

Option Type:选项类型字段定义正在配置的参数。如果该选项未被识别(例如,因为该选项是在比实现符合的版本更高的规范版本中定义的),则:

  • 如果类型的最高有效位为 0(即类型 0x00 到 0x7F),则接收方应拒绝整个配置请求;
  • 如果类型的最高有效位是 1(即类型 0x80 到 0xFF),接收方应忽略该选项并继续处理下一个选项(如果有)。

Option Length :Option Length字段定义选项数据中的八位字节数。因此,没有选项数据的选项类型的长度为 0。

Option data:该字段的内容取决于Option Type。

针对不同的Type,有以下几种分类:

5.1 MAXIMUM TRANSMISSION UNIT (MTU)

此选项指定此选项的发送方能够接受的通道的最大 SDU 大小。类型为 0x01,有效载荷长度为 2 个八位字节,携带两个八位字节的 MTU 大小值作为唯一的Information Payload(见图 5.2)。

与 B 帧长度字段不同,I 帧长度字段可能大于配置的 MTU,因为它包括控制八位字节长度、L2CAP SDU 长度(如果存在)和帧校验序列字段以及信息八位字节。

默认 MTU 是根据两个基带 DH5 数据包(2*341=682 个八位字节)减去基带 ACL 标头(2*2=4 个八位字节)和一个 6 个八位字节的 L2CAP 标头所承载的负载来选择的。 L2CAP 标头长度为 4 个八位字节,但由于历史原因,使用了 6 个字节的 L2CAP 标头长度。

5.2 FLUSH TIMEOUT OPTION

此选项用于通知收件人发送者将要使用的刷新超时。如果使用了扩展流规范选项,则不应使用该选项。类型为 0x02,有效载荷大小为 2 个八位字节(参见图 5.3)。

刷新超时选项是可以协商的。如果远程设备对该选项返回否定响应并且本地设备不能接受建议的值,则它应通过发送具有原始值的新请求来继续配置过程,或者断开通道。

刷新超时适用于同一 ACL 逻辑传输上的所有通道,但可以通过 HCI ACL 数据包中的Packet_Boundary_Flag 将各个 L2CAP 数据包标记为不可自动刷新,逐个数据包覆盖。

5.3 QUALITY OF SERVICE (QOS) OPTION

如果没有协商 QoS 配置参数,则链路应采用默认参数。 QoS 选项是类型 0x03。如果使用了扩展流规范选项,则不应使用该选项。 QoS 选项是可协商的。

L2CAP 实现只需要支持“尽力而为”服务,对任何其他服务类型的支持是可选的。 Best Effort 不需要任何保证。如果请求中没有放置 QoS 选项,则应假定尽力而为。如果需要任何 QoS 保证,则应发送 QoS 配置请求。

5.4 RETRANSMISSION AND FLOW CONTROL OPTION

此选项指定是否使用重传和流量控制。

5.5 FRAME CHECK SEQUENCE (FCS) OPTION

此选项用于指定将包含在发送的 S/I 帧中的帧校验序列 (FCS) 的类型。这是不可协商的。 FCS 选项应仅在模式正在或已配置为增强重传模式或流模式时使用。

5.6 EXTENDED FLOW SPECIFICATION OPTION

此选项指定用于在通道上请求所需服务质量 (QoS) 的流规范。这是不可协商的。在 AMP-U 逻辑链路上创建的所有信道都应支持扩展流规范。可选地,通过 ACL-U 逻辑链路创建的通道可以支持扩展流规范)。如果两个设备都在扩展功能掩码中显示对 BR/EDR 的扩展流规范的支持,那么在两个设备之间创建的所有通道都应使用扩展流规范。如果使用扩展流规范,则不应使用服务质量选项和刷新超时选项。

5.7 EXTENDED WINDOW SIZE OPTION

此选项用于协商最大扩展窗口大小。扩展窗口大小选项的类型为 0x07,不可协商。

仅当对等 L2CAP 实体已在扩展功能掩码中指示支持扩展窗口大小功能时,才应发送此选项。如果通道配置为使用基本 L2CAP 模式,则应忽略此选项。

Bluetooth L2CAP相关推荐

  1. Bluetooth L2CAP介绍

    https://www.cnblogs.com/hzl6255/p/3801732.html

  2. Linux下Bluetooth编程

    一:Bluetooth基本概念: Bluetooth是爱立信.诺基亚.东芝.IBM和Intel 5家公司在1998年联合推出的一项无线网络技术.其宗旨是提供一种短距离.低成本的无线传输应用技术.在行业 ...

  3. 转载_Linux下Bluetooth编程

    一:Bluetooth基本概念: Bluetooth是爱立信.诺基亚.东芝.IBM和Intel 5家公司在1998年联合推出的一项无线网络技术.其宗旨是提供一种短距离.低成本的无线传输应用技术.在行业 ...

  4. 实战Linux Bluetooth编程

    实战Linux Bluetooth编程(一) 协议栈概述 Sam一年前在Linux下写了一个类似Windows下BTW的库--BTX.现在需要添加新功能时发现很多知识点都忘记 了.所以决定在这次学习中 ...

  5. Fixing thinkpad bluetooth keyboard (by quqi99)

    版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明 (作者:张华 发表于:2019-03-30) 为了保护颈椎, 已经习惯不用鼠标, 但是高度依赖于Thinkpad ...

  6. ubuntu18.04 rtl8761a bluetooth driver

    最近想给我的台式机上加个蓝牙适配器,蓝牙5.0那种,支持BLE设备,这样我就可以基于我的手环以及手机之类的BLE设备做一些东西玩玩.不幸的是,蓝牙适配器买回来后没法驱动,dmesg | tail -f ...

  7. Linux下 WiFi rtl 移植,IMX6Q Linux WIFI+BT(RTL8723au)模块移植问题

    软件环境:IMX6Q 4核,Linux 下    BSP: L3.0.35_4.1.0_130816_source 开机打印信息: U-Boot 2009.08 ( 5��月 26 2016 - 12 ...

  8. linux dmesg命令参数及用法详解(linux显示开机信息命令)

    功能说明:显示开机信息. 语 法:dmesg [-cn][-s <缓冲区大小>] 补充说明:kernel会将开机信息存储在ring buffer中.您若是开机时来不及查看信息,可利用dme ...

  9. dmesg显示内核环缓冲区

    功能说明:显示开机信息. 语 法:dmesg [-cn][-s <缓冲区大小>] 补充说明:kernel会将开机信息存储在ring buffer中.您若是开机时来不及查看信息,可利用dme ...

最新文章

  1. 上拉电阻与下拉电阻的作用
  2. 木马——本质就是cs socket远程控制,反弹木马是作为c端向外发起网络请求
  3. java 序列化 例子_Java序列化和反序列化例子
  4. lcd背光节能matlab代码,【技术分享】LCD背光驱动节电技术-LABC/CABC
  5. oracle怎么从大字段中取节点,Oracle数据库 获取CLOB字段存储的xml格式字符串指定节点的值...
  6. 互联网产品经理的核心竞争力是什么呢?
  7. Latex空格一个字符\空格
  8. itext poi 学习之旅 (3)读取数据库信息并由excel展现出来
  9. linux 电源管理
  10. 计算机数据库相关法规,法律法规数据库-详细页
  11. 数据可视化网页内容自动抓取工具
  12. 使用跨端解决方案Rax编写鸿蒙应用
  13. 浅谈EV证书的作用及思考
  14. Python学习笔记——入门(IDLE的使用、标准库和模块、测试和调试、虚拟编程环境)
  15. 3-23 实对称矩阵知识补充
  16. 主流深度学习CTR模型
  17. 【智能制造】工信部:《国家智能制造标准体系建设指南(2018年版)》(征求意见稿)
  18. 《灵魂中转站》上线 春来变身“最有型死神”
  19. BZOJ 1193--马步距离
  20. 惠普136系列打印机:拆封启动、无线驱动安装、电脑手机打印

热门文章

  1. Topic太多!RocketMQ炸了!
  2. 【php】基于php+mysql 简单的登录注册修改密码系统
  3. J2ME 七巧板图库 七巧板查看器
  4. 教育管理论文参考题目50例
  5. linux 关闭防火墙 及mysql 无密码登陆
  6. multimap 多重映照容器
  7. windows10活动历史记录清除 删除windows时间线操作
  8. 【SpringBoot】ZIP包 压缩解压缩
  9. C++实战——小公举养成记
  10. 华为p50 pro和小米12pro哪个好