BLE4.2 简介

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BLE4.2 简介相关的知识,希望对你有一定的参考价值。

参考技术A 提到家庭和工业自动化、 物联网 (IoT)、可穿戴设备、人机接口设备(HID)众多应用的无线连接协议时,蓝牙一定是首选。为满足各种应用的需求,蓝牙技术联盟(SIG)对蓝牙规格进行了持续改进。发布4.1版大约一年后, SIG在2014年12月蓝牙发布了蓝牙规范4.2版。新的4.2主要包括三项更新 - 低功耗(LE)数据长度扩展(DLE)、链路层(LL)隐私保护以及安全性加强。这些功能提高了 BLE 数据带宽、隐私保护和安全性,同时还有助于降低功耗。本系列文章将详细讨论这些功能以及它们如何影响系统性能。

本文引用地址: http://www.eepw.com.cn/article/201611/339774.htm

蓝牙低功耗( BLE )协议栈可以分成三个部分:

  控制器:协议栈控制器对数据包进行了加密,转换为无线信号发送。在接收时,控制器将对无线信号解码,并重构数据包。

  主机:主机由管理两个或多个设备相互通信的各种协议和配置文件(安全管理器、属性协议等)组成。

  应用:可使主机和控制器实现一个特定功能的用例。

链路层(LL)

蓝牙4.2的大部分新功能都集中在链路层周围。链路层在建立可靠物理链路和功能中扮演着非常重要的角色,有助于提高 BLE 协议稳健性和能效。链路层功能包括广播、扫描、创建和维护连接以建立物理链路。在链路层上定义了两个角色:主设备和从设备。

  数据长度扩展(DLE)

  数据长度扩展能够使两个BLE设备之间的数据传输更快。为了了解DLE功能,请先让我们来看看链路层上的BLE数据包。下图所示为蓝牙4.0/4.1的链路层数据包结构。

如果我们仔细观察各数据包的开销,将发现存在1个字节的前导、4个字节的访问地址、2个字节的数据头、3个字节的循环冗余检查(CRC)和一个可选的4个字节的消息完整性检查(MIC)。当使用加密时,消息完整性检查(MIC)将与有效负载一起发送。因此,每个包含27个字节数据的加密链路层数据均含有14个字节的开销。现在,让我们来看看蓝牙4.2定义的链路层数据包结构。

相较于旧版本蓝牙规范的27字节,蓝牙4.2中的有效负载量可达到251个字节。每个数据包开销仍然保持不变,即14个字节。然而,该开销现已与多达251个字节相关联,而不是27个字节。这种最小有效负载的变化提高了吞吐量并减少了处理时间。

  图4所示为当数据需要通过蓝牙4.1和蓝牙4.2从一个设备传输至另一个设备时的吞吐量

在上图中,数据包时间的计算方法如下:

  数据包时间= 8 *(前导字节的数量+访问地址字节的数量+头字节的数量+有效负载字节的数量+ MIC字节的数量+ CRC字节的数量)/数据速率 秒

  对于接收数据包,不存在有效负载和MIC字节。因此,接收数据包时间为:

  发送数据包时间= 8 *(1 + 4 + 2 + 3)/ 106 秒

  =80微秒

  含27个字节的有效负载的发送数据包时间为:

  发送数据包时间= 8 *(1 + 4 + 2 + 27 + 4 + 3)/ 106秒

  =328微秒

  同样,251个字节的有效负载的发送数据包时间为2120微秒。

  另外,如上图所示,随着各发送/接收数据包,存在两个相关的帧间间隔(T_IFS),一个为发送期间,一个为接收期间。如果某个事务的帧数量增加,则该事务的耗时也将成比例地增加。当数据长度功能被启用时,相较于蓝牙4.1,蓝牙4.2在一个帧内打包了更多数据,从而减少了每次事务处理的总时间,并增加了吞吐量(其中,吞吐量 =有效负载尺寸/总时间)。

  如上图所示,对于蓝牙4.1链路层,最大有效负载尺寸为27个字节(216比特)以及该交易的总时间为708微秒,意味着约 298 kbps的理论吞吐量。

  而对于4.2链路层,最大有效负载尺寸为251个字节(2008比特)以及总时间为2500微秒,意味着约 784 kbps的理论吞吐量。因此,相较于蓝牙4.1,蓝牙4.2提供了大约2.6倍的更高吞吐量。

  BLE 4.2允许主设备和从设备之间协商数据长度,还允许不对称的发送和接收有效负载量。有效地利用该功能以及选择合适的接收/发送数据长度对于实现最大吞吐量具有十分重要的意义。

  让我们考虑这样一个应用:BLE从设备需要将几千字节传输至主设备、从主设备接收空包并且连接间隔为8.75毫秒。假设在以下设置中协商数据长度(从设备):

  情景1 – 发送 - 251个字节,接收 - 251字节

  情景2 – 发送 - 251个字节,接收 - 27字节

  在情景1中,如图5所示,在第一次接收/发送数据包时,接收有效负载尺寸为0字节以及发送有效负载尺寸为251个字节,耗时2.5毫秒(包括帧间间隔)。第二次接收/发送数据包也是一样的。这两个接收/发送数据包共耗时5毫秒,在此连接间隔内剩下3.85毫秒。在理想情况下,应该在同一连接间隔内存在另一个接收/发送数据包。但是,主设备的调度器不会在此连接间隔内安排另一个接收/发送数据包。这是因为调度器会基于协商的数据长度(本案例中发送/接收的数据长度均为251)来检查发送/接收数据包是否具有足够的时间。如图所示,含有接收和发送有效负载量为251字节的接收和发送数据包需要4.54毫秒。然而,前两个数据包之后的可用时间为3.85毫秒,这导致在本连接间隔内仅2个发送数据包。

在情景2中,在该连接间隔内,调度器仅需要2.64毫秒就可调度一个数据包,因此在8.75毫秒的连接间隔内可以容纳第三个数据包,如图6所示。如图所示,相对于案例1,本案例将提供高于50%的吞吐量

尽管PDU尺寸的选择会影响吞吐量,但还存在对其产生影响的其他因素,比如,连接间隔和最大传输单元(MTU)。

  数据长度的扩展可通过任何连接设备的控制器来触发。如果两个设备都支持数据长度的扩展功能,则该设备可发送一个获取更新数据长度的请求,而其他设备将通过其自己的参数来做出响应。图7所示为协商进程。

如果一台不支持数据长度扩展功能的设备接收到数据长度的更新请求时,将会返回一个未知的回复。该回复将通知发起请求的设备另一台设备不支持DLE,该设备将继续传输符合蓝牙4.1 PDU尺寸的数据。也就是说,数据长度扩展支持向下兼容。

  数据长度扩展在提高吞吐量的同时,也通过减少射频活动时间从而有助于降低功耗。这是因为在蓝牙4.2中,如果数据尺寸大于27字节,所需的接收/发送数据包更少、射频活动的时间更短)。比如说,需要传输 135个字节,BLE4.1设备在连接时需要5个发送/接收数据包来传输数据;然而BLE4.2设备在传输相同数量的数据时只需一个发送/接收数据包。在无线应用中,射频通信消耗了大多数的系统电力。使用DLE,射频通信活动时间减少,可以显著延长电池寿命。

纬图BLE4.2 抓取到的BLE4.2数据长包:

蓝牙简介

转载自网上大佬的文档,具体链接不详

蓝牙

蓝牙分为传统蓝牙和BLE蓝牙两种连接方式。对于苹果的iOS系统来讲传统蓝牙需要经过苹果的安全认证,因此都是走BLE蓝牙通道通道进行通信。

BLE是Bluetooth Low Energy的缩写,又叫蓝牙4.0,区别于蓝牙3.0和之前的技术。

l  蓝牙双模简称BR(统蓝牙和BLE蓝牙两种都有),商标为Bluetooth Smart Ready;

l  单模简称BLE或者LE,商标为Bluetooth Smart

Android是在4.3后才支持BLE,这说明不是所有蓝牙手机都支持BLE,而且支持BLE的蓝牙手机一般是双模的。双模兼容传统蓝牙,可以和传统蓝牙通信,也可以和BLE通信,常用在手机上,Android4.3和IOS4.0之后版本都支持BR,也就是双模设备。

蓝牙传输的最大数据包MTU在不同手机和设备上也是不同,一般是通过设备和手机之间进行通信约定的。

iOS可以通过maximumWriteValueLengthForType获得设备的最大数据包(iOS9以后);

https://developer.apple.com/documentation/corebluetooth/cbperipheral/1620312-maximumwritevaluelengthfortype?language=objc

Android则是在API 21(Android 5.1)有一个 BluetoothGatt 新增一个requestMtu()的方法来调整MTU。

https://developer.android.com/reference/android/bluetooth/BluetoothGatt

可以通过“nRFConnect-4.6.1.apk”的第三方应用,可以查看支持的MTU大小,如下图:

 

 

 

MTU大小调整

1.3.1 传统蓝牙

传统蓝牙3.0根据802.11适配层协议应用了Wi-Fi技术,极大提高了传输速度。蓝牙3.0的数据传输率提高到了大约24Mbps

