【低功耗蓝牙BLE】2-Generic Access Profile(GAP)协议
原文链接: https://zhuanlan.zhihu.com/p/527434096?utm_id=0
GAP简介
通用访问配置文件(GAP)规定了设备在较低级别如何执行控制程序,如设备发现、连接、安全建立等,以确保互操作性,并允许来自不同供应商设备之间的通信。主要的操作有:
- 发现并与配对
- 广播数据
- 建立安全连接
GAP以一种标准、普遍理解的方式定义了这些和其他基本操作。了解GAP很重要,因为大多数BLE实现都为希望使用此功能的应用程序提供了GAP API。

GAP层定义了:
- 角色- roles
- 操作模式&流程
- 安全模式&流程
角色 - Roles
BLE设备可以同时在一个或多个通用访问配置文件(GAP)角色中运行(前提是链路层支持此功能):
- Broadcaster
- Observer
- Peripheral
- Central
角色施加限制并强制行为,因此通常在设备的设计阶段固定。
GAP定义了两对角色,允许设备之间相互通信。
Broadcaster/Observer
这一对角色实现单向、无连接的通信。
Broadcaster
- 定期发送包含数据的广播包
- 使用链路层的Advertiser角色
Observer
- 扫描广播者,监听广播数据
- 使用链路层的Scanner角色
网络拓扑

Peripheral/Central
这对角色实现双向、面向连接的通信。
Peripheral
- 链路层的slave角色
- 用可连接的广播数据包进行广播
- 优化以消耗最少的功耗和内存
- 使用低成本设计
Central
- 链路层master角色
- 能够建立和管理连接
- 可同时连接到各种设备
网络拓扑

对于BLE连接中的数据传输操作,不同的角色由通用属性配置文件层(GATT)定义。
Modes & Procedures
发现和连接阶段都定义了模式/过程对。
GAP Modes
GAP Modes指外围设备可以在一定时间内切换到的一种状态,以便达到一定目的或者允许一个对等设备(peer)执行一些操作。
例如 -
Disacovery Modes:
- Non-Discoverable
- Limited-Discoverable
- General-Discoverable
Connection Modes:
- Non-Connectable
- Directed-Connectable
- Undirected-Connectable
请参阅第3卷“蓝牙规范4.2版”。,C部分,第9节
GAP Procedure(s)
中央设备为达到某一目标而采取的一系列行动,如:
- Discovery of peers
- Establishing a connection to a specific peer
例如 -
Discovery Procedures
- Limited-Discovery
- General-Discovery
Connection Procedures
- General-Connection
- Direct-Connection
请参阅第3卷“蓝牙规范4.2版”。,C部分,第9节
Discovery Modes and Applicable Procedures
这些问题涉及外围设备如何广播其存在,以及中央设备可以/应该如何处理这些信息。下表将几种外围设备“发现”模式与适用的中央“发现”程序相匹配:

General-Discoverable Mode
此状态表示外设希望由对等方发现以建立连接。它通过定期传输ADV_IND广播包来识别,表示外围设备的初始出厂默认状态。
所需外围设备配置
进入此模式(状态)前,需要在外设中设置以下BLE参数:
- Advertising Packet Type (ADV_IND)
- Advertising Interval
- Advertising Packet Payload
- Local Name
- Service UUID
- (Optional) Scan Response Payload
- TX Power
- Battery Level
- Custom Data
最后,必须在外围设备上启动广播,以向其对等方发出进入此模式的信号。
Limited-Discoverable Mode
BLE链接层部分协助了该过程。在扫描期间,如果链路层检测到具有匹配MAC地址的ADV_DIRECT_ND数据包,它将通知应用层。附近的其他BLE无线电将忽略未发送给它们的ADV_DIRECT_IND数据包。
Connection Establishment Modes and Applicable Procedures
这些主要涉及中央设备如何选择与哪个外围设备交互。下表将几种外围连接模式与适用的中央连接程序相匹配:

Undirected-Connectable Mode
如上所述,当在一般可发现模式下操作时,外围设备自动处于该“连接模式”。它正在发送ADV_IND数据包(杂乱无章),并查找与任何对等方的连接(“无方向”)。
General Connection Establishment Procedure
这通常是一个两步程序:
- 接受所有ADV_IND数据包,并过滤数据包有效负载中的数据,例如:
- Local Name
- Service UUID
- Custom Data
- etc.
2. 停止扫描,并使用直接连接建立过程(Direct Connection Establishment)连接到该设备:
- Initiate a connection to a single device using its MAC address
- Uses CONNECT_REQ Initiating PDU advertising packet
在直接连接建立过程中,中央链路层不知道外围设备是否可用或可连接。因此,如上文所述,它只能在收到广播包时触发。
安全性
关于GAP的安全性,大家感兴趣可以去参考BLE的spec,这里就不详细介绍了。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)