BLE GAP 协议和 GATT 协议
最近要打算学习 Blufi 协议进行蓝牙配置,其中必然使用 GAP 协议和 GATT 协议,于是进行重新学习一番。
BLE 是一个 Bluetooth SIG 组织颁布的协议,对于使用 BLE 我们开发人员,最关注的是 上层的 GAP 协议和 GATT 协议。
1.1 GAP 和 GATT 有什么不同呢?
- GAP :定义一个 BLE 网络栈的通用拓扑结构。
- GATT:描述关于如何数据在连接中如何传输的细节。
GATT 尤其关注于数据如何被格式化、打包、然后跟据分发规则去在网络中发送。属性协议(ATT)与GATT紧密相连,那么GATT 处于 ATT 的上层,使用 ATT 去描述数据如何在两个连接的设备中交换。
1.2 GAP (Generic Access Profile)
GAP 即通用存取协议,BLE设备可以使用两种机制与外部世界通信:广播或连接。GAP 就是用来定义设备跟设备之前是用过广播呢,还是连接去通信的。
下面 GAP 将回答 怎么连接或广播? 和 **连接后 GAP 可以做什么?**两个问题。
怎么连接或广播?
一个设备通过选择 GAP 中指定的一个角色去连接到一个 BLE 网络。
广播: 这个过程中,设备没有连接。包含广播者和观察者两种角色。
- 广播者:一个设备广播一些信息。
- 观察者:一个设备接受广播者的信息。
**连接:**设备之间必须连接,一般生产环境中更常用。
-
外设:一个设备广播他的存在,使得中心设备能与它建立连接。在建立连接后,设备不再广播数据给其他中心设备,保持连接。
- 外设是低功耗的因为他们只定期发送一些 beacons,然后中心设备对其进行响应。
- Bean 是一种 BLE 外设。
-
中心设备:一个设备通过监听包,去连接一个外设,一个中心可以连很多个外设。
- 当一个中心设备想要连接外设的时候,它发一个连接请求给外设。如果外设接受了,那么就建立了连接。
- 你的电脑在连接 Bean 的时候就是一个中心设备。
连接后能做什么?
**中心设备可以修改连接参数:**中心设备创建一些连接的参数,中心设备可以更改参数,外设只能通过请求中心设备去更改参数。
**外设或中心设备可以中止连接:**两者可以主动、或者因为异常而断开连接。
1.3 GATT(Generic Attribute Profile)
类似 GAP,在这一层协议上,我们有两种角色:
- 客户端:发送请求给 GATT 服务器,能够读/写 服务器的数据。
- 服务端:服务端负责存储属性,一旦客户端发起请求,服务端进行回应。
所以,当我们使用 GAP 协议建立了连接,然后就可以使用 GATT 协议进行数据的存取实现不同的义务功能。