1、传统蓝牙采用的是SPP(Serial Port Profile)协议进行数据传输。

2、SPP的UUID:00001101-0000-1000-8000-00805F9B34FB

3、手机一般以客户端的角色主动连接SPP协议设备

1.3.2 BLE蓝牙

BLE蓝牙的最大特点就是低功耗,而低速率和简单的交互协议是降低功耗的重要组成部分,因此它的的传输速率只有2Mbps。

BLE关键术语和概念的摘要:

一个ble蓝牙设备有多个包括多个Profile。

一个Profile中有多个服务Service(通过服务的uuid找到对应的Service)。

一个Service中有多个特征Characteristic(通过特征的uuid找到对应的Characteristic)

一个Characteristic中包括一个value和多个Descriptor(通过Descriptor的uuid找到对应的Descriptor)

其次,要知道一些名词:

1、profileprofile

可以理解为一种规范,一个标准的通信协议,它存在于从机中。

蓝牙组织规定了一些标准的profile,例如 HID OVER GATT,防丢器,心率计等。

每个profile中会包含多个service,每个service代表从机的一种能力。

2、service

可以理解为一个服务,在ble从机中,通过有多个服务,例如电量信息服务、系统信息服务等,每个service中又包含多个characteristic特征值。

每个具体的characteristic特征值才是ble通信的主题。比如当前的电量是80%,所以会通过电量的characteristic特征值存在从机的profile里,这样主机就可以通过这个characteristic来读取80%这个数据

3、characteristic

特征值,ble主从机的通信均是通过characteristic来实现,可以理解为一个标签,通过这个标签可以获取或者写入想要的内容。

官方特征值定义:

https://www.bluetooth.com/specifications/gatt/characteristics/

4、UUIDUUID

统一识别码,我们刚才提到的service和characteristic,都需要一个唯一的uuid来标识UUID的格式:00001101-0000-1000-8000-00805F9B34FB

综上,每个从机都会有一个叫做profile的东西存在,不管是上面的自定义的simpleprofile,还是标准的防丢器profile,他们都是由一些列service组成,然后每个service又包含了多个characteristic,主机和从机之间的通信,均是通过characteristic来实现。

 

  

BLE协议栈架构图

其中有一个UUID非常特殊,它被蓝牙联盟采用为官方UUID,这个UUID如下所示:

 

蓝牙联盟将自己定义的attribute或者数据只用16bit UUID来表示上图xxxx位置,其实它也是128bit。

例如设备的UUID扫描结果如下图所示:

 

 

UUID实例

l  第1个UUID 0x2A05标识:

Service Changed      org.bluetooth.characteristic.gatt.service_changed       0x2A05

l  第2个UUID 0x2A00标识:

Device Name            org.bluetooth.characteristic.gap.device_name              0x2A00    

 

Device Name长度可以到248字节,但一般不会需要那么长的名字,一般会建议最长到达40字节就好了。

l  第3个UUID 0x2A01标识:

Appearance     org.bluetooth.characteristic.gap.appearance        0x2A01

 

Appearance即表明这是个什么设备,如鼠标?键盘?等等

l  第4个UUID 0x2AA6标识:

Central Address Resolution     org.bluetooth.characteristic.gap.central_address_resolution      0x2AA6

 

BT 4.2添加的新特性。因为在BT 4.2中,为了提高BT的安全性(原来SMP的方式是可以破解的),加入了Random Address的内容。这里的Central Address Resolution就是用来表明暴露GAP Service的这个Central设备,是否支持Resolvable Private Address(RPA)的。

Peripheral设备通过读对方Central设备的GAP Service的Central Address Resolution,就能知道其是否支持RPA了,如果其支持,那Peripheral就可以在自己的Directed Advertisement中使用RPA了。如果不支持,那还是只能使用public地址了。

关于蓝牙的public地址,private地址,请参考:

https://blog.csdn.net/suxiang198/article/details/47730649

l  第5-6个UUID 0xFFF1和0xFFF2标识分别是读取和写入;

l  第7-8个UUID标识也是读取和写入;

l  第9-11个UUID标识是支持微信的接口;

 

一般读,写和通知的UUID 就是 characteristic UUID

另外注意,连接设备前,请先关闭扫描蓝牙,否则连接成功后,再次扫描会发生阻塞,扫描不到设备。

以上是关于BLE4.2 简介的主要内容,如果未能解决你的问题,请参考以下文章

esp32的wifi模块叫什么

BLE低功耗蓝牙的广播内容

JAX-RS的简介

Curator简介

OkHttpOkHttp 简介 ( OkHttp 框架特性 | Http 版本简介 )

KNN库简介