esp32与android蓝牙,ESP32蓝牙架构(官方)_esp32蓝牙,esp32如何连接手机蓝牙
ESP32 蓝牙开发资料,用于了解ESP32内部的蓝牙实现。
本⼿册为 ESP32 的蓝⽛架构简介,主要分三个章节介绍了蓝⽛、经典蓝⽛和蓝⽛低功耗
⽅⾯的整体架构。注意,本⼿册仅针对 ESP-IDF V2.1 及以下版本。
⽬录
1. 蓝⽛ 1 .........................................................................................................................................
1.1. 概述 ...............................
目录
1.蓝牙
………………………1
1.1.概述
1.1.1.蓝牙应用结构
日量B面1日
1.1.2.HC接口选择
重日日1BB1日1量
2
1.1.3.蓝牙运行环境
ME重自D量重口
3
1.2.框架
4
1.2.1.控制器.
.4
1.2.2. BLUEDROID
4
1.2.2.1.主机架构∴
1.222.0S相关适配
量日B
BIB.8.8
1.2.3.蓝牙目录
2.经典蓝牙
6699
2.1.概述
2.2.协议和规范
10
2.2.1.L2CAP
10
2.2.2.SDP
.10
2.2.3.GAP
10
22.4.A2DP和 AVRCP
日面11面面量里
11
3.蓝牙低功耗
14
3.1.GAP.
14
3.1.1.概述
.14
3.12.BLE设备角色转换状态图
15
3.1.3.BLE广播流程
量面11日1量量a1日11
6
3.1.31.使用 public地址进行广播
16
3.1.32.使用可解析地址进行广播
17
3.1.3.3.使用静态随机地址进行广播
3.1.4.BLE广播类型介绍
19
3.1.4.1.可连接可扫描非定向广播
19
3.1.42.高占空比定向广播和可连接低占空比定向广播
19
3.1.4.3.可扫描非定向广播.
20
3.1.4.4.不可连接非定向广播
.20
3.1.5.BLE广播过滤策略介绍
.20
3.1.6.BLE扫描流程
3.1.7. BLE GAP实现机制
21
3.2. GATT
21
32.1.ATT属性协议
21
322.GATT规范.
n23
323.基于ESP32|DF建立GATT服务(GAT服务器)…
25
3.2.4.基于ESP32IDF发现对方设备的服务信息(GATT客户端)…26
3. 3. SMP
27
3.3.1.概述.…
27
3.32.BLE安全管理控制器
27
3.3.2.1BLE加密流程…
.27
3.3.2.2.BLE绑定流程
3.3.3.BLE安全管理实现机制
30
1.蓝牙
1
蓝牙
本章节介绍了ESP32的基本蓝牙架构。
1.1.概述
1.1.1.蓝牙应用结构
蓝牙是一种短距通信系统,其关键特性包括鲁棒性、低功耗、低成本等。蓝牙系统分为两
种不同的技术:经典蓝牙( Classic bluetooth)和蓝牙低功耗( Bluetooth Low Energy。
ESP32支持双模蓝牙,即同时支持经典蓝牙和蓝牙低功耗
从整体结构上,蓝牙可分为控制器( ontroller)和主机(Host两大部分:控制器包括了
PHY、 Baseband、 Link controller、 Link Manager、 Device Manager、H等模块,用于硬
件接口管理、链路管理等等;主机则包括了L2CAP、SMP、SDP、A∏、GAT、GAP以
及各种规范,构建了向应用层提供接□的基础,方便应用层对蓝牙系统的访问。主机可以
与控制器运行在同一个宿主上,也可以分布在不同的宿主上。ESP32可以支持上述两种方
式,下图罗列了几种典型应用结构
ESP32
PC/Phone/Pad
Bluedroid
LinUx/android
UART/SDIO
PC
Bluetooth
Controller
i Test Tool(BQB)
UART
图1-1.ESP32蓝牙主机与控制器的关系结构图
场景一(ESP-DF默认):在ESP32的系统上,选择 BLUEDROID为蓝牙主机,并
通过ⅦHC丨(软件实现的虚拟HC接口)接口,访问控制器。此场景下,
BLUEDROID和控制器都运行在同一宿主上(即ESP32芯片),不需要额外连接运
行蓝牙主机的PC或其它主机设备。
2017.11
1.蓝牙
场景二:在ESP32上运行控制器(此时设备将单纯作为蓝牙控制器使用),外接一
个运行蓝牙主机的设备(如运行Bez的 Linux PC、运行 BLUEDROID的 Android
等)。此场景下,控制器和主机运行在不同宿主上,与手机、PAD、PG的使用方式
比较类似
场景三:此场景与场景二类似,特别之处在于,在BQB(或其它认证)的控制器测
试下,可以将ESP32作为DUT,用∪ART作为|O接口,接上认证测试的PC机,
即可完成认证
1.1.2.HCI接口选择
ESP32上,HO只能同时使用一个⑩O接口,即如使用∪ART,则放弃HC、SDO等其
他O接口。在ESP-DF(V2.1以后)中,可以在 menuconfig中将蓝牙的HC接口方
式配置为ⅥHC|或∪ART,如下图
Bluetooth
BLuedroid Bluetooth stack enabLed
[1 HCI use UART as IO (NEW)
图1-2.HC||O接口方式配置
若选中 Bluedroid bluetooth stack enabled,则表示便用∨HC作为|O方式,那么HC
use Uart as /0(NEW选项会消失;若选中Hc/ use UART as /O(NEW),则表示使用
∪ART作为0方式;目前,ESP-DF暂时不支持其他|O,如需使用其他方式(如SP
等),则需开发SP-ⅦⅥHC的 bridge模块。
选项
进入 Bluedroid bluetooth stack enabled选项时,可以看到如下配置。
H- Bluedroid BLuetooth stack enabled
(3072) BLuetooth event (callback to application) task stack size
[I BLuedroid memory debug
CLassic bluetooth
Release dram from classic bt controller
[* IncLude gATT server module(gatts)
IncLude GATT CLient module (gatto)
Include BLE security module(SMp)
L Close the bluedroid bt stack Log print
(4) BT/BLE MAX ACL CONNECTIONS(17)
图1-3.VHGI配置
Espressif
2017.11
1.蓝牙
如上图所示,用户可在此界面配置
Bluetooth event(ca∥ back to application) task stack size( BTC Task大小);
Bluedroid memory debug( BLUEDROID内存调试);
Classic Bluetooth(使能经典蓝牙
Release DRAM from Classic BT Contro∥ler(从经典蓝牙控制器中释放DRAM);
nclude GATT server module(GATTS)(包括GATS模块)
Include GATT client module( GATTC)(包括G^TTC模块);
Include bLe security module SM)(包括SMP模块);
C/ ose the b/ uedroid bt stack log print(关闭 BLUEDROID打印)
BT/ BLE MAX ACL CONNECT/ONS(1~7)(最大ACL连接数)等。
选项二
进入HC/ use UART as /o选项时,可以看到如下配置
HCI use UART as I0
(1) UART Number for HCI (NEW)
(921600) uART Baudrate for HCI (NEW)
图1-4.UART配置
用户可在此界面配置 UART Number for hc/NEW(UART端口号),以及UART
Baudrate for hcl(Nw(UAR端口的波特率)。其中,∪ART模式必须支持硬件流控
(CTS/RTS)。
1.1.3.蓝牙运行环境
FSP-DF的默认运行环境为双核 FreeRTOS,ESP32的蓝牙可按照功能分为多个任务
ask)运行,不同任务的优先级也有不同,其中优先级最高的为运行控制器的任务。控制
器任务对实时性的要求较高,在 FreeRTOS系统中的优先级仅次于卩C任务(PC任务用
于双核C門U的进程间通信)。 BLUEDROID(ES卩DF默认蓝牙主机)共包含4个任务,
分别运行BTC、BTU、HC| UPWARD,及HC| DOWNWARD。
2017.11
1.蓝牙
1.2.框架
1.2.1.控制器
ESP32的控制器同时支持 Classic bl和BLE,支持的蓝牙版本为4.2。控制器中主要集成
了H4协议、HC|、 Link Manager、 Link Controller、 Device Manager、 HW Interface等功
能。这些功能都以库的形式提供给开发者,并做了一些AP丨用来访问控制器,具体请见
readthedocs。
C/E
SCO)
ACL
c爬E
CE
ACL
Link
Manager
Manager
Device
Manager
resource Manager
Link Controller
Link
Controller
BREDR Radio and LE Radio(PHy)
BREDR Controller
LE Controller
图1-5. Classic Bt&BLE控制器架构(摘自S| G BT CORE42)
1.22. BLUEDROID
1.221.主机架构
在 ESP-IDF中,使用经过大量修改后的 BLUEDROID作为蓝牙主机 Classic bt+BLE
BLUEDR○D拥有较为完善的功能,支持常用的规范和架构设计,同时也较为复杂。经过
大量修改后, BLUEDROID保留了大多数BTA层以下的代码,几乎完全删去了BTF层的
代码,使用了较为精简的BTC层作为内置规范及Misc控制层。修改后的 BLUEDROID及
其与控制器之间的关系如下图
4/31
2017.11
1.蓝牙
TASK
USER APP
PFOCEDURE
ESP_ API|匚 GATT CAP SDP
PROF‖LEs
PROFILES
BTC
BLE PROFILE
OFILE
mn[工可[
BTU
blE Bt
BLE LOW-LAYER
W-LAYER
STACK
PROFILE
ROFILE
GLOwPa1
A2DP RFCOMM
/ATT
SDP
GAP
H4 HCI TRANSPCRT LAYER (nclude HCI Task
VHCL API
VCI
Controller
LM/LC
HV
图1-6.ESP32 BLUEDROID层次关系图
国说明:
此架构图主要描述架构层次,部分细节(如 HC/ TASK)已舍去。下文会较为具体地介绍各层次的内容
2017.11
1.蓝牙
从上图可以看到, BLUEDROID内部大致分为2层:BTU层和BTC层(除去HC),每
个层都有对应的任务来处理。BTU层主要负责蓝牙主机底层协议栈的处理,包括
2CAP、 GATT/ATT、SMP、GAP以及部分规范等,并向上提供以“ba”为前缀的接口
BTC层主要负责向应用层提供接口支持、处理基于GAT的规范、处理杂项等,并向应用
层提供以esp”为前缀的接囗。所有的AP都在 ESP AP层,开发者应当使用esp”为前缀
的蓝牙AP(特殊的除外)
上图并未详细描述HC|部分,而事实上,HC具有2个任务(至少在 ESP-IDF V2.1以
前),分别处理 Downward和 Upward的数据。
此框架的其中一条设计思路是尽量将蓝牙相关的任务交给BTG来处理,从而避免和降低
用户任务 User Task)的负载,也使结构上更加简洁。
由于历史原因和实际需求,经典蓝牙的部分规范,如 RFCOMM、A2DP等,中层次偏协
议偏底层的部分运行在BTU层,偏控制流程的以及需要提供ES尸-A的运行在BTC层
蓝牙低功耗的部分规范或偏底层的功能,如6 LOWPan或 Dynamic L2 CAP Channe的功
能,将运行在BTU层,再通过BTC向应用层提供 ESP-AP
1222.0s相关适配
BLUEDR○D中有部分与系统相关的接口需要进行OS适配,涉及到的功能包括 Timer
( Alarm)、Task( hread)、 Future Await./ Ready( semphore)、 Allocator/GKl(malloc/ree)等。
BLUEDROID中将 FreeRTOS的 Timer封装成Aam,用于启动定时器,触发某些特定任
务
BLUEDRO|D将原先的 Linux下的 Thread部分重新替换成 FreeRTOS的任务,并使用
FreeRTOS的 Queue来触发任务的运行(唤醒)
BLUEDROID使用 Future Await/ Ready功能来实现阻塞,「 Iture Lock将 FreeRTOS的
XSemphore Take包装成 future_ awant函数,并将 XSemphoreGive包装成 future_ready
函数。值得注意的是, future await和 future_ ready不能在同一任务中调用。
BLUEDR○D将标准库中的 malloc/free封装成 Allocator的申请/释放内存的函数,GK功
能也同样使用ma| loc/free来作为 GKl_getout/ GKI freebuf的核心函数。
1.23.蓝牙目录
进入ESP-DF的 component/bt目录,可以看到有如下子目录和子文件
2017.11
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)