BLE学习(3):ATT和GATT详解
创始人
2024-02-04 05:53:15

本文章将介绍在面向连接的蓝牙模式中,ATT(attribute protocol,属性协议)和GATT(generic attribute profile,通用属性配置文件)这两个重要的协议层,它与蓝牙的数据传输密切相关。

1 设备之间如何建立连接(Gap层)

若BLE设备之间要进行数据传输,就需要形成一个通信通道。GAP(通用访问配置文件)来负责这个通道的形成和维护。
GAP指示两台将要连接和通信的设备的角色,一台作为Central(一般为智能手机这种功能强大的设备),另一台作为Peripheral(一般指需要较少功率的设备)。设备之间建立连接的流程如下
(1)当作为Peripheral的设备准备好连接时,它必须进入广播状态并在主广播通道(37、38和39)上广播数据包
(2)作为Central的设备必须转换到Scanning状态,并在这三个通道上监听广播包。
(3)当检测到广播包时,Central通过发送连接请求包来向Peripheral发起连接请求。其中,Central设备负责管理连接,可以直接决定连接的一些参数,其中一些参数为:

  • Connection Interval:连接的间隔时间
  • Peripheral Latency:指定Peripheral可以忽略多少的连接事件
  • Channel Map:指定将使用37个数据传输通道中的哪一个进行传输

Central决定这些参数,以连接请求包的方式将这些参数发送到Peripheral,此时就创建了连接。接着,Central将在一个Connection Interval后向Peripheral发送数据包。如果Peripheral接收到数据包并向Central返回一个数据包,则认为连接已经建立。在这里插入图片描述
设备建立连接后,设备之间就可以进行双向数据传输。那么,数据传输到底是如何完成的呢?这就是ATT和GATT要做的事了。

2 ATT

2.1 角色

ATT协议定义了一些角色,每个角色都有它特定的功能。这些角色都是基于Client-Server架构的。

  • 服务器(Server):作为一个数据库,存储可被客户端读写的数据
  • 客户端(Client):请求服务器上的数据

但有一个误区:Central设备将作为ATT的客户端,Peripheral设备将作为ATT的服务端。但实际上CentralPeripheral都既可以做服务端,也可以做客户端。比如,一个可以记录步数、心率等信息的蓝牙智能手环。当手环想向手机传输这些信息的时候,它作为服务端,而手机作为客户端;手环上可以显示当前的时间,这是由手机传过去的,此时手机作为服务端,而手环作为客户端。

2.2 作为服务端时ATT的属性

服务端设备作为一个数据库来存储需要分享给客户端的数据。ATT服务端和Mysql、Oracle这些数据库一样,需要实现:存储和组织数据的方法、访问数据的标准机制。所以,ATT协议负责为服务端设备提供客户端能读写的指定格式化的数据,以及客户端访问、写入和读取数据的机制

1、Attributes
ATT协议定义了一个叫attribute的数据结构,该数据结构由下列四个字段组成:
在这里插入图片描述

  • Attribute Handle :用于给客户端查找一个服务端attributeuint16_t类型的唯一标识符,也就是给attribute一个“地址”
  • Attribute Type (UUID) :全局唯一的2或16字节的UUID标识符,定义储存于Attribute Value中的数值的具体类型和含义,UUID分为两种:Service UUIDCharacteristic UUID
  • Attribute Value:属性值
  • Attribute Permissions:它表示访问Attribute Value的权限,或者说设置一个属性的安全等级。

在服务端,数据以如下Attribute表格形式存储:
在这里插入图片描述
一个BLE服务端的所有Attributes都通过增加Attribute handle的值存储在它的数据库中。

  • 句柄之间可以有空隙,只要保证句柄值是按照递增顺序存储的即可

2、Attribute访问方式

