蓝牙协议栈中L2CAP如何实现多路复用与数据调度中心的功能?

摘要:liwen01 2025.11.08 前言 我们简单分析这样的一个应用场景:一个智能手表和一副蓝牙耳机,它们通过蓝牙都连接到了一个手机上。 智能手表 需要的功能有: 实时显示手机来电消息提醒(低延迟信号传输) 同
liwen01 2025.11.08 前言 我们简单分析这样的一个应用场景:一个智能手表和一副蓝牙耳机,它们通过蓝牙都连接到了一个手机上。 智能手表需要的功能有: 实时显示手机来电/消息提醒(低延迟信号传输) 同步健康数据(如心率、步数、睡眠等) 播放控制音乐(音频控制命令) 手表固件升级(OTA 数据传输,数据量较大) 蓝牙耳机需要的功能有: 音乐播放/电话控制(控制命令) 电话语音通信(语音通话) 音乐播放(音乐数据流) 在上面场景中,有各种数据:消息提醒、健康数据、音乐控制、固件升级包、语音通话等等,它们对数据的实时性和可靠性(是否需要重传)要求都不一样。 在手机端,手机蓝牙需要解决的问题有:区分不同的应用、传输大文件、保证数据实时性和可靠性。 为了解决上面的问题,蓝牙就有了L2CAP(Logical Link Control and Adaptation Protocol)逻辑链路控制适配协议。 L2CAP 主要是为了实现:多协议共存、大数据流畅、高可靠性传输三大目标。 在上面场景中,手机端的整体框架如下: 手机(Central) │ ├── ACL Link #1→ 智能手表(Peripheral #1) │ ├── L2CAP 通道 #1:ANCS(来电/消息提醒) │ ├── L2CAP 通道 #2:GATT(健康数据同步) │ ├── L2CAP 通道 #3:AVRCP控制(音乐控制命令) │ └── L2CAP 通道 #4:OTA(固件升级) │ └── 蓝牙耳机(Peripheral #2) ├── ACL Link #2 │ ├── L2CAP 通道 #1:A2DP(音乐数据流) │ ├── L2CAP 通道 #2:AVRCP(播放/电话控制) │ └── SCO / eSCO Link #3 └── HFP(实时语音通话) 智能手表和蓝牙耳机是手机蓝牙的两个外设,这两外设与手机又建立了几个不同的链接,每个链接下,又有多个L2CAP 通道。 (一)L2CAP的体系架构 L2CAP 的核心任务是:让上层应用的数据能高效、安全、有序地在蓝牙链路上传输。 首先我们要知道蓝牙都有哪些链路,以及 L2CAP 在蓝牙协议栈中的作用和位置。 (1)L2CAP的链路类型 在蓝牙中,主要有三种链路:ACL、SCO、ISO ACL(Asynchronous Connection-Less Link):异步、无连接数据链路,用于在主从设备间传输通用数据信息 SCO(Synchronous Connection-Oriented Link):同步、有连接链路,专门为语音传输(音频)设计 ISO(Isochronous Link):蓝牙低功耗(LE)引入的新型同步链路,支持LE Audio 和多设备广播音频 在 L2CAP 中,它只处理 ACL 链路, 也是数据传输的主力通道。 SOC 和 ISO 实时性要求高的同步数据,并不经过 L2CAP 。 从蓝牙的核心系统架构图中看,L2CAP 位于蓝牙的 Host 中, 除了上面说的处理 ACL 链路的数据,它还要处理与 controller 间通讯的 C/E 数据。 (2)L2CAP 位置与功能 L2CAP 位于上层应用和控制器 HCI 之间的位置 上层(Upper Layer):如 ATT、SM、SDP、RFCOMM、AVDTP 等; 下层(Lower Layer / HCI):即控制器(Controller),包括基带(Baseband)与链路管理(Link Manager)。 L2CAP主要功能: L2CAP在主机层负责:实现数据的分段与重组、流量控制、重传控制、多通道管理与协议复用等。 它为上层协议提供逻辑信道服务,并适配底层物理链路。 上图中,有三种数据包: SDU(Service Data Unit):上层应用交给 L2CAP 的数据包 PDU(Protocol Data Unit):L2CAP 封装后的逻辑数据包 Fragments(数据片段):L2CAP PDU 在传输前进一步分片以适配底层链路 (二)L2CAP 的 Channel 与 CID L2CAP 通道(Channel)是蓝牙协议栈中的虚拟数据管道。 它在物理 ACL 链路上,为不同的上层协议(如 GATT、RFCOMM、A2DP)提供独立的传输通道,并负责数据分片、重组和流控。
阅读全文