GAP(Generic Access Profile)是 Bluetooth 中定义设备发现、连接建立、安全模式和用户可见参数的通用访问框架;它回答“设备如何被发现、如何建立连接、以什么角色参与通信”。
核心问题
在 BLE 中,两个设备开始交换 GATT 数据之前,必须先解决:
- 谁广播自己的存在?
- 谁扫描周围设备?
- 谁发起连接?
- 设备名称、外观、可连接性如何表达?
- 什么时候需要配对、绑定、加密?
GAP 解决的是连接前后通用访问流程,而不是连接内的业务数据结构。
核心机制
GAP 在 BLE 场景中常见四类角色:
| GAP 角色 | 行为 | 常见例子 |
|---|---|---|
| Broadcaster | 只广播,不建立连接 | Beacon、广播传感器 |
| Observer | 只扫描,不连接 | 扫描器、网关发现阶段 |
| Peripheral | 广播并接受连接 | 手环、传感器、门锁 |
| Central | 扫描并发起连接 | 手机、网关、电脑 |
典型连接流程是:
- peripheral 进入 connectable advertising。
- central 扫描 advertising packet 和可选 scan response。
- central 根据地址、名称、service UUID 或 manufacturer data 选择目标。
- central 发起连接。
- 双方协商连接参数,并按需要执行安全过程。
- 连接建立后,上层使用 ATT / GATT 读写数据。
GAP 还定义 discovery、connection、bonding、安全模式、设备名和外观等用户可见或互操作相关规则。
工程用途
- 配置 BLE 设备是否可发现、是否可连接。
- 设计手机 App 或网关如何扫描和筛选目标设备。
- 管理配对、绑定、隐私地址和安全等级。
- 区分“找不到设备”“连不上设备”和“GATT 读写失败”的故障层级。
边界与常见坑
- GAP 不定义 characteristic 数据模型:那是 GATT 的职责。
- central/peripheral 不等于 GATT client/server:常见组合是 central + client、peripheral + server,但不是协议强制绑定。
- 广播里出现 service UUID 不代表服务可用:真正可用的 GATT 服务仍应在连接后 discovery。
- 扫描过滤不要只靠设备名:设备名可能为空、变化或被截断,service UUID、manufacturer data 和地址策略更可靠。
- 配对成功不等于所有 attribute 可访问:还要看具体 attribute permissions 和应用授权逻辑。