蓝牙BLE学习-GATT和ATT

本文详细介绍了GATT(GenericAttributeProfile)在蓝牙低功耗(BLE)中的作用,包括服务端和客户端角色、属性结构(如句柄、UUID、值)、属性权限、ATT协议基础、服务、特性、描述符以及GAP的角色定义。还探讨了如何通过UUID管理数据和如何使用通知与指示功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. GATT

GATT-Generic Attribute profle-通用属性配置文件。GATT层是传输真正数据所在的层。包括了一个数据传输和存储架构以及其基本操作。GATT用来规范attribute中的数据内容,并运用group(分组)的概念对attribute进行分类管理。没有GATT,BLE协议栈也能跑。但互联互通就会出问题,也正是因为有了GATT和各种各样的应用profile,BLE摆脱了Zigbee等无线协议的兼容性困境,成为了出货量最大的2.4G无线通信产品。

GATT定义了两类角色:服务端(server)和客户端(client),GATT角色无需和GAP角色绑定,但是可能由更高层的规范进行指定。

除了GAP定义角色外(GAP定义广播者,扫描者,外围设备,中央设备),BLE还定义了另外2种角色:GATT服务端和GATT客户端。这两种角色完全独立于GAP的角色。提供数据的设备被称为GATT服务端,访问GATT服务端而获得数据的设备被称为GATT客户端。即一个设备可以同时作为客户端和服务端。通常情况下,外围设备为服务端,提供数据。手机作为客户端,访问数据。

 一个GATT服务器通过一个称为属性表的表格组织数据,这些数据就是用于真正发送的数据。

 2.属性ATT

属性协议(Attribute Protocol)简称ATT。是GATT和GAP的基础。

就属性来说,一个属性其实就是一条数据,属性是BLE数据提供单元,也是蓝牙空中传播数据的最上层,BLE开发过程中接触最多的就是这一层。

一个属性包含了句柄、UUID、值。数据的结构如下图:

2.1 Attribute Handle

属性句柄(Attribute Handle)占2个字节,犹如指向属性实体的指针,对端设备可以通过属性句柄来访问该属性

属性句柄值的范围:0x0000 ~ 0xFFFF

2.2 Attribute Type

属性类型(Attribute type)是用来区分当前属性是服务项还是特征值等,一般用UUID来表示。

UUID(universally unique identifier,通用唯一识别码)是一个软件构建标准,并非BLE独有的概念,一个合法的UUID,一定是随机的,全球唯一的,不应该出现两个相同的UUID。但是在一个GATT表中可能有许多属性,这些属性可能有相同的UUID。

BLE的属性类型主要有四个大类

 

Primary Service(首要服务项):0x2800

Secondary Service(次要服务项):0x2801

Include(包含服务项):0x2802

Characteristic(特征值):0x2803

常用的UUID: 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值