1. GATT协议概述:蓝牙低功耗的核心服务框架
在蓝牙低功耗(BLE)技术体系中,Generic Attribute Profile(GATT)扮演着承上启下的关键角色。作为应用开发者最常接触的协议层,GATT将底层复杂的属性操作封装成易于理解的"服务"概念。想象一下,如果没有GATT,开发者需要直接操作十六进制地址来访问设备功能,就像在没有文件系统的计算机上直接操作磁盘扇区一样痛苦。
GATT建立在Attribute Protocol(ATT)基础之上,定义了服务(Services)和特性(Characteristics)的层级结构、数据格式以及标准操作流程。它本质上是一个服务框架,让BLE设备能够以结构化的方式暴露其功能。例如,一个健康监测设备可能包含心率服务、血压服务和电池服务,每个服务下又包含多个特性,如心率值、血压测量结果和电池电量等。
关键提示:GATT不定义具体的服务内容,而是提供发现和使用这些服务的通用方法。具体服务(如心率监测、设备信息等)由单独的规范定义。
1.1 GATT与ATT的关系解析
理解GATT必须从它与ATT的关系入手。ATT协议定义了最基本的属性操作原语,包括:
- 读属性(Read Request/Response)
- 写属性(Write Request/Response)
- 通知(Notification)
- 指示(Indication)
而GATT则在这些基础操作之上构建了更高级别的抽象:
| ATT层操作 | GATT层对应 | 应用层意义 |
|---|---|---|
| 读属性 | 读取特性值 | 获取传感器数据 |
| 写属性 | 写入特性值 | 发送控制命令 |
| 通知 | 特性值变化通知 | 实时数据推送 |
| 指示 | 需确认的通知 | 重要事件提醒 |
这种分层设计带来了显著优势:应用开发者无需关心底层属性句柄(Handle)的具体值,只需通过UUID(通用唯一标识符)来访问服务和特性。例如,开发者只需知道心率服务的标准UUID是0x180D,就能在各种BLE设备上一致地访问心率数据。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. GATT的核心组件与架构设计
2.1 服务与特性的层级结构
GATT采用树状结构组织数据,顶层是服务
