本文共 1922 字,大约阅读时间需要 6 分钟。
属性协议(ATT,Attribute Protocol)是蓝牙低能耗(BLE)协议栈中最底层的协议,负责管理设备间的通信。它定义了属性的存储方式、访问权限以及数据传输规则,是GATT(属性协议栈)和GAP(关联协议)运行的基础。
在ATT层中,**属性(Attribute)**是核心概念,它定义了设备间通信的数据结构。属性包括以下四个关键部分:
属性句柄(Attribute Handle)
作为属性操作的入口,属性句柄是一个2字节的十六进制代码,范围在0x0001到0xFFFF之间。它类似于内存中的指针,允许客户端(client)通过句柄来访问特定属性。属性类型(Attribute Type)
属性类型由UUID(通用唯一识别码)决定,用于区分属性的种类。例如,UUID 0x1800表示首要服务项(Primary Service),而0x2A00则表示设备名称(Device Name)。BLE协议中定义了有限的属性类型,具体包括:属性值(Attribute Value)
用于存储实际数据。对于服务项或特征值声明,属性值是其对应的UUID;对于普通特征值,属性值则是用户的实际数据。属性权限(Attribute Permissions)
定义了属性的访问规则,包括:属性可以分为三种类型:服务项(Service)、特征值(Characteristic)和描述符(Descriptor)。它们之间存在树状关系:
例如,体重计和心率计的属性规范由SIG(蓝牙技术联盟)定义。设备主从只需遵循特定的Profile即可实现通信。
BLE协议栈中使用GattDB(属性数据库)来存储属性信息。GattDB是内存中的一个专用区域,启动时会被写入Flash存储器并加载。例如,CyBle_gattDB数组存储了设备的所有属性信息,包括句柄、属性类型、访问权限等。
特征值的声明和实际特征值项分开管理。例如,设备名称的特征值声明(Characteristic Declaration)和特征值项(Characteristic Value)分别存储不同的信息。这种设计允许开发者在声明阶段指定特征值的类型和 UUID。
描述符用于扩展特征值的功能,提供额外的配置信息。例如,CCCD(Client Characteristic Configuration Descriptor)用于控制特征值的通知或指示功能。
在ATT层协议中,设备之间的通信通过六种不同的PDU(Protocol Data Unit)进行。这些PDU类型包括:
| PDU类型 | 发送方向 | 响应 | 描述 |
|---|---|---|---|
| Command | Client → Server | 无 | 用于发送命令,服务器无需响应 |
| Request | Client → Server | Response | 客户端请求服务器操作,服务器需返回响应 |
| Response | Server → Client | 无 | 服务器确认接收了客户端的请求 |
| Notification | Server → Client | 无 | 服务器主动向客户端发送通知 |
| Indication | Server → Client | Confirmation | 客户端需确认接收 |
| Confirmation | Client → Server | 无 | 客户端确认接收了服务器的指示 |
在实际开发中,ATT层的理解是开发BLE应用的基础。由于其与开发者接近且易于理解,但内容较为抽象,因此需要通过实例和实际协议分析来加深理解。
通过以上内容可以看出,属性协议(ATT)是BLE通信的核心,理解其结构和规则是开发BLE应用的关键。
转载地址:http://phxk.baihongyu.com/