经典蓝牙(Classic Bluetooth)通常指BR/EDR(Basic Rate / Enhanced Data Rate)蓝牙,是蓝牙1.0到5.x规范中用于音频、串口通信等场景的传统蓝牙技术。
对于嵌入式开发,理解经典蓝牙协议栈比记协议名称更重要。你可以把它理解为:
应用 ↓ Profile ↓ RFCOMM ↓ L2CAP ↓ HCI ↓ LMP ↓ Baseband ↓ Radio(PHY)1. 协议栈总体结构
+------------------+ | A2DP | | HFP | | AVRCP | | SPP | +------------------+ | RFCOMM | | SDP | +------------------+ | L2CAP | +------------------+ | HCI | +------------------+ | LMP | +------------------+ | Baseband | +------------------+ | Radio | +------------------+2. Physical Layer(PHY)
最底层无线收发器。
工作频段:
2.402 GHz ~ 2.480 GHz采用:
FHSS Frequency Hopping Spread Spectrum特点:
79个信道 每个1MHz 1600 hops/s例如:
Ch1 ↓ Ch20 ↓ Ch56 ↓ Ch10不断跳频。
3. Baseband
基带层。
负责:
- 数据包封装
- 时隙管理
- 跳频控制
- ACL/SCO链路管理
时隙(Slot)
经典蓝牙采用:
625us一个时隙。
Master Tx Slave Tx主从交替发送。
ACL链路
Asynchronous Connection Less
用于:
文件传输 串口传输 数据通信例如:
SPP FTP OBEX都走ACL。
SCO链路
Synchronous Connection Oriented
用于:
语音 电话例如:
HFP Headset4. LMP(Link Manager Protocol)
链路管理协议。
负责管理连接。
功能
连接建立
Paging Connection SetupPairing
PIN SSPAuthentication
身份认证 ``Encryption
加密开关AFH
AFH就是由LMP控制:
Adaptive Frequency Hopping动态避开干扰信道。
5. HCI(Host Controller Interface)
HCI是面试高频内容。
作用
Host和Controller之间的接口。
Application ↑ Host ↑ HCI ↓ Controller例如:
应用层要连接设备:
HCI_Create_Connection控制器返回:
Connection Complete常见传输方式:
UART USB SDIO PCIe很多蓝牙芯片接MCU:
MCU <----UART----> BT Chip就是HCI接口。
6. L2CAP
Logical Link Control and Adaptation Protocol
L2CAP非常重要。
相当于蓝牙的传输层。
功能
数据复用
多个协议共享ACL链路:
RFCOMM SDP OBEX同时运行。
分包重组
如果应用发送:
1000 Bytes而链路每次只能传:
339 BytesL2CAP负责:
Segmentation ReassemblyQoS管理
支持:
优先级 流量控制7. SDP(Service Discovery Protocol)
服务发现协议。
作用:
发现对方支持什么服务流程:
Connect ↓ SDP Query ↓ Service List例如:
SPP A2DP HFP AVRCP手机连接耳机时:
先通过SDP知道:
耳机支持: A2DP AVRCP HFP然后建立对应连接。
8. RFCOMM
嵌入式开发最常见协议。
RFCOMM模拟串口。
原理
UART ↓ RFCOMM ↓ L2CAP ↓ Bluetooth对于上层来说:
和串口几乎一样SPP
Serial Port Profile
建立在RFCOMM之上。
SPP ↓ RFCOMM ↓ L2CAP很多蓝牙模块:
HC-05 HC-06 BC417实际上就是:
SPP透传开发体验:
send("hello")另一端直接:
receive("hello")非常像UART。
9. 常见Profile
Profile(配置文件)定义应用行为。
SPP
串口透传
SPP ↓ RFCOMM ↓ L2CAP适用:
- MCU通信
- 工业设备
- 调试工具
A2DP
Advanced Audio Distribution Profile
音乐传输。
Phone ↓ SBC/AAC ↓ A2DP ↓ Headset例如:
蓝牙耳机听歌 ``AVRCP
Audio Video Remote Control Profile
控制音乐播放。
支持:
Play Pause Next VolumeHFP
Hands-Free Profile
蓝牙通话。
接电话 挂电话 语音传输车载蓝牙大量使用。
HID
Human Interface Device
键盘鼠标。
Bluetooth Keyboard Bluetooth MouseOPP
Object Push Profile
文件传输。
例如老手机时代:
传照片 传联系人10. 经典蓝牙连接过程对应协议
Inquiry ↓ Page ↓ ACL Connection ↓ LMP ↓ Authentication ↓ Encryption ↓ SDP ↓ Profile建立 ↓ RFCOMM/A2DP/HFP ↓ Data Transfer例如手机连接蓝牙串口模块:
Inquiry ↓ 发现HC05 ↓ Page ↓ ACL ↓ Pairing ↓ SDP ↓ 发现SPP服务 ↓ RFCOMM建立 ↓ UART数据透传11. 面试常问
Q1:RFCOMM和SPP是什么关系?
SPP = Profile RFCOMM = Protocol ``关系:
SPP ↓ RFCOMM ↓ L2CAPQ2:为什么RFCOMM像串口?
因为RFCOMM实现了:
RS232串口模拟上层看到的是:
COM PortQ3:ACL和SCO区别?
ACL:
数据 可重传 可靠SCO:
语音 不重传 实时性高Q4:经典蓝牙和BLE最大的协议区别?
经典蓝牙:
SDP RFCOMM SPP A2DP HFPBLE:
ATT GATT Service Characteristic经典蓝牙主要围绕RFCOMM/SPP/A2DP/HFP构建;BLE主要围绕GATT服务和Characteristic属性构建,这是两套完全不同的上层协议体系。