蓝牙协议GAP(Generic Access Profile)
GAP(Generic Access Profile)是蓝牙协议栈中的基础控制层协议,定义了设备如何发现、连接、安全交互及管理广播行为。它适用于经典蓝牙(BR/EDR)和低功耗蓝牙(BLE),是蓝牙通信的"交通规则"。
1. GAP的核心功能
功能 | 经典蓝牙(BR/EDR) | 低功耗蓝牙(BLE) |
---|---|---|
设备发现与可见性 | 通过Inquiry Scan/Page Scan | 通过Advertising/Scanning |
连接管理 | 角色:Master/Slave | 角色:Central/Peripheral |
安全模式 | 定义Legacy Pairing/SSP流程 | 定义LE Secure Connections |
广播控制 | 有限支持(如Classic AMP广播) | 核心功能(Advertising Packet) |
2. GAP设备角色
(1) 经典蓝牙(BR/EDR)
角色 | 职责 |
---|---|
Master | 发起连接,控制时钟同步,管理最多7个Slave(Piconet)。 |
Slave | 响应Master的请求,被动同步时钟。 |
(2) 低功耗蓝牙(BLE)
角色 | 职责 |
---|---|
Central | 主动扫描并连接Peripheral(如手机连接手环)。 |
Peripheral | 广播自身存在,等待Central连接(如心率传感器)。 |
Broadcaster | 仅广播数据,不建立连接(如信标)。 |
Observer | 仅扫描广播数据,不发起连接(如扫码设备)。 |
3. GAP关键流程
(1) 设备发现(Discovery)
经典蓝牙(BR/EDR)
-
Inquiry:Master发送查询请求,发现周围设备。
-
Inquiry Scan:Slave监听查询请求并响应(包含BD_ADDR和Class of Device)。
-
EIR(Extended Inquiry Response):可选扩展信息(如设备名称)。
低功耗蓝牙(BLE)
-
Advertising:Peripheral发送广播包(含UUID、设备名等)。
-
Scanning:Central监听广播并决定是否连接。
(2) 连接建立(Connection)
经典蓝牙
-
Paging:Master通过Slave的BD_ADDR发起连接。
-
Page Scan:Slave必须处于可连接状态。
-
LMP协商:建立ACL链路并配置参数(如加密、功率控制)。
低功耗蓝牙
-
Connection Request:Central发送CONNECT_REQ包。
-
跳频同步:双方根据Connection Interval同步通信信道。
(3) 安全模式(Security)
模式 | 经典蓝牙 | 低功耗蓝牙 |
---|---|---|
Mode 1 (Non-secure) | 无加密或认证 | 无加密 |
Mode 2 (Service) | 连接后按服务要求安全认证 | 类似(基于GATT属性权限) |
Mode 3 (Link) | 连接前强制认证(Legacy Pairing) | LE Legacy Pairing |
Mode 4 (SSP/LE SC) | Secure Simple Pairing (SSP) | LE Secure Connections |
4. GAP广播与连接参数
(1) BLE广播参数
参数 | 说明 |
---|---|
Adv Interval | 广播间隔(20ms ~ 10.24s),影响功耗与发现速度。 |
Adv Type | ADV_IND (可连接)、ADV_NONCONN_IND (仅广播)、ADV_DIRECT_IND (定向广播)。 |
Adv Data | 包含设备名称、UUID、Tx Power等(最大31字节)。 |
(2) BLE连接参数
参数 | 说明 |
---|---|
Connection Interval | 通信间隔(7.5ms ~ 4s),短间隔低延迟但高功耗。 |
Slave Latency | 从设备可跳过的通信事件数(0~499),用于节能。 |
Supervision Timeout | 连接超时(100ms ~ 32s),超时未通信则断开。 |
5. GAP实际应用示例
场景1:手机连接蓝牙耳机(经典蓝牙)
-
耳机进入Discoverable Mode(Inquiry Scan)。
-
手机发起Inquiry,发现耳机并获取其BD_ADDR。
-
手机通过Paging建立ACL链路,触发配对(SSP)。
-
配对成功后,手机作为Master控制音频流(A2DP)。
场景2:智能手环与APP连接(BLE)
-
手环作为Peripheral,广播
ADV_IND
包(含心率服务UUID)。 -
手机(Central)扫描到广播后,发送
CONNECT_REQ
。 -
双方协商Connection Interval=15ms,Slave Latency=3。
-
连接建立后,手机通过GATT读取心率数据。
6. GAP安全机制对比
安全特性 | 经典蓝牙(SSP) | 低功耗蓝牙(LE SC) |
---|---|---|
配对方式 | Just Works/Passkey Entry/Numeric Comparison | Passkey Entry/Numeric Comparison/OOB |
加密算法 | E0/AES(BR/EDR) | AES-CCM |
密钥长度 | 128-bit | 128-bit |
MITM保护 | 部分模式支持 | 强制(LE Secure Connections) |
7. 常见问题
Q1: 如何区分GAP和GATT?
-
GAP:管"谁可以连接我"(角色、可见性、安全)。
-
GATT:管"连接后能做什么"(服务/特征值交互)。
Q2: BLE广播包能携带多少数据?
-
最大31字节(若需更多数据,可使用Scan Response补充)。
Q3: 经典蓝牙是否支持广播?
-
传统BR/EDR不支持广播,但部分设备通过AMP(Alternate MAC/PHY)扩展实现类似功能。
8. 总结
-
GAP是蓝牙通信的基石,统一管理设备发现、连接、角色和安全策略。
-
经典蓝牙:基于Master/Slave架构,依赖Inquiry/Paging。
-
低功耗蓝牙:通过Advertising/Scanning优化功耗,支持灵活角色。
-
安全分级:从无认证到强制加密,适应不同场景需求。