1. HFP与RFCOMM协议概述
在蓝牙通信体系中,HFP(Hands-Free Profile)作为车载免提系统的核心协议,其底层通信依赖于RFCOMM(Radio Frequency Communication)这一串口仿真协议。RFCOMM在蓝牙协议栈中位于L2CAP层之上,通过模拟RS-232串口通信,为上层应用提供可靠的数据传输通道。
1.1 HFP协议栈结构
HFP协议栈采用典型的分层架构:
- 应用层:实现免提控制、音频网关等功能
- RFCOMM层:提供串口仿真服务(信道号通常为CH6)
- L2CAP层:处理逻辑链路控制和适配
- Baseband层:管理物理层连接
关键数据流:
code复制音频数据 → HFP → RFCOMM → L2CAP → Baseband
控制指令 → HFP → RFCOMM → L2CAP → Baseband
1.2 RFCOMM核心特性
RFCOMM通过以下机制确保通信可靠性:
- 多路复用:支持最多60个并发模拟串口
- 流控制:采用信用机制(Credit-Based Flow Control)
- 帧结构:包含地址、控制、信息、FCS等字段
- 信道管理:动态分配信道号(0-30)
注意:HFP规范要求必须使用RFCOMM信道6进行服务发现和连接建立,这是蓝牙SIG的强制规定。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 服务发现协议(SDP)实战
2.1 SDP查询流程分解
服务发现是建立RFCOMM连接的前提步骤,完整流程如下:
-
L2CAP信道建立
- 主设备发送Connection Request(PSM=0x0001)
- 从设备回复Connection Response
-
SDP查询交互
plaintext复制+-------------------+ SDP_ServiceSearchRequest +-------------------+
| Client | ---------------------------------> | Server |
| | SDP_ServiceAttributeRequest | |
| | ---------------------------------> | |
| | SDP_ServiceAttributeResponse | |
| | <--------------------------------- | |
+-------------------+ +-------------------+
- **关键属性解析
- ServiceClassIDList:必须包含"HandsFree"(0x111F)
- ProtocolDescriptorList:包含RFCOMM信道号
- ProfileDescriptorList:指示HFP版本号
2.2 典型SDP响应示例
xml复制<ServiceRecord>
<Attribute ID="0x0001"> <!-- ServiceClassIDList -->
<UUID>0x111F</UUID> <!-- HandsFree -->
</Attribute>
<Attribute ID="0x0004">
