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

相关文章

JSR-107缓存规范介绍

《JSR-107缓存规范介绍》JSR是JavaSpecificationRequests的缩写,意思是Java规范提案,下面给大家介绍JSR-107缓存规范的相关知识,感兴趣的朋友一起看看吧... 目录1.什么是jsR-1072.应用调用缓存图示3.JSR-107规范使用4.Spring 缓存机制缓存是每一

Spring Cache注解@Cacheable的九个属性详解

《SpringCache注解@Cacheable的九个属性详解》在@Cacheable注解的使用中,共有9个属性供我们来使用,这9个属性分别是:value、cacheNames、key、key... 目录1.value/cacheNames 属性2.key属性3.keyGeneratjavascriptor

Spring Boot 事务详解(事务传播行为、事务属性)

《SpringBoot事务详解(事务传播行为、事务属性)》SpringBoot提供了强大的事务管理功能,通过@Transactional注解可以方便地配置事务的传播行为和属性,本文将详细介绍Spr... 目录Spring Boot 事务详解引言声明式事务管理示例编程式事务管理示例事务传播行为1. REQUI

Java中 instanceof 的用法详细介绍

《Java中instanceof的用法详细介绍》在Java中,instanceof是一个二元运算符(类型比较操作符),用于检查一个对象是否是某个特定类、接口的实例,或者是否是其子类的实例,这篇文章... 目录引言基本语法基本作用1. 检查对象是否是指定类的实例2. 检查对象是否是子类的实例3. 检查对象是否

什么是ReFS 文件系统? ntfs和refs的优缺点区别介绍

《什么是ReFS文件系统?ntfs和refs的优缺点区别介绍》最近有用户在Win11Insider的安装界面中发现,可以使用ReFS来格式化硬盘,这是不是意味着,ReFS有望在未来成为W... 数十年以来,Windows 系统一直将 NTFS 作为「内置硬盘」的默认文件系统。不过近些年来,微软还在研发一款名

C#使用StackExchange.Redis实现分布式锁的两种方式介绍

《C#使用StackExchange.Redis实现分布式锁的两种方式介绍》分布式锁在集群的架构中发挥着重要的作用,:本文主要介绍C#使用StackExchange.Redis实现分布式锁的... 目录自定义分布式锁获取锁释放锁自动续期StackExchange.Redis分布式锁获取锁释放锁自动续期分布式

redis过期key的删除策略介绍

《redis过期key的删除策略介绍》:本文主要介绍redis过期key的删除策略,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录第一种策略:被动删除第二种策略:定期删除第三种策略:强制删除关于big key的清理UNLINK命令FLUSHALL/FLUSHDB命

Pytest多环境切换的常见方法介绍

《Pytest多环境切换的常见方法介绍》Pytest作为自动化测试的主力框架,如何实现本地、测试、预发、生产环境的灵活切换,本文总结了通过pytest框架实现自由环境切换的几种方法,大家可以根据需要进... 目录1.pytest-base-url2.hooks函数3.yml和fixture结论你是否也遇到过

Nginx中配置HTTP/2协议的详细指南

《Nginx中配置HTTP/2协议的详细指南》HTTP/2是HTTP协议的下一代版本,旨在提高性能、减少延迟并优化现代网络环境中的通信效率,本文将为大家介绍Nginx配置HTTP/2协议想详细步骤,需... 目录一、HTTP/2 协议概述1.HTTP/22. HTTP/2 的核心特性3. HTTP/2 的优

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA