什么是Enhance ATT
Enhance ATT是蓝牙5.2引入的一种新特性,是对ATT和L2CAP上做了改进,一方面使得多个应用的ATT可以并发进行处理,而不用各个应用分时处理,另一方面Enhance ATT可以使用一个数据包来传输多个服务特征数据的一个机制。
Enhance ATT简介
了解Enhance ATT之前先回顾一下BLE的ATT,BLE两个设备连接之后,GATT的client端如何知道server端支持了哪些profile、服务,这个就需要ATT, ATT层提供了标准机制、协议、帧格式,用来发现读、读取、写入对端设备的属性,ATT有client 和serve两个角色。
在ATT的下层是L2CAP,位于hci的上层,L2CAP提供了多路通道的复用,ATT层、SM层的数据都需要经过L2CAP层,L2CAP层通过标志位来区分不同的协议层的数据包。L2CAP负责对数据进行分包和重组,同时还有重传、流控、错误检查等。
Enhance ATT的使用
Enhance ATT主要是对ATT和L2CAP上做了改进,在L2CAP上加入了新的流控模式,在该模式上建立ATT就称之为 Enhance ATT,也称为EATT。EATT 不仅可以用在BLE上,而且还可以使用在经典蓝牙BR/EDR上。
- L2CAP上的改进
使用L2CAP_CREDIT_BASED_CONNECTION_REQ 命令,在两个设备之间创建并配置L2CAP Channel,Enhance ATT模式可以使两个设备之间建立最多5个L2CAP通道,并且是动态的,这样可以为上层ATT带来更多的灵活性,可以同时支持5个上层通道,一些并发执行的应用就可以使用EATT来进行传输。
例如,这在可能有多个应用程序与低功耗蓝牙设备接口的智能手机上非常有用。通过利用EATT,在进行另一个应用程序的ATT事务时,一个应用程序的属性事务不会被阻止,从而实质上允许不同的应用程序与Bluetooth Low Energy设备并行交互,并有可能减少延迟。
Enhance ATT承载的ATT_MTU应设置为两个设备的最低MTU字段值;这些值来自L2CAP_CREDIT_BASED_CONNECTION_REQ和L2CAP_CREDIT_BASED_CONNECTION_RSP信令数据包或最新的L2CAP_CREDIT_BASED_RECONFIGURE_REQ数据包。
- ATT上的改进
ATT上主要是支持元组的ATT数据的读取和通知
master端可以通过ATT_READ_MULTIPLE_VARIABLE_REQ命令来读取多个handle的特征值,设备端可以使用一包数据将所有handle的数据全部返回给master。
slaver端同样也可以通过ATT_MULTIPLE_HANDLE_VALUE_NTF命令来通知master端,将多个handle的数据一次性发送给master端。
例如一个温湿度传感器可以一次性将温度、湿度、电量、设备信息等多个handle的特征值发送给手机端,而不是每个特征逐个发送。 手机端也可以一次性读取多个温度、湿度、电量、设备信息多个特征值,而不用逐条读取。
Enhance ATT的优势
EATT 的主要优势是可以支持并发的事件操作,允许来自不同应用程序与ATT 相关的数据封包进行逻辑链路控制和适配协议(L2CAP) 数据封包交错放置,并允许在连接过程中改变ATT 最大传输单元(MTU) 的大小。若一个装置上同时有多个应用程序使用低功耗蓝牙堆栈,它们或会暂时互相阻挡,而EATT 这些改进可以减少这些情况,从而减少一个或多个应用程序的点对点延迟,并且改善响应性能,提供更好的用户体验。与原始ATT 相比,增强版的EATT 具有安全性的优势,因为它只能用于加密连接。
减少重复的帧开销,减少频带的占用,在需要多个特征值读取和发送的时候,对功耗有一定的优化。