【蓝牙协议栈】【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

相关文章

Python进阶之Excel基本操作介绍

《Python进阶之Excel基本操作介绍》在现实中,很多工作都需要与数据打交道,Excel作为常用的数据处理工具,一直备受人们的青睐,本文主要为大家介绍了一些Python中Excel的基本操作,希望... 目录概述写入使用 xlwt使用 XlsxWriter读取修改概述在现实中,很多工作都需要与数据打交

java脚本使用不同版本jdk的说明介绍

《java脚本使用不同版本jdk的说明介绍》本文介绍了在Java中执行JavaScript脚本的几种方式,包括使用ScriptEngine、Nashorn和GraalVM,ScriptEngine适用... 目录Java脚本使用不同版本jdk的说明1.使用ScriptEngine执行javascript2.

Java如何通过反射机制获取数据类对象的属性及方法

《Java如何通过反射机制获取数据类对象的属性及方法》文章介绍了如何使用Java反射机制获取类对象的所有属性及其对应的get、set方法,以及如何通过反射机制实现类对象的实例化,感兴趣的朋友跟随小编一... 目录一、通过反射机制获取类对象的所有属性以及相应的get、set方法1.遍历类对象的所有属性2.获取

Python实现NLP的完整流程介绍

《Python实现NLP的完整流程介绍》这篇文章主要为大家详细介绍了Python实现NLP的完整流程,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 编程安装和导入必要的库2. 文本数据准备3. 文本预处理3.1 小写化3.2 分词(Tokenizatio

Java如何接收并解析HL7协议数据

《Java如何接收并解析HL7协议数据》文章主要介绍了HL7协议及其在医疗行业中的应用,详细描述了如何配置环境、接收和解析数据,以及与前端进行交互的实现方法,文章还分享了使用7Edit工具进行调试的经... 目录一、前言二、正文1、环境配置2、数据接收:HL7Monitor3、数据解析:HL7Busines

vue如何监听对象或者数组某个属性的变化详解

《vue如何监听对象或者数组某个属性的变化详解》这篇文章主要给大家介绍了关于vue如何监听对象或者数组某个属性的变化,在Vue.js中可以通过watch监听属性变化并动态修改其他属性的值,watch通... 目录前言用watch监听深度监听使用计算属性watch和计算属性的区别在vue 3中使用watchE

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

图神经网络模型介绍(1)

我们将图神经网络分为基于谱域的模型和基于空域的模型,并按照发展顺序详解每个类别中的重要模型。 1.1基于谱域的图神经网络         谱域上的图卷积在图学习迈向深度学习的发展历程中起到了关键的作用。本节主要介绍三个具有代表性的谱域图神经网络:谱图卷积网络、切比雪夫网络和图卷积网络。 (1)谱图卷积网络 卷积定理:函数卷积的傅里叶变换是函数傅里叶变换的乘积,即F{f*g}