【翻译】Bluetooth Core Specification Version 5.2 Feature Overview
【翻译】蓝牙 5.2 核心功能概述
总览
增强的 ATT 协议
ATT 协议是蓝牙提供的一种基于蓝牙协议的协议,它是蓝牙协议的一部分,用于提供蓝牙设备之间的通信。新的 EATT 协议在 ATT 的基础上有所增强。GATT (Generic Attribute Profile) 协议是 EATT 协议的一部分,它是蓝牙设备之间的通信的核心协议。
EATT 支持并发,可协商的 MTU。 因此在降低延迟和提高效率的同时,EATT 协议提供了更多的功能。
EATT 同时提供了新的 L2CAP 模式 (L2CAP Enhanced Credit Based Flow Control Mode), 这是一种流量控制协议。
EATT 只能在加密的协议下使用
LE 功率
现在可以在传输过程中调整传输功率了,这是可协商的。
同时还提出了 zones
的概念,这是一种更加灵活的功率控制方式。用来报告链路上的功率消耗。
好处是
- 动态电源管理
- 最优化信号强度
- 2.4 Ghz 的共存 (因为有很多设备都工作在这一频率)
LE 同步频道
1 拖 n 的音频播放、音响组的播放,拥有新的音频配置文件
增强的 ATT 协议
背景
以下是蓝牙 5.1 的部分
具有 GATT、GAP 和 ATT 的低功耗蓝牙堆栈
LE 分为两个部分,controller 和 host。HCI 提供了链路层到物理层之间的抽象。
同时 LE 支持 mesh。
属性协议 Attribute Protocol
蓝牙设备可能包含一组特殊的数据,称为Service、Characteristics和Descriptor,每一个都是一种属性。所有类型的属性都组织在称为属性表的东西。
Characteristics 是性能
Services 是 Characteristics 的集合,用来表示一个特定的功能,通过表达含义和规则的方式。
Characteristics 有很多 Descriptor,Descriptor类似注册表,例如,客户端特征配置描述符 (CCCD) 允许远程设备启用或禁用包含特征值的通知 PDU 的发送。
ATT 协议提供了一种简单的方式(属性协议)来描述属性表。ATT 客户端 (ATT Client)使用 ATT 来发现远程连接设备 (ATT Server)的属性表。例如,客户端可以查询属性表,并且可以查询属性表中的特征值,并在值改变的时候要求 Server 通知 Client。(但不强制要求可达,分为 notification 和 indication)
ATT 是连接蓝牙设备中的应用程序使用协议定义的 PDU 和更高级别规范(例如通用属性配置文件 (GATT))中定义的程序相互交互的主要机制之一。
ATT 定义了 事物 (transaction),一个事物包含一个请求和一个响应。大部分 ATT 类型是面向事物的,例如请求和响应。还有与事物无关的,例如通知和命令。
逻辑链路控制和适配协议 (L2CAP)
L2CAP 负责协议复用、流量控制以及服务数据单元 (SDU) 的分段和重组。
L2CAP 使用 通道 Channel 来在堆栈层之间传递数据包。其中固定的通道无需设置,立即可用,和一个特定的高层协议绑定,比如 ATT 协议。
通道也可以通过指定的协议服务复用器 (PSM) 值动态创建并与协议相关联。
L2CAP 和协议复用
L2CAP 协议多路复用确保 SDU 向上传递到适当的层进行处理。
L2CAP 和流量控制
L2CAP 协议提供了一种简单的流量控制机制,可以控制 SDU 的大小。流控制涉及确保堆栈的一层产生数据包的速率不超过同一堆栈中或远程设备上的层处理这些数据包的速率。没有流量控制,就有风险,比如buffer 溢出产生。
基于积分 (Credit) 的流量控制是多种可能的流量控制方法之一。总的来说,它的工作原理如下:
发送设备根据它可以处理的 PDU 数量而不丢失数据(例如,通过其缓冲区溢出)了解接收设备的容量。在数据传输开始之前,它通过配置或通过在两个设备之间进行的交换来获取此容量信息。
发送设备在每个 PDU 中提供一个 计数器 。在数据传输开始之前,它通过配置或通过在两个设备之间进行的交换来获取容量信息。每次发送器发送 PDU 时,计数器都会递减。当计数器值达到零时,发送器知道接收器已满负荷,因此在接收器处理其积压时暂时停止发送更多 PDU。计数器就是一个 Limitation。
而接收器处理完之后会将处理完的数量返回给发送器。计数器会增加。这样发送器就可以平衡接收器的处理速度与自己的发送速度。
蓝牙 5.1 中的 LDCAP 定义了几种操作模式,很多都与流量控制相关。当蓝牙 5.1 协议以 L2CAP Basic mode 传输的时候,流量控制是不可用的,此时需要考虑中途丢包的可能性。通过诸如 notification
的方式,传输设备可以知道远程设备是否收到 PDU,但是无法知道 PDU 是否成功的传送到接受应用程序的栈顶。
L2CAP 的分割与重组
L2CAP 上下层所能发送的 PDU 的数量是有限的,受限于各自的 MTU, MTU 定义了一个 PDU 的最大字节数。L2CAP 的上下层拥有不一样的 MTU 大小,因此需要将 PDU / SDU 分割为较小的 PDU / SDU,这样才便于其相邻的层去处理。
并行与延迟
有许多与 L2CAP 和 ATT 协议的相关问题会影响延迟,尤其是多个应用程序在使用堆栈的时候。
ATT 顺序事务模型
ATT 采用顺序事务模型。在蓝牙 5.1 的时候,这个模型意味着当 ATT 协议在传输的时候,直到完成,其它的 ATT PDU 不能再被放到堆栈上。当收到回应的 PDU 或者超时 ( 30s ) 的时候,堆栈会解锁。
由于堆栈可能同时在与多个设备通讯,因此当 A 在用事务型 ATT 传输的时候 B 是无法用事务型 ATT 传输的。这可能会产生等待,并增加延迟。
ATT MTU 和 L2CAP MTU 大小
在蓝牙 5.1 的标准中, ATT 的 L2CAP 的 MTU 值是一样的,这导致 L2CAP 无法交错处理来自不同应用程序和不同 ATT PDU 的 L2CAP SDU。但有些情况下是有用的,因为可以传输非事务型的 ATT ,例如值通知。但是如果 L2CAP 层已经在处理一个大的 L2CAP PDU,将它提交给控制器进行处理,来自第二个应用程序的通知仍然需要等待 L2CAP 变得可用。
MTU 重新协商
连接后可以立即协商 ATT MTU,使用 ATT_Exchange_MTU 请求和响应 PDU。但是,一旦协商,在此连接期间不能更改。如果同一设备上的第二个应用程序随后开始使用相同的连接,并且发现 MTU 大小不足以满足其目的,则它别无选择,只能失败,在此过程中给用户带来糟糕的用户体验。
关于增强 ATT 协议
本节回顾了蓝牙核心规范 5.2 版中新的增强属性协议 (EATT) 和相关更改。
能力和优势
EATT 修改了顺序事务模型,使并发 ATT 事务在不同的增强型 ATT 承载上进行时成为可能。
L2CAP 层添加了一种新模式,供 EATT 使用。新的 L2CAP 模式提供了流量控制,因此可以认为 EATT 是可靠的。
ATT 层和 L2CAP 层的 MTU 值已独立配置,这可能会减少一些与其他应用程序共享堆栈的应用程序所经历的延迟。
技术亮点
L2CAP基于增强信用的流量控制模式
定义了一种新的 L2CAP 模式,称为基于增强信用的流量控制模式。它始终由与增强属性协议一起使用的 L2CAP 通道使用,类似于旧的基于 LE 信用的流量控制模式,但可以与蓝牙 LE 和 BR/EDR 一起使用,并允许 MTU 和最大 PDU 有效负载大小 (MPS)动态重新配置。
EATT 使用的 L2CAP 通道因此使用基于增强信用的流控制模式称为增强型 ATT 承载,而当 ATT 使用 L2CAP 通道时,它称为非增强型 ATT 承载
EATT 始终使用动态而不是固定的 L2CAP 通道,但具有新的协议服务多路复用器 (PSM) 值。增强型 ATT 承载使用的 L2CAP 信道是使用新的 L2CAP PDU
、L2CAP_CREDIT_BASED_CONNECTION_REQ
和 L2CAP_CREDIT_BASED_CONNECTION_RSP
创建的。请注意,使用新的 L2CAP_CREDIT_BASED_CONNECTION_REQ PDU
一次最多可以请求 5 个通道。