【蓝牙协议栈】【BLE】【ATT】低功耗蓝牙之属性协议介绍

2024-04-04 07:36

本文主要是介绍【蓝牙协议栈】【BLE】【ATT】低功耗蓝牙之属性协议介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1. 精讲蓝牙协议栈(Bluetooth Stack):SPP/A2DP/AVRCP/HFP/PBAP/IAP2/HID/MAP/OPP/PAN/GATTC/GATTS/HOGP等协议理论

2. 欢迎大家关注和订阅,【蓝牙协议栈】和【Android Bluetooth Stack】专栏会持续更新中.....敬请期待!

目录

1. ATT概念

2. ATT部分术语

2.1 属性类型(Attribute type)

2.2 属性句柄(Attribute handle)

2.3 属性句柄组(Attribute handle grouping)

2.4 属性值(Attribute value)

2.5 属性权限(Attribute permissions)

2.6 控制点属性(Control-point attributes)

2.7 协议方法(Protocol methods)

2.8 交互 MTU(Exchanging MTU size)

2.9 长属性值(Long attribute values)

2.10 原子操作(Atomic operations)


1. ATT概念

ATT,Attribute Protocol,用于发现、读、写对端设备属性的协议(针对 BLE设备),ATT分为两个角色:Server/Client,ATT允许设备作为服务端提供拥有关联值的属性集,让作为客户端的设备来发现、读、写这些属性;同时服务端能主动通知客户端。 整个 ATT协议在整个蓝牙协议栈中的位置如下:

在 L2CAP协议层之上,响下是基于 L2CAP的数据传输机制来通信!对了 BLE来说ATT有固定的 L2CAP CID,也就是 0x0004,如图所示:

向上为 GATT提供一些数据的交互方式,支持 GATT client跟 server之间 Feature的交互!

2. ATT部分术语

2.1 属性类型(Attribute type)

通过 UUID(universally unique identifier)来标识,说起 UUID一般分为16bit/32bit/128bit的 UUID,在 ATT协议中,32bit的 UUID必须转换为 128bit的 UUID! 另外,16bit的UUID是通过加一个128 bit的base uuid来转换为128bit的UUID,base UUID为:00000000-0000-1000-8000-00805F9B34FB,只所以本来 128bit的 UUID,大部分却采用 16 bit来发送数据,主要是为了提搞传输速率以及减少交互次数!

2.2 属性句柄(Attribute handle)

采用 16bit的值用于标识一个属性,范围是 0x0000~0xffff,0x0000是保留数值,0xffff是最大数值,所以我们一般不用!

2.3 属性句柄组(Attribute handle grouping)

Grouping是一由高层协议定义的一组属性,他们位于其他属性组之前,客户可以请求第一个和最后一个与属性组关联的 Handle

2.4 属性值(Attribute value)

Attribute value是一个字节数组,长度可能是固定的也可能是可变的,例如:可能是1个字节的值、或者4个字节的int、或者可变长度的字符串。一个attribute包含的attribute value长度可能大于一个PDU的长度,所以会分成多个PDU传输。Attribute value数组的编码由attribute type决定 在request、response、notification、indication中传输attribute value时,PDU中时没有attribute value length这个字段的,attribute value length是可以通过PDU数据包的长度计算出来的,这意味着: (1)在一个request、response、notification、indication中只能有一个attribute value,除非server和client都可以通过attribute type确attribute value的长度。 (2)在一个request、response、notification、indication中只有attribute value字段的长度是可变的 (3)bearer protocol (e.g. L2CAP)会保留数据包的边界 注意:有些response包含多个attribute value,但是这些attribute value的长度都是attribute type定义好的固定长度。

2.5 属性权限(Attribute permissions)

Attribute permissions是access permissions、encryption permissions、authentication permissions和authorization permissions的组合。 (1)access permissions用来表示attribute是否允许client进行读写,取值包括:Readable、Writeable、Readable and writable; (2)encryption permissions用来表示是否加密,取值包括:Encryption required、No encryption required (3)authentication permissions用来表示当client访问attribute value时是否需要一个已认证的物理链路,同样也表示当server向client发送notification和indication时是否需要一个已认证的物理链路,取值包括:Authentication Required、No Authentication Required (4)authorization permissions用来表示当client访问attribute value时是否需要授权,取值包括:Authorization Required、No Authorization Required

注意: (1)如果server设置authentication permissions为Authentication Required,但是client的链路没有通过认证,当client访问attribute value时,会收到错误码:«Insufficient Authentication»,此时client需要进行链路认证,认证成功后才能访问attribute value (2)如果server设置encryption permissions为Encryption required,但是client的链路没有加密,当client访问attribute value时,会收到错误码:«Insufficient Encryption»,此时client需要进行链路加密,加密成功后才能访问attribute value (3)如果server设置encryption permissions为Encryption required,client的链路已经加密,但是encryption key size小于要求的长度,当client访问attribute value时,会收到错误码:«Insufficient Encryption Key Size»,此时client需要用符合长度要求的link key进行加密,加密成功后才能访问attribute value

2.6 控制点属性(Control-point attributes)

不可读,但是可写,可通知(Notified)和可指示(Indicated)的属性被称为Control-Point Attribute高层协议可使用该属性来使能设备特定过程,比如设备上一个给定过程的命令或指示已经完成.

2.7 协议方法(Protocol methods)

