回顾5.0新特性:
1.增加2Mbps LE PHY:但是只能用于连接。
2.增加LE Long range,S2(500kbps),S8(125kbps):可以实现更远的传输距离。
3.增加High duty cycle non-connectable ADV:最小广播间隔从100ms减小到20ms,能够让对端设备更快的扫描到。
4.扩展广播:增加了辅助信道来发送大payload的广播数据。
5.LE Channel Selection Algorithm #2:跳频算法只有12个不同的跳频序列,新的跳频算法2更随机。
6.Higher output power:将最大的发射功率,从4.0/4.1/4.2中的10mW,增大到100mW。
蓝牙5.1新特性:
1.AoA和AoD定位技术:
AOA(Angle Of Arrival):到达角测量。
AOD(Angle Of Departure):发射角测量。
新增AOA和AOD技术原理来确定设备方向,Direction Finding,寻向功能,spec中定义的主要是寻向,并不是定位。
多个可以寻向功能的接收端设备,把接收到的方向数据放在一起计算,就可以计算出位置信息,根据RSSI也可以计算出来设备的位置信息,但是没有根据方向角度计算的精度高。
根据rssi定位:
根据AoA角度定位:
原理介绍:
BLE设备可通过一根天线发射包含测向信息的数据包(CTE信息)使其方向可被对等设备获取。
对等设备含有一组射频开关和天线阵列,在接收含有测向信息的数据包时切换天线并采集IQ(I表示In-phase,即同相;Q表示Quardrature,即正交)信号样本。IQ信号样本用于计算天线阵列中不同天线上接收到的无线电信号的相位差,并最终基于相位差及天线阵列中天线间距信息估算出到达角(AoA)。
整个过程可以抽象描述为:
发射端(数据包中增加CTE信息)->接收端锚点(多天线)->多天线根据IQ信号样本,计算出相位差->最终基于相位差及天线阵列中天线间距信息,估算出到达角(AoA)->计算发射端的方向信息(单个锚点无法定位出来位置信息,需要多个锚点,放置在不同的位置,一起定位到位置信息)。
多个锚点一起工作,就可以计算出来位置信息了。
原理部分,本文不做过多介绍,请参考如下内容:
https://zhuanlan.zhihu.com/p/561469508
https://zhuanlan.zhihu.com/p/363599546
https://zhuanlan.zhihu.com/p/542856272
HCI接口新增定义:
从HCI接口来看,AOA和AOD定位技术,新增加了如下几个相关的HCI Command和Event。
HCI command:
HCI event:
其中CTE相关的HCI Command,主要是设置参数,使能发送,都是配置发送端的CTE是如何发送的,这些command类似与ble的adv。LE Set Connectionless IQ Sampling Enable Command,是使能IQ采样的命令,enable之后,controller会上报LE Connectionless IQ Report Event和LE Connection IQ Report Event给host端,该Event里面包含了天线信息和每个天线的IQ采样数据。
代码实现:
从上面的内容,可以得出一个知识点,就是SIG组织,只定义了Controller需要上报的天线的IQ采样信息,但是如何根据采样信息计算出来设备的角度,是没有定义的,需要Host端,或者应用层自行实现。查看了zephyr的最新LTS版本,发现zephyr的host端,也是将IQ数据吐给了APP业务层,由业务自行处理,并没有计算到达角。
demo:zephyr-zephyr-v2.7.0\samples\bluetooth\direction_finding_connectionless_rx。
缺点:
对硬件要求高,天线阵列,射频等要求高;
精度不够,实测没有那么高的精度;
2.Advertising Channel Index:
Randomized Advertising Channel Indexing,允许广播事件以任意顺序在3个或者其中的几个primary channel上递增,之前的版本只允许在3个primary channel上顺序递增。
5.0版本:
37,38,39顺序发送:
5.1版本:
通过对比可以发现,先发送在38,后发送在37和39,次数是随机的,或者说乱序的,这样子可以提高接收端的成功率。
3.GATT Caching:
每当client端设备连接时,它都会执行“服务发现”以查看服务器设备支持的功能,这个过程会消耗一定的时间和功耗。蓝牙5.1增加GATT Caching功能后,在server端没有任何更改的情况下,客户端可以跳过服务发现流程,这意味着连接速度会更快,并且消耗的能耗更少。
这个特性之前的spec版本就是存在的,但是5.1开始定义的更健全了。
Sevice Changed indication是之前就定义好的,5.1新增了Database Hash characteristic的新的方式,和Database Out Of Sync这种error code的新方式。
4.Periodic Advertising Sync Transfer:
增加将扫描到的周期广播同步信息,通过ACL连接发送给另外一个设备。
比如一个手机通过BLE连接着手环的同时,也通过周期广播,同步着另外一个设备广播的数据,这时候可以通过LL_PERIODIC_SYNC_IND PDU数据包,发送给手环,手环设备也可以去同步监听这个设备的周期广播了。
LL_PERIODIC_SYNC_IND PDU是,一种LL Control PDU,简称LLCP,类似的还有LL_CONNECTION_UPDATE_IND,LL_CHANNEL_MAP_IND,LL_FEATURE_REQ,LL_FEATURE_RSP等。
https://zhuanlan.zhihu.com/p/531581527
https://www.cnblogs.com/simpleGao/p/17635243.html
5.Synchronization State:
虽然周期广播在5.0版本中就已经定义,但是在5.0版本中,链路层并没有为了这个特性,单独定义出来一个状态机。在5.1版本的协议中,单独定义出来一个Synchronization State来处理周期广播的业务。
5.0版本:
链路层状态机:
5.1版本:
链路层状态机:
Synchronization state:
链路层在由主机指示,并且获得定期广告同步信息时,应进入Synchronization state状态。该信息可以从AUX_ADV_IND PDU的SyncInfo字段。