【Bluetooth蓝牙开发】八、BLE协议之ATT

个人主页:董哥聊技术 我是董哥,嵌入式领域新星创作者 创作理念:专注分享高质量嵌入式文章,让大家读有所得!

【所有文章汇总】
文章目录
-
-
1、简介
-
2、为什么要有ATT协议
-
3、ATT数据结构
-
4、ATT PDU
-
- 4.1 包格式
- 4.2 Attribute Protocol PDUS
-
- 4.2.1 MTU Exchange
-
4.2.2 Reading Attributes
-
4.2.3 ATT Protocol PDUs 汇总
-
5、ATT PDU 包的封装流程
-
6、参考文章

-
1、简介
由上面章节的描述可知,在BLE协议栈中:
Physical Layer负责提供一系列的Physical Channel;- 基于这些
Physical Channel,Link Layer可在两个设备之间建立用于点对点通信的Logical Channel; - 而
L2CAP则将这个Logical Channel换分为一个个的L2CAP Channel,以便提供应用程序级别的通道复用。到此之后,基本协议栈已经构建完毕,应用程序已经可以基于L2CAP欢快的run起来了。
在L2CAP之上,就是ATT协议了,那么ATT又是什么呢?
ATT(Attribute Protocol),This specification defines the Attribute Protocol; a protocol for discovering, reading, and writing attributes on a peer device
ATT (Attribute Protocol),BLE属性协议,它是处于L2CAP协议层与GATT之间的一层属性操作协议,用于在一对蓝牙设备之间发现、读取、写入属性。
2、为什么要有ATT协议
谈起应用程序,就不得不说BLE的初衷----物联网。物联网中传输的数据和传统的互联网有什么区别呢?
抛开其它不谈,物联网中最重要、最广泛的一类应用是:信息的采集 。
这些信息往往都很简单,如温度、湿度、速度、位置信息、电量、等等。采集的过程也很简单,节点设备定时的向中心设备汇报信息数据,或者,中心设备在需要的时候主动查询。基于信息采集的需求,BLE抽象出一个协议:Attribute protocol,该协议将这些“信息”以“Attribute(属性)”的形式抽象出来,并提供一些方法,供远端设备(remote device)读取、修改这些属性的值(Attribute value)。
3、ATT数据结构
ATT协议定义了两个角色:server和client。它允许server向client提供一些可操作的属性信息。
一个属性其包含了如下几个信息 :

attribute handle :server端的属性的唯一标识,通常用16bit的值表示,用作唯一识别Attribute server上的所有Attribute。Attribute Handle的存在有如下意义:
* 一个`server`上可能存在多个相同`type`的`Attribute`,显然,`client`有区分这些`Attribute`的需要。
* 同一类型的多个`Attribute`,可以组成一个`Group`,`client`可以通过这个`Group`中的起、始`handle`访问所有的`Attributes`。
attribute type :使用通用唯一标识符(UUID:universally unique identifier)来表示,类似于我们常说的“温度”、“湿度”等人类可识别的术语。
attribute Value :attribute type所对应的值,可以是一个数组,或者一个单一的值
permission :属性访问权限
* 访问有关的权限(access permissions),Readable、Writeable以及Readable and writable;
* 加密有关的权限(encryption permissions),Encryption required和No encryption required;
* 认证有关的权限(authentication permissions),Authentication Required和No Authentication Required;
* 授权有关的权限(authorization permissions),Authorization Required和No Authorization Required。
注意:这里说的数据结构不是在空中传播的数据结构,而是一条属性在存储器中定义的数据结构。
4、ATT PDU
Attribute PDU用于空中传播,其有几种类型:
- 客户端发送到服务端的
PDU有:Commands 、Requests 、Confirmations - 服务端发送到客户端的
PDU有:Responses 、Notifications 、Indications
4.1 包格式

Attribute Opcode : Bit5-0用于标识每一条ATTPDU类型,bit6用于标识该PDU是否为Command(当该标志设置为1,表示这是一个命令),bit7用于标识是否含有Authentication Signature字段。
Attribute Parameters :属性参数,包括各种参数等。
Attribute Signature :认证许可信息,该字段的存在,取决于Opcode的bit7
其中,ATTPDU的Opcode字段取值有:

每一个类型对应不同的命令,不同的命令又对应不同的参数!
4.2 Attribute Protocol PDUS
下面介绍一些ATT协议所涉及的PDU
4.2.1 MTU Exchange

这里涉及两个命令:
-
Exchange MTU Request :客户端通知服务端,最大接收的
MTU大小

-
Exchange MTU Response :服务端回复客户端,支持的最大
MTU大小

4.2.2 Reading Attributes
该分类下又有好多获取信息的方法,下面仅列举一部分:
-
Read by Group Type Request :在指定的
handle范围内,获取已知属性类型的属性值

-
Read by Group Type Response :回复
request命令,包含要获取的属性值信息

通过抓包,可以看到该数据结构如下:

4.2.3 ATT Protocol PDUs 汇总
下面主要介绍
ATT所涉及的一些协议PDU类型


5、ATT PDU 包的封装流程
下图是ATT层将构建好的数据下发的流程,可以直观的理解数据包的封装流程!


6、参考文章
[1]:
[2]:


