ESP32- 开发笔记- 软件开发 6 蓝牙协议栈 2

1 Bluedroid 介绍

1.1 基本架构

ESP-Bluedroid 是基于 Android 蓝牙协议栈 Bluedroid 的修改版, 支持经典蓝牙和低功耗蓝牙。由两层组成:

  1. 蓝牙上层 (BTU): 实现核心协议(L2CAP、GATT、SMP 等)。

  2. 蓝牙传输控制器层 (BTC): 提供应用层 API, 并管理配置文件。

  3. 使用场景: 推荐用于同时需要经典蓝牙和蓝牙低能耗的应用。

1.2 操作系统适配

Bluedroid 通过适配系统相关功能与 FreeRTOS 集成:

Timer (Alarm): FreeRTOS 的 Timer 封装成 Alarm,⽤于启动定时器,触发某些特定任务。

Task (Thread): FreeRTOS 的 Task 取代 POSIX Thread,并使用 FreeRTOS 的 Queue 来触发任务的运行(唤醒)。

Future Await/Ready (Semaphore): xSemaphoreTake 封装成 future_await,xSemphoreGive 封装成 future_ready。 future_await 和 future_ready 不能在同一任务中调用。

Allocator (malloc/free): 标准库中的 malloc/free 被封装为 Allocator,用于分配 (malloc) 或释放 (free) 内存。

1.3 Bluedroid 目录结构

ESP-IDF 目录 component/bt/host/bluedroid 包含如下子文件夹:

├── api
├── bta
├── btc
├── common/include/common
├── config
├── device
├── external/sbc
├── hci
├── main
├── stack
└── Kconfig.in
子文件夹的具体说明见下表:
在这里插入图片描述

2 经典蓝牙

2.1 经典架构

ESP-IDF 中的经典蓝牙协议栈是一个分层架构,可在 ESP32 系列芯片上实现经典蓝牙功能,详见下图。

在这里插入图片描述

2.1.1 ESP 蓝牙控制器

底层为 ESP 蓝牙控制器,包含 PHY、基带、链路控制器、链路管理器、设备管理器和 HCI 等各种模块。该层管理硬件接口和链路,以库的形式提供功能,并通过 API 访问,且直接与硬件和低级别蓝牙协议交互。

2.1.2 ESP-Bluedroid

ESP-Bluedroid 是原生 Android 蓝牙协议栈 Bluedroid 的修改版,由两层组成:蓝牙上层 (BTU) 和蓝牙传输控制器层 (BTC)。BTU 层负责处理 L2CAP 等底层蓝牙协议以及其他配置文件,提供以 “bta” 为前缀的接口。BTC 层主要负责向应用层提供以 “esp” 为前缀的支持接口,并处理其他任务。所有的 API 都位于 ESP_API 层,开发者应使用以 “esp” 为前缀的经典蓝牙 API。

2.1.3 应用

最上层是应用层。利用上述 API 和蓝牙规范,可以在 ESP-Bluedroid 协议栈之上创建特定用例的经典蓝牙应用程序。

2.2 规范和协议

协议 (Protocol) 定义了完成特定功能的消息格式和过程,例如数据传输、链路控制、安全服务和服务信息交换等。另一方面,蓝牙规范 (Profile) 则定义了蓝牙系统中从 PHY 到 L2CAP 及核心规范外的其他协议所需的功能和特性。

以下是 ESP-Bluedroid 支持的经典蓝牙协议和规范:

协议:L2CAP、SDP、AVDTP、AVCTP、RFCOMM

规范:GAP、A2DP、AVRCP、SPP、HFP

在这里插入图片描述

如图 蓝牙协议模型 所示,L2CAP 和 SDP 是经典蓝牙最小主机协议栈的必备组成部分,AVDTP、AV/C 和 AVCTP 并不属于核心规范,仅用于特定规范。

2.2.1 L2CAP协议

蓝牙逻辑链路控制和适配协议 (Logical Link Control and Adaptation Protocol, L2CAP) 是 OSI 2 层协议,支持上层的协议复用、分段和重组及服务质量信息的传递。L2CAP 可以让不同的应用程序共享一条 ACL-U 逻辑链路。应用程序和服务协议可通过一个面向信道的接口,与 L2CAP 进行交互,从而与其他设备上的等效实体进行连接。

L2CAP 信道共支持 6 种模式,可通过 L2CAP 信道配置过程进行选择,不同模式的应用场合不同,主要差别在于可提供的 QoS 不同。这些模式分别是:

  1. 基本 L2CAP 模式;
  2. 流量控制模式
  3. 重传模式
  4. 加强重传模式
  5. 流模式
  6. 基于 LE Credit 的流量控制模式

