蓝牙ATT与GATT协议详解

ATT(Attribute Protocol,属性协议)和GATT(Generic Attribute Profile,通用属性规范)是蓝牙低功耗(BLE)技术中密切相关的两个核心协议,它们共同构成了BLE设备数据交换的基础。

1. ATT协议(Attribute Protocol)

基本概念

  • 本质:底层传输协议

  • 作用:定义客户端-服务器之间如何访问属性数据

  • 特点

    • 轻量级设计(适合资源受限设备)

    • 基于简单的请求-响应模型

    • 使用16位句柄寻址属性

核心机制

  • 属性结构

    • 句柄(Handle):0x0001-0xFFFF的唯一标识符

    • UUID(16位或128位):标识属性类型

    • 值(Value):实际数据

    • 权限(Permissions):控制访问方式

  • 操作类型

    • 发现操作(Discover):查找属性

    • 读取操作(Read):获取属性值

    • 写入操作(Write):修改属性值

    • 通知/指示(Notify/Indicate):服务器主动推送数据

2. GATT协议(Generic Attribute Profile)

基本概念

  • 本质:建立在ATT之上的高级数据组织规范

  • 作用:定义如何结构化地组织和使用ATT属性

  • 特点

    • 定义了标准化的服务架构

    • 提供预定义的服务和特征UUID

    • 支持服务发现和特征配置

层次结构

GATT Profile
├── Service A (UUID)
│   ├── Characteristic 1 (UUID)
│   │   ├── Value
│   │   ├── Descriptor (如CCC - Client Characteristic Configuration)
│   ├── Characteristic 2
├── Service B
│   ├── Characteristic 3
...

3. ATT与GATT的关系

对比维度ATT协议GATT协议
协议层级底层传输协议上层应用规范
主要功能提供基础属性访问机制定义属性组织方式和标准服务
角色只有Client/Server扩展为Client/Server/Publisher/Subscriber
数据组织扁平属性列表层次化服务结构
UUID使用仅作为属性类型标识定义标准服务/特征UUID
典型操作Read/Write/Notify基本操作服务发现、特征配置等高级操作

4. 协同工作流程示例

以心率监测器为例:

  1. 服务发现(GATT层):

    • 客户端发送Primary Service Discovery请求

    • 服务器返回包含"心率服务"UUID的响应

  2. 特征发现(GATT层):

    • 客户端在找到的服务中查找特征

    • 发现"心率测量"特征及其属性句柄

  3. 启用通知(ATT层):

    • 客户端写入CCC描述符(Client Characteristic Configuration)

    • 使用ATT的Write Request操作

  4. 数据传输(ATT层):

    • 服务器通过ATTHandle Value Notification推送心率数据

    • 客户端接收并处理通知

5. 关键区别与联系

  1. 架构关系

    • GATT完全构建在ATT之上

    • ATT是"如何传输",GATT是"传输什么及如何组织"

  2. 功能分工

    • ATT负责:

      • 属性寻址

      • 基本CRUD操作

      • 错误处理

    • GATT负责:

      • 服务发现

      • 特征属性解析

      • 标准配置文件实现

  3. 实际应用

    • 开发者通常直接使用GATT API

    • ATT操作由协议栈内部处理

6. 典型应用场景

  1. ATT直接使用场景

    • 自定义简单设备

    • 需要极致精简协议栈的情况

    • 私有数据交换

  2. GATT标准应用场景

    • 健康设备(心率、血压)

    • 智能家居设备

    • 所有采用标准BLE服务的设备

7. 协议交互示例

ATT原始通信示例:

Client → Server: Read Request (Handle=0x0012)
Server → Client: Read Response (Value=0x5A)

对应的GATT级操作:

// 应用层代码(如读取电池电量)
ble_gattc_read(conn_handle, 0x0012, on_read_response);

ATT和GATT的组合实现了BLE设备间高效、灵活的数据交换,ATT提供了基础通信机制,而GATT在此基础上建立了标准化、可互操作的服务框架,二者协同工作使得BLE成为物联网应用的理想选择。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值