BLE-11の蓝牙4.1协议栈详解の通用属性协议(GATT)

蓝牙4.1协议栈详解の属性-ATT&GATT

本帖子是整合书籍,网上优质帖来来,文末给出了出处。

本小节的内容有:属性层(ATT) 和 通用属性规范层(GATT)。

角色

客户端:使用其他设备的数据的设备。

服务器:提供数据的设备

数据与状态
一般地,
数据:数据是一个值,它反映了某种客观性质,比如温度计测出房间的温度。
状态:反映了设备当前的状况和处境:他在做什么,是怎么运作的。温度计测量室温,室温度数就反应了房间温度的状态。

本节中,
“状态”:指的是保存在服务器上的信息;所以服务器可以认为是一个持有多种状态信息的设备。BLE中有三种不同种类的状态:

  • 外部状态(传感器测室温,测电池电量等),
  • 内部状态(通话状态,GSP接收机同步状态)
  • 抽象状态(只和某一个瞬间有关状态信息,如命令灯光切换开关状态,要求立即报警,启动设备同步等。在属性协议里,这些抽象状态称作控制点);

“数据”:指的是服务器传给客户端的信息;所以客户端认为是读写状态信息或者在本地缓存为数据的设备。

服务(service)和规范(profile)

从经典蓝牙到低功耗,最有趣的转变是服务和规范的体系结构。
经典蓝牙里的规范和协议大多定义的是行为与交互指南,极其复杂,其中:

问题一:这些规范难以定义一个明确的状态。这些规范仅定了两种设备类型,位于链路两端,再对各自的行为分别定义。
问题二:现有的规范几乎无法用于当初没有预想过的新场景。

BLE 大刀阔斧的对这一问题进行了重设。
它采用了纯粹的“客户端-服务器”的结构,针对不同的用例对服务器和客户端的行为单独进行描述。服务器的行为在服务器规格书中定义,而用户(客户端)的行为在另一个规范说明中定义。

这样做的好处是:

服务器的行为将是预先定义并可知的。他只会做服务说明中定义的“该做”的事情,不会关心关心客户端怎么去使用它。
服务器的行为有服务定义,而不由规范定义,因此规范变的相当的简洁。客户端规范在本质上是一组有关发现,连接,配置和使用各种服务的规则。服务也包括了如何执行客户端要求的一系列操作的标准步骤。

这意味着他们跳出了规范的范畴,服务定义了设备如何交互,而规范不过是某些应用场合下执行交互的标准做法。

属性(Attribute)

宽泛的说,属性是一条带有标签的,可以被寻址的数据。.

BLE-11の蓝牙4.1协议栈详解の通用属性协议(GATT)_第1张图片
属性句柄:是一个16位的地址,有效范围为0x0001 ~ 0xFFFF;可以把句柄理解成内存地址,端口号,属性值对应的硬件寄存器地址。
属性类型:所公开的数据的种类称作属性类型(如温度,压强,体积,距离,时间,开关状态等等)。他用通用位移识别码表示(UUID)。
属性值:用于表示设备公开的状态信息。

具体的在下面这个帖子中说的不错,我真的懒得写了,因为我看的这本书逻辑性比较差,而我又比较菜鸟,先接大佬的贴学习下 :

蓝牙BLE: ATT协议层中属性(Attribute)

这个帖子里讲的记好,或者说是顶好呀“:

BLE4.0教程二 蓝牙协议之服务与特征值分析

蓝牙4.0版本推出了低功耗规范,引入了两个核心协议:ATT(Attribute Protocol)和GATT(Generic Attribute Protocol).这两个协议主要目标是BLE,但是也可以运行在传统蓝牙上(BR/EDR)。

ATT主要是规定了"属性"的定义,GATT则是将这些"属性"包装成我们上面所讲的服务、特征值等。

那我们是怎么搭建起来我们的服务的呢?
大概可以概述为,由一个个属性搭建起来的东西。如下图,每一个属性就会告诉使用者说,我是什么,我带有什么,你能对我做什么,即描述,值,权限。
BLE-11の蓝牙4.1协议栈详解の通用属性协议(GATT)_第2张图片
上图是一个简单的表述,真正的属性表如下图。
BLE-11の蓝牙4.1协议栈详解の通用属性协议(GATT)_第3张图片

附:

0x2800,0x2803:
在这里插入图片描述

0xFFE1:不知道呀
0x2902:
在这里插入图片描述

你可能感兴趣的:(BLE蓝牙技术原理)