ATT协议还定义了读写属性的方式。具体的方式取决于发起属性访问过程的是客户端还是服务端。
①客户端发起属性访问,有两种操作——WriteRead

  • 客户端使用Read从服务器读取属性的值,服务器响应属性的值。
  • 客户端使用Write将一个属性的值写入服务器,服务器响应写操作是否成功。

②服务端发起属性访问,有两种操作——NotificationIndication
在这里插入图片描述

  • Notification:当Attribute发生改变时,服务端使用该种方式向客户端发送更新后的属性值,客户端收到后不响应此操作
  • Indication:与Notification类似,但是客户端必须发送是否正确收到该Attribute的响应

3、Attribute访问权限
访问权限决定客户端是否可以读、写或读写其中某个属性值,可选权限如下:

  • None:没有读写权限
  • Readable:可读
  • Writable:可写
  • Readable and writable:可读写

注意:Attribute handleAttribute type是公共信息,而Attribute ValueAttribute Permissions是私有信息。为了让客户端可以访问这两个私有信息,服务端需要进行如下操作:

  • 读或写的身份验证
  • 读或写的授权
  • 读或写的加密和配对

从上面的分析可知,ATT协议通过增加属性的句柄数,以线性方式将数据作为Attribute存储在表中。但是,如果我们想要知道存储在服务器上的数据之间的关系,该怎么办呢?

  • 关系:类似于在电脑中文件和文件夹的关系,我们直观地理解同一文件夹中的文件是相关的,这将使得在复杂的关系中的查找变得更加容易。

GATT层负责定义分层数据结构,该结构演示了ATT服务器中存储的数据之间的关系或连接。

3 GATT

GATT协议层定义了一个框架,在该框架中,服务端数据库上的Attribute可以被组织起来而有一定的层次关系。GATT层定义了一个4层树形框架,其中根节点为Profile(配置),它有不同的Services(服务),不同的服务有不同的Characteristics(特征),不同的特征通过一个具体的Value(值)或者Descriptor(描述符)来定义,如下图所示。
在这里插入图片描述
1、Characteristic
Characteristic是一个基本的存储单元,每个Characteristic都是由valueDescriptor(描述符)组成的。

  • Characteristic Value:实际存储的应用数据
  • Descriptor:该字段可选,它会存储更多关于Characteristic的信息,比如Characteristic的范围(如整数类型,定义其范围只能在0~100间)、Characteristic单位等。
    • 一个非常常用的描述符是Client Characteristic Configuration Descriptor (CCCD),它用来使/失能GATT服务端某个CharacteristicIndicationsNotifications功能。当使能了某个Characteristic(CCCD的UUID固定为0x2902)的IndicationsNotifications功能后,每当服务端的该Characteristic值改变的时候,客户端都可以收到通知。

2、Services
Services主要用来组织数据而不是存储数据。一个Service可以包含多个Characteristics,比如对于蓝牙手环来说,有两个Services
①心率:包含两个Characteristics,一个是心率值,一个是CCCD
②设备信息:包含一个Characteristics,即设备信息

3、Profile
Profile是上面分层结构的最顶层,它包含了服务端支持的特定服务。有些服务是可选的,而有些服务是必须实现的,这是为了确保两个有相同GATT profile的设备能够相互通信。


服务端的Attribute Table的一个例子如下图所示,每个ServicesCharacteristics都是使用ATT中的Attributes数据结构描述的,他们都需要先声明。
在这里插入图片描述
同时,GATT层可以响应ATT requests,从而实现读写服务端的数据、获得GATT服务器的primary services和订阅/取消订阅服务端某个characteristicnotifications/indications等功能。

4 总结

  • ATT协议负责管理设备之间的数据存储。它为服务端提供了一种客户端可以进行读写的Attribute数据结构,并为客户端提供了访问、写入和读取数据的机制(访问方法和权限)。
  • GATT层定义了一个层次化的数据结构,它有助于理解存储在服务端中数据(GATT Profile)之间的关系。

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...