低功耗蓝牙技术 > GAP和GATT介绍

参考:Nordic:Creating Bluetooth® Low Energy Applications Using nRF51822

GAP(Generic Access Profile)和GATT(Generic Attribute Profile)简介

在蓝牙技术的发展中,GAP和GATT两个协议扮演着关键的角色,为BLE(低功耗蓝牙)设备之间的通信提供了规范和框架。理解这两个协议对于BLE应用程序的开发至关重要。

1. GAP协议(Generic Access Profile)

GAP协议位于BLE协议栈的底层,负责处理设备的访问模式、连接和广播。它定义了设备在蓝牙网络中的角色和行为,包括外围设备(Peripheral)和中心设备(Central)。

1.1 设备角色: GAP给设备定义了两个主要角色:外围设备和中心设备。外围设备是较小或简单的设备,提供数据并连接到中心设备。中心设备更强大,用于连接其他外围设备。

1.2 广播数据: 外围设备通过广播数据向外界宣告自己的存在,包括广播数据和扫描回复数据。广播数据是必需的,用于让其他设备发现其存在,而扫描回复包含额外信息。

1.3 广播的网络拓扑结构: 外设通常通过广播使中心设备发现自己,建立GATT连接进行更多的数据交换。这种方式在不需要连接的情况下广播设备信息,典型应用是iBeacon。

2. GATT协议(Generic Attribute Profile)

GATT协议构建在GAP之上,用于定义BLE设备之间的通信。它使用了ATT(Attribute Protocol)协议,通过服务和特征值进行数据交换。

2.1 GATT连接: GATT连接是建立在GAP协议之上的,是一种独占连接,一个BLE外设同时只能连接一个中心设备。连接建立后,外设停止广播,连接断开后重新开始广播。

2.2 GATT结构: GATT通信建立在Profiles、Services和Characteristics之上。Profile是一组预定义的服务集合,而Service包含多个Characteristics。Characteristic是通信的最小逻辑数据单元,通过UUID唯一标识。

2.2.1 GATT连接的网络拓扑: 一个外设只能连接一个中心设备,而一个中心设备可以连接多个外设。连接建立后,通信是双向的,不同于GAP的单向通信。

2.2.2 GATT通信事务: GATT通信是客户端与服务端的双向关系,通过Characteristic进行数据的读写。连接间隔是连接建议的一个重要参数,影响数据的刷新频率。

2.2.2.1 属性(Attribute) 一个属性包含一个句柄(handle)、一个UUID和一个数值。句柄是属性在GATT表中的索引,对于设备中的每个属性都是唯一的。UUID包含了属性内数据类型的信息,这是理解包含在属性值中的字节的关键信息。在GATT表中可能存在具有相同UUID的多个属性。

2.2.2.2 特征值(Characteristic) 一个特征值至少包括两个属性:特征值声明和保存特征值的属性。通过GATT服务传输的所有数据都必须映射到一组特征值。考虑将数据捆绑在一起,使得每个特征值都是一个独立的、单一实例的数据点是个不错的主意。例如,如果某些数据总是一起变化,将它们收集到一个特征值中通常是有意义的。

2.2.2.3 描述符(Descriptors) 特征值定义中不是特征值的任何属性,在定义中被定义为描述符。描述符是提供有关特征值的更多信息的附加属性,例如特征值的人类可读描述。

然而,有一个特殊的描述符值得特别提及:客户端特征配置描述符(CCCD)。为支持Notify或Indicate属性的任何特征值添加此描述符(请参阅第2.2.5节“空中操作和属性”第10页)。

向CCCD写入'1'启用通知,写入'2'启用指示。写入'0'禁用通知和指示。对于S110 SoftDevice,对设置了Notify或Indicate属性的任何特征值,此描述符会自动添加。

2.2.2.4 服务(Service) 一个服务包括一个或多个特征值,并且是相关特征值的逻辑集合。GATT服务通常包括相关功能的片段,例如特定传感器的读数和设置或人机界面设备的输入和输出。将相关特征值组织成服务既有用又实际,因为它促进了基于逻辑和用例定义的清晰分隔,并有助于在不同应用程序之间实现代码重用。基于GATT的SIG配置文件和服务充分利用了这种方法,建议遵循其用户定义配置文件的策略。

在LED按钮服务中,LED和按钮之间没有关系,它们可以独立更改。因此,将它们作为独立的特征值保持是有意义的,因此我们使用一个特征值表示当前按钮状态,另一个特征值表示当前LED状态。

2.2.2.5 配置文件(Profile) 可以定义一个配置文件来收集一个或多个服务成为一个用例描述。配置文件文档包括关于该特定配置文件所需或可选服务的信息,以及对等方在数据交换期间将如何相互交互的信息。这包括设备在数据交换期间将扮演的GAP和GATT角色。因此,这个文档通常包含关于应该使用什么样的广告和连接间隔,是否需要安全性等信息。

值得注意的是,配置文件在属性表中没有属性。

下面是用BLE调试工具,连接蓝牙设备后获取的信息数据。

总结: GAP和GATT作为蓝牙协议栈中的关键协议,为BLE设备之间的通信提供了标准和框架。GAP主要负责设备的连接、广播和角色定义,而GATT则定义了BLE设备之间的具体通信方式,通过Services和Characteristics实现数据的传输和交换。理解GAP和GATT的关系,有助于开发者更好地设计和实现符合市场需求的稳定产品。

抖动的声音:dilo_Abel

猜你喜欢

转载自blog.csdn.net/DL_62532/article/details/134372993