目录
蓝牙
蓝牙技术基于FHSS(Frequency-Hopping Spread Spectrum)跳频扩频技术 (动态切换传输信道,以提升抗干扰能力)
蓝牙旨在解决移动电话与耳机等设备间的有线连接问题.
蓝牙技术历经迭代升级,关键里程碑包括:
蓝牙1.1(2001年) :首个稳定版本,支持基础数据传输与语音通信
蓝牙2.0(2004年) :引入 增强数据速率(EDR) ,传输速度提升至3 Mbps,支持CD级音质。
蓝牙4.0(2010年) :新增 低功耗(BLE) 模式,推动物联网设备普及。
蓝牙5.0(2016年) :传输距离扩展至300米,速率达2 Mbps,支持多设备连接。
蓝牙5.2(2020年) :强化音频传输与定位功能,适配智能家居与可穿戴设备。
工作频段: 2.4 GHz ISM频段,通过79个跳频信道减少与WiFi的干扰, 兼容 IEEE 802.15.1
Android的蓝牙框架分为
3.高层应用层___________高层有 SDP(服务发现)、RFCOMM(串口模拟)、AVCTP(音频控制)等支持应用场景
2.中间协议层___________中间层有 HCI(Host硬件控制接口)、L2CAP(逻辑链路控制)
1.底层硬件模块_________RF(射频)、BB(基带)、LM(链路管理)
Android 4.2前:使用BlueZ协议栈,架构依赖Linux内核与用户空间库(libbluetooth.so )。
Android 4.2后:过渡到BlueDroid,结构更简洁,与DBus解耦并通过HAL标准化硬件交互。 BTE负责核心功能,BTA与应用层通信
Android 11及更新版本:引入 Gabeldorsche 作为协议栈重构,目标为降低延迟并提升稳定性。
═══════════════════════════════════════
Android蓝牙系统分为六个层次:内核层、BlueZ库、适配库、JNI、Java框架和应用层
6.蓝牙应用层
5.蓝牙Java框架 框架层在 /framework/base/core/java/android/bluetooth
4.蓝牙JNI层
3.蓝牙硬件抽象层(HAL) 蓝牙适配库
2.BlueDroid库_蓝牙协议栈
1.蓝牙内核层
__________________________________
6.蓝牙应用层使用逻辑
包括用户开发的蓝牙应用(如设备扫描、数据传输等),通过Android提供的android.bluetooth API与底层交互。
开发者可使用BluetoothAdapter、BluetoothSocket等类实现功能
5.蓝牙Java框架 框架层在 /framework/base/core/java/android/bluetooth
提供标准的蓝牙API接口(如配对、连接、数据传输)
蓝牙系统服务:以独立APK形式存在 /packages/apps/Bluetooth 通过Binder IPC机制与应用交互,管理蓝牙服务和Profile(如 HFP、A2DP)
4.JNI层
代码位于 /packages/apps/Bluetooth/jni 实现Java框架层与本地C/C++代码的交互 调用HAL接口并接收回调
3. 蓝牙硬件抽象层(HAL)
定义标准接口(如bluetooth.h),协议栈通过HAL与硬件驱动通信
2.BlueDroid库_蓝牙协议栈
BlueDroid :分为两层: BTE 和 BTA
BTE(Bluetooth Embedded System) :实现核心功能(如L2CAP、RFCOMM协议)
BTA(Bluetooth Application Layer) :与框架层通信,处理应用逻辑
代码位置:external/bluetooth/bluedroid
1.蓝牙内核层
Linux内核模块:包括HCI驱动(如UART、USB)、协议支持(如L2CAP、SCO)及BlueZ遗留组件(部分版本保留)
厂商驱动:如高通、博通的定制实现,通过 hciattach 等工具加载
════════════════════════════════════════════════════
缩词
ATT
ATT === Attribute Protocol === ATT(属性协议)
ATT 定义了客户端-服务器模型,客户端通过操作码(OpCode)向服务器发送请求(如读取、写入特征值),服务器返回响应或通知
属性操作与服务发现
Gabeldorsche
代码路径:
/packages/modules/Bluetooth/system/gd/
Gabeldorsche在德语中是“叉须鳕鱼” , (简称“gd”) 同时与蓝牙名称的历史人物Harald Bluetooth有关联,是双关语
Gabeldorsche(简称“gd”)是Android系统蓝牙功能的核心软件层,负责设备发现、连接管理、数据传输等
Gabeldorsche 是Android 13中集成的蓝牙技术,替代了旧版的 Bluedroid 协议栈
Android 13中 Gabeldorsche作为新的蓝牙栈被默认启用,主要用于扫描、广告、连接管理等功能
Gabeldorsche 用【 Rust 】编写 , 模块化设计,处理线程和进程交互, 提高安全性和可靠性,特别是内存安全方面
GATT
GATT === General Attribute Profile ===
GAP
GAP === General Access Profile ===
SMP
SMP === Security Manager Profile ===
SDP
SDP === Service Discvery Profile === 蓝牙服务发现协议
SDP 蓝牙服务发现协议(SDP)
蓝牙服务发现协议(SDP)是蓝牙协议栈中的核心组件,用于设备间动态发现对方支持的服务及其属性
服务发现:SDP允许设备在建立连接前查询对方支持的服务类型、属性及访问参数。
例如,手机连接蓝牙耳机时,会通过SDP查询耳机支持的音频服务(如A2DP)和控制命令。
工作机制
客户端-服务器模型:
SDP服务器:提供服务的一方(如蓝牙耳机、打印机)维护服务记录列表,每个记录描述服务的属性(如服务类型、协议通道号)
SDP客户端:发起查询的设备(如手机)通过发送SDP请求获取服务信息。发现服务后,客户端需通过其他协议(如RFCOMM)建立实际连接
HCI
HCI === Host Controller Interface = 蓝牙主机控制器接口
蓝牙主机控制器接口(HCI)
HCI位于主机和控制器之间,属于协议栈的一部分,无论是经典蓝牙、双模还是BLE-only都包含HCI层
HCI在蓝牙协议栈中位于 逻辑链路控制与适配协议(L2CAP)层与 链路管理协议(LMP)层之间,是软硬件交互的桥梁
它向上为主机提供统一访问蓝牙硬件的接口,向下通过物理传输层(如UART、USB等)与蓝牙控制器通信.
主机通过HCI发送命令 【 Command 】控制蓝牙控制器,例如设备初始化、连接建立等操作
控制器通过HCI返回事件【 Event 】反馈执行结果或状态更新,如连接成功、数据接收完成等
HCI支持两种数据包类型:
ACL(异步无连接数据包) :用于可靠的非实时数据传输,如文件传输或传感器数据。
SCO(同步连接导向数据包) :专为低延迟实时音频设计,如蓝牙耳机通话
以设备连接为例:
1. 主机发送Inquiry Command搜索周围设备。
2. 控制器返回Inquiry Complete Event报告搜索结果。
3. 主机发送Create Connection Command发起连接请求。
4. 控制器通过Connection Complete Event通知连接状态。
L2CAP
L2CAP === Logical Link Control and Adaptation Protocol === 逻辑链路控制与适配协议
L2CAP(Logical Link Control and Adaptation Protocol,逻辑链路控制与适配协议)是蓝牙协议栈中的核心协议,
主要负责在蓝牙设备之间建立逻辑链路,为上层协议提供数据传输服务,并支持多种功能
L2CAP通过 通道标识符(CID) 区分不同逻辑连接,支持多路复用
CID=0x0001用于信令通道,0x0002用于无连接通信,0x0004(ATT)、0x0006(SMP)等用于BLE特定协议
ISO数据包
ISO === isochronous === ISO data === 等时(Isochronous)数据包
蓝牙5.0和LE Audio的普及,HCI新增了对ISO数据包(等时传输)的支持,以满足超低延迟音频传输需
蓝牙等时数据包通过分组同步(CIG/BIG)、时间戳对齐及LC3编解码优化,解决了音频传输中的延迟与同步问题,扩展了蓝牙在无线音频领域的应用场景
同步连接组(CIG)
广播同步组(BIG)
等时数据包分为两种模式:
连接模式(CIS,Connected Isochronous Stream) :用于双向同步通信,例如真无线耳机的左右声道同步。多个CIS可组成 同步连接组(CIG) ,组内所有数据流共享相同时间戳,确保播放同步性
广播模式(BIS,Broadcast Isochronous Stream) :用于单向广播通信,例如车站广播或多人共享音频。多个BIS可形成 广播同步组(BIG) ,接收设备(称为同步接收器)通过周期性的PDU(协议数据单元)同步数据
LE Audio
LE Audio === Low Energy Audio === 低功耗语音
LE Audio是蓝牙技术联盟推出的新一代低功耗音频标准,全称为Bluetooth Low Energy Audio。它基于蓝牙5.2及以上版本实现
RFCOMM
RFCOMM === Radio Frequency Communication Protocol === 蓝牙无线电通讯协议
RFCOMM 基于L2CAP协议的串行通信模拟协议 提供可靠的数据流传输,类似于TCP