解析后的地址没有失效期,为避免丢失,请自行收藏网址!
后续也可以直接访问 代下牛 www.dxn666.cn 自助解析!

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

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

 
所有文章汇总
 


ble_stack

1、简介

由上面章节的描述可知,在BLE协议栈中:

  1. Physical Layer负责提供一系列的Physical Channel
  2. 基于这些Physical ChannelLink Layer可在两个设备之间建立用于点对点通信的Logical Channel
  3. 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协议定义了两个角色:serverclient。它允许serverclient提供一些可操作的属性信息。

一个属性其包含了如下几个信息

在这里插入图片描述

  • attribute handleserver端的属性的唯一标识,通常用16bit的值表示,用作唯一识别Attribute server上的所有AttributeAttribute Handle的存在有如下意义:

    • 一个server上可能存在多个相同typeAttribute,显然,client有区分这些Attribute的需要。
    • 同一类型的多个Attribute,可以组成一个Groupclient可以通过这个Group中的起、始handle访问所有的Attributes
  • attribute type:使用通用唯一标识符(UUID:universally unique identifier)来表示,类似于我们常说的“温度”、“湿度”等人类可识别的术语。

  • attribute Valueattribute 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有:CommandsRequestsConfirmations
  • 服务端发送到客户端的PDU有:ResponsesNotificationsIndications

4.1 包格式

img

  • Attribute OpcodeBit5-0用于标识每一条ATTPDU类型,bit6用于标识该PDU是否为Command(当该标志设置为1,表示这是一个命令),bit7用于标识是否含有Authentication Signature字段。

  • Attribute Parameters:属性参数,包括各种参数等。

  • Attribute Signature:认证许可信息,该字段的存在,取决于Opcodebit7

 

其中,ATTPDU的Opcode字段取值有

在这里插入图片描述

每一个类型对应不同的命令,不同的命令又对应不同的参数!

 

4.2 Attribute Protocol PDUS

下面介绍一些ATT协议所涉及的PDU

4.2.1 MTU Exchange

image-20220830085909896

这里涉及两个命令:

  • Exchange MTU Request:客户端通知服务端,最大接收的MTU大小

image-20220830090108831

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

image-20220830090116646

4.2.2 Reading Attributes

该分类下又有好多获取信息的方法,下面仅列举一部分:

  • Read by Group Type Request:在指定的handle范围内,获取已知属性类型的属性值

image-20220830090637116

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

image-20220830090738431

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

image-20220830090818041

 

4.2.3 ATT Protocol PDUs 汇总

下面主要介绍ATT所涉及的一些协议PDU类型

image-20220830110442510

image-20220830110452846

 

5、ATT PDU 包的封装流程

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

在这里插入图片描述

在这里插入图片描述

 

6、参考文章

[1]:https://yoshin.blog.csdn.net/article/details/122885317

[2]:https://blog.csdn.net/chengbaojin/article/details/108142146

 

img
img