GAPGeneric Access Profile)是 Bluetooth 中定义设备发现、连接建立、安全模式和用户可见参数的通用访问框架;它回答“设备如何被发现、如何建立连接、以什么角色参与通信”。

核心问题

BLE 中,两个设备开始交换 GATT 数据之前,必须先解决:

  • 谁广播自己的存在?
  • 谁扫描周围设备?
  • 谁发起连接?
  • 设备名称、外观、可连接性如何表达?
  • 什么时候需要配对、绑定、加密?

GAP 解决的是连接前后通用访问流程,而不是连接内的业务数据结构。

核心机制

GAP 在 BLE 场景中常见四类角色:

GAP 角色行为常见例子
Broadcaster只广播,不建立连接Beacon、广播传感器
Observer只扫描,不连接扫描器、网关发现阶段
Peripheral广播并接受连接手环、传感器、门锁
Central扫描并发起连接手机、网关、电脑

典型连接流程是:

  1. peripheral 进入 connectable advertising。
  2. central 扫描 advertising packet 和可选 scan response。
  3. central 根据地址、名称、service UUID 或 manufacturer data 选择目标。
  4. central 发起连接。
  5. 双方协商连接参数,并按需要执行安全过程。
  6. 连接建立后,上层使用 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 和应用授权逻辑。

相关术语

外部参考