ATT使用 Protocol Methods来发现、读、写、通知、指示属性,方法可分为如下几种 Request/Response/Command/Notification/Indication/Confirmation,如下图所示,这个我们会在后续详细介绍

2.8 交互 MTU(Exchanging MTU size)

ATT_MTU定义了 Client和 Server之间数据包的最大值;其默认值由高层协议来定义,Client和 Server可通过 Exchange MTU Request and Response PDUs来交换最大数据包然后均使用交换值中的最小值进行通信,同时作为 Server和Client的设备应该使用相同的 Client Rx MTU和 Server Rx MTU,每个 ATT Bearer均有其 ATT_MTU;当一个设备拥有多个 ATT Bearer时,不同 ATT Bearer的 ATT_MTU可能不同

2.9 长属性值(Long attribute values)

(1)一个数据包最大可以发送的attribute长度是ATT_MTU-1个字节,至少Attribute Opcode要占一个字节,如果attribute value的长度大于ATT_MTU-1个字节,则称为Long Attribute (2)read长度大于ATT_MTU-1个字节Attribute,需要使用read blob request,使用read request可能读取到前面的ATT_MTU-1个字节 (3)write长度大于ATT_MTU-3个字节Attribute,使用prepare write request和execute write request,使用write request可能写入前面的ATT_MTU-3个字节 (4)在ATT协议中无法确定一个attribute的长度是否可以大于ATT_MTU-3,在上层协议中将声明给定属性的最大长度可以大于(ATT_MTU-3)字节 (5)attribute value最大长度是512个字节

2.10 原子操作(Atomic operations)

Server应该将 Client的每个请求或命令视为不受影像的原子操作,如果一个链路由于某种原因断开,高层协议应当对属性值得修改负责!Long Attribute不能被单一的原子操作读、写!

这篇关于【蓝牙协议栈】【BLE】【ATT】低功耗蓝牙之属性协议介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/875181

相关文章

zookeeper端口说明及介绍

《zookeeper端口说明及介绍》:本文主要介绍zookeeper端口说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、zookeeper有三个端口(可以修改)aVNMqvZ二、3个端口的作用三、部署时注意总China编程结一、zookeeper有三个端口(可以

Python中win32包的安装及常见用途介绍

《Python中win32包的安装及常见用途介绍》在Windows环境下,PythonWin32模块通常随Python安装包一起安装,:本文主要介绍Python中win32包的安装及常见用途的相关... 目录前言主要组件安装方法常见用途1. 操作Windows注册表2. 操作Windows服务3. 窗口操作

python删除xml中的w:ascii属性的步骤

《python删除xml中的w:ascii属性的步骤》使用xml.etree.ElementTree删除WordXML中w:ascii属性,需注册命名空间并定位rFonts元素,通过del操作删除属... 可以使用python的XML.etree.ElementTree模块通过以下步骤删除XML中的w:as

c++中的set容器介绍及操作大全

《c++中的set容器介绍及操作大全》:本文主要介绍c++中的set容器介绍及操作大全,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录​​一、核心特性​​️ ​​二、基本操作​​​​1. 初始化与赋值​​​​2. 增删查操作​​​​3. 遍历方

如何在Spring Boot项目中集成MQTT协议

《如何在SpringBoot项目中集成MQTT协议》本文介绍在SpringBoot中集成MQTT的步骤,包括安装Broker、添加EclipsePaho依赖、配置连接参数、实现消息发布订阅、测试接口... 目录1. 准备工作2. 引入依赖3. 配置MQTT连接4. 创建MQTT配置类5. 实现消息发布与订阅

使用Python进行GRPC和Dubbo协议的高级测试

《使用Python进行GRPC和Dubbo协议的高级测试》GRPC(GoogleRemoteProcedureCall)是一种高性能、开源的远程过程调用(RPC)框架,Dubbo是一种高性能的分布式服... 目录01 GRPC测试安装gRPC编写.proto文件实现服务02 Dubbo测试1. 安装Dubb

HTML img标签和超链接标签详细介绍

《HTMLimg标签和超链接标签详细介绍》:本文主要介绍了HTML中img标签的使用,包括src属性(指定图片路径)、相对/绝对路径区别、alt替代文本、title提示、宽高控制及边框设置等,详细内容请阅读本文,希望能对你有所帮助... 目录img 标签src 属性alt 属性title 属性width/h

Python打印对象所有属性和值的方法小结

《Python打印对象所有属性和值的方法小结》在Python开发过程中,调试代码时经常需要查看对象的当前状态,也就是对象的所有属性和对应的值,然而,Python并没有像PHP的print_r那样直接提... 目录python中打印对象所有属性和值的方法实现步骤1. 使用vars()和pprint()2. 使

CSS3中的字体及相关属性详解

《CSS3中的字体及相关属性详解》:本文主要介绍了CSS3中的字体及相关属性,详细内容请阅读本文,希望能对你有所帮助... 字体网页字体的三个来源:用户机器上安装的字体,放心使用。保存在第三方网站上的字体,例如Typekit和Google,可以link标签链接到你的页面上。保存在你自己Web服务器上的字

MybatisPlus service接口功能介绍

《MybatisPlusservice接口功能介绍》:本文主要介绍MybatisPlusservice接口功能介绍,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友... 目录Service接口基本用法进阶用法总结:Lambda方法Service接口基本用法MyBATisP