蓝牙规范 Core v5.2 GAP 文档解读1-3章
GAP
GENERIC ACCESS PROFILE 通用访问协议
本协议定义了蓝牙设备发现(空闲模式过程)和连接到蓝牙设备的链接管理方面(连接模式过程)相关的通用过程。还定义了与使用不同安全级别相关的过程。此外,本协议还包括UI级别可访问参数的通用格式要求。
1 前言
设备类型:
设备类型 |
描述 |
BR/EDR |
支持“基本速率”核心配置的设备,即经典蓝牙设备 |
LE only |
支持“低功耗”核心配置的设备,即低功耗蓝牙设备 |
BR/EDR/LE |
BR/EDR和LE两种都支持的设备 |
不同设备类型对应的章节:
设备类型 |
章节 |
BR/EDR |
1-8, 12, 15-18 |
LE only |
1-3, 9-12, 15-18 |
BR/EDR/LE |
1-18 |
和要求相关的符号:
- “M”表示强制支持(必须使用的功能)
- “O”表示可选支持(可以使用的功能)
- “C”表示有条件的支持(如果支持某个其他功能,那么这个功能也必须支持)
- “E”表示在角色中被排除的功能(不准在角色中使用的功能)
- “N/A”表示不适用(在给定的环境中不可能使用此功能)。
2 概述
GAP与更低层级的关系:
BR/EDR角色:
- A方——发起方,寻呼的设备,启动设备发现,启动物理链路的建立,在现有链接上启动事务。
- B方——接收方,被呼叫的设备。
LE角色:
- 广播者——发送广播事件、定期广播事件、BIS事件,必须有发射机,可能有接收机。
- 观察者——接收广播事件、定期广播事件、BIS事件,必须有接收机,可能有发射机。
- 外围设备——接受LE**的物理链路的建立,在链接层连接状态中为slave角色,必须有发射机和接收机。
- 中心设备——发起LE**的物理链路的建立,在链接层连接状态中为master角色,必须有发射机和接收机。
BIS:Broadcast Isochronous Stream等时广播流
如果控制器支持,一个设备可以并行操作多个GAP角色。主机根据控制器支持的链接层状态和状态组合决定使用哪个过程、哪个模式。
3 UI方面
UI级别蓝牙术语和参数:
参数 | 定义 | UI术语 | 表示 | ||
基带、链接层 | UI | ||||
蓝牙设备地址(BD_ADDR) | 设备发现时从远程设备获取 | Bluetooth Device Address | 48-bit | 12位16进制 例:000C3E3A4B69或00:0C:3E:3A:4B:69 | |
蓝牙设备名称 | 支持BR/EDR的设备:发出LMP(链接管理协议)名字请求后,获得LMP名字响应 只支持LE的设备:从Device Name特征中获得 BR/EDR/LE都支持的设备:无论名字如何获取,名称要一致 |
Bluetooth Device Name | 最多248 bytes UTF-8 encoded | 自定义 | |
蓝牙万能钥匙(蓝牙PIN) | 1、两个蓝牙设备配对建立链接时用来相互认证 2、配对过程中用来生成启动链接** PIN可以通过UI输入,也可以存在设备上 |
Bluetooth Passkey | 6位整数 0x00000000-0x000F423F |
000000-999999 | 用于SSP(安全简单配对)和SM(安全管理) |
PINBB 可能128 bits (16 bytes) UTF-8 encoded |
PINUI 可以最多16个字符 |
用于传统配对(蓝牙PIN) | |||
设备类别 | 设备发现过程中通过BR/EDR物理传输获得,只有BR/EDR设备和BR/EDR/LE设备使用物理传输时可以使用 | Bluetooth Device Class(major/minor) Bluetooth Service Type 两者混合在一起时: Bluetooth Device Type |
https://www.bluetooth.com/specifications/assigned-numbers | 自定义 | |
外观特征 | 映射为一个图标或字符串,设备发现过程中的设备物理表示 | 图标/字符串(译为用户语言) | 16-bit | 自定义 | |
广播编码 | 发送加密的BIS时数据的加密,接受BIS时数据的解密 | Bluetooth Privacy Code | 128-bit UTF-8 encoded |
不少于4 bytes,UTF-8不多于16 bytes,较高安全级别应使用16 bytes |
配对:
BR/EDR物理链路上的配对定义在LMP级别(即LMP配对)。
LE物理链路上的配对定义在SM中。
一种情况是用户启动绑定过程,为了在两个蓝牙设备之间创建绑定(也可能是创建安全关系) 而输入**,这时,用户被称为执行“绑定(输入密码)”。
另一种情况是设备之前没有共享一个公共链接**,用户在建立过程中需要输入**,这时,用户被称为“使用**进行认证”。