其中,ACL-U 逻辑链路支持的操作模式包括基本 L2CAP 模式、加强重传模式和流模式。L2CAP 信道为支持的固定信道,也支持帧校验序列 (Frame Check Sequence, FCS)。

2.2.2 SDP协议

服务发现协议 (Service Discovery Protocol, SDP) 允许应用程序发现其他对等蓝牙设备提供的服务,并确定可用服务的特征。SDP 包含 SDP 服务器和 SDP 客户端之间的通信。服务器维护一个描述服务特性的服务记录表。客户端可通过发出 SDP 请求,从服务器维护的服务记录表中进行信息检索。

2.2.3 GAP协议

通用访问规范 (Generic Access Profile, GAP) 提供有关设备可发现性、可连接性和安全性的模式和过程描述。

2.2.4 A2DP 和 AVRCP协议

高级音频分发规范 (Advanced Audio Distribution Profile, A2DP) 定义了在 ACL 信道上,实现高质量单声道或立体声音频内容传输的协议和过程。A2DP 负责处理音频流,通常与音频/视频远程控制规范 (Audio/Video Remote Control Profile, AVRCP)(包括音频/视频控制功能)一起使用。图 规范关系图 描述了这些规范的结构和关系图:

在这里插入图片描述

如图 规范关系图 所示,A2DP 的工作基于 GAP 以及通用音频/ 视频分发规范 (Generic Audio/Video Distribution Profile, GAVDP),定义了建立音频/视频流的过程。

A2DP 中共定义了两个角色:Source (SRC) 和 Sink (SNK)。SRC 代表数字音频流的源端,SNK 代表数字音频流的接收端。

AVRCP 中共定义了两个角色:控制器 (CT) 和目标 (TG)。控制器可通过向目标发送命令帧,发起事务。控制器的常见例子包括个人电脑、PDA 和移动电话等。目标可接收控制器发送的命令帧,并生成相应的响应帧。目标的常见例子包括音频播放器或耳机。

在目前的 A2DP 解决方案中,SBC 是唯一支持的音频编解码器,SBC 在 A2DP 规范中是必须的编解码格式。目前方案中实现的规范、协议版本是 A2DP V1.4 和 AVDTP V1.3。

AVDTP 协议定义了蓝牙设备之间在 L2CAP 协议层上建立和传输媒体流的二进制业务。作为 A2DP 的基本传输协议,AVDTP 建立在 L2CAP 层协议之上,由 “一个协商媒体流参数的信令传输实体” 和 “一个传输媒体流的实体” 组成。

A2DP 规范规定了 AVDTP 传输功能的基本服务。根据当前服务功能的配置,基本服务功能中提供了媒体传输和媒体编解码器。

AVRCP 定义了支持音频/ 视频遥控的应用场景的各项需求。AVRCP 中的命令主要分为三个大组:

  1. AV/C 数字接口命令集: 其特定命令子集被采用,且通过 AVCTP 协议传输。
  2. 浏览命令: 可通过 AVCTP 浏览信道,提供浏览功能。
  3. 封面艺术命令: 用于传输与媒体项目有关的图像,通过基于 OBEX 协议的蓝牙基本图像规范 (BIP) 实现。

AVRCP 使用了其中的两套 AV/C 命令:其一包括 AV/C 规范中定义的 PASS THROUGH、UNIT INFO 和 SUBUNIT INFO 命令;其二是 AVRCP 专用 AV/C 命令,作为对 Bluetooth SIG Vendor Dependent 的扩展。

AV/C 命令通过 AVCTP 控制信道发送。PASS THROUGH 命令可通过控制器上的按钮,向面板子单元传送用户操作,并提供一个简单的通用机制来控制目标。例如,PASS THROUGH 中的操作 ID 包括播放、暂停、停止、调高音量和调低音量等常用指令。

为了保证互操作性,AVRCP 将 A/V 功能分为四类:

  1. 播放机/ 录像机
  2. 监控器/ 放大器
  3. 调音器
  4. 菜单

目前的方案提供了 AVRCP V1.6 和 AVCTP V1.4。AVRCP 支持功能的默认配置属于第二类,即监视器/放大器。此外,方案还提供了用于发送 PASS THROUGH 命令的 API。

A2DP 和 AVRCP 经常一起使用。在目前的解决方案中,下层主机堆栈实现了 AVDTP 和 AVCTP 逻辑,并独立为 A2DP 和 AVRCP 提供接口。然而,在堆栈上层中,两个规范组合匹配成为 “AV” 模块。例如,BTA 层提供一个统一的 “AV” 接口,而在 BTC 层中,状态机将处理两种规范的事务。然而,A2DP 和 AVRCP 的 API 是分别提供的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数贾电子科技

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值