Bluetooth Core 6.0中以Central设备发起Channel Sounding详细流程介绍

当BLE设备间完成连接后,由发起态进入连接态的设备被称为Central device,而由广播态进入连接态的设备被称为peripheral device。当双方设备按照Vol 6, Part D:6.34 Channel Sounding setup phase完成BLE CS的设置后,双方就可以发起CS测距过程。

由Central device发起的BLE CS过程,可以参考Vol 6, Part D:6.35 Channel Sounding started by Central in initiator role。Central device通过LE CS Create Config command和LE CS Set Default Settings命令将自己设置为initiator后,Central device设备空口发送LL CS REQ,peripheral device空口回复LL CS RSP后,Central device空口发送LL CS IND,双方正式进入CS过程,如下图所示。

由peripheral device发起的BLE CS过程,可以参考Vol 6, Part D:6.36 Channel Sounding started by Peripheral in reflector role。peripheral device通过LE CS Create Config command和LE CS Set Default Settings命令将自己设置为reflector后,peripheral device空口发送LL CS REQ后,Central device空口直接发送LL CS IND,双方正式进入CS过程。

对比两种模式,主要区别在于如果是peripheral device发起的,那么会少发送一次LL CS RSP,最后都由Central device发送LL CS IND后,开始CS过程。

下面我们以Central device发起过程为例,详细介绍BLE CS过程。

第一步:设置BLE CS过程中的参数

Central device通过HCI发送LE CS Set Procedure Parameters命令,参考Vol 4, Part E :7.8.140 LE CS Set Procedure Parameters command。

注意,一个Host设备可以通过执行多个上述指令,对不同的Connection_Handle和Config_ID配置不同的参数,实现BLE CS过程。

Connection_Handle

两个CS设备进入连接态后,由LE Connection Complete event事件返回的句柄。

Config_ID:

两个设备CS初始化时,通过HCI_LE_CS_Create_Config分配的CS ID。一个Central device可以和多个peripheral device实现连接,同时也可以同时创建CS过程。不过标准中将该过程限制最高为4个。后续的所有参数配置,仅对Connection_Handle下的具体Config_ID生效。

Max_Procedure_Len

设置了每次CS过程的最大持续时间,实际时间由host决定。

Min_Procedure_Interval & Max_Procedure_Interval

在连续的两个CS过程中,设置了最小和最大的连接时间数,也就是该最大最小间隔是通过连接事件的间隔乘上连接事件的个数进行衡量,实际间隔由host决定。

Max_Procedure_Count

设置了一次连续的CS测量中最大的CS过程次数。如果该参数设置为1,那么Min_Procedure_Interval & Max_Procedure_Interval这两个参数设置可以忽略,实际次数由host决定。

Min_Subevent_Len & Max_Subevent_Len

一次CS过程中,建议每次CS子时间的持续时间,范围为1250us到4秒

Tone_Antenna_Config_Selection

BLE CS过程中,双方设备都可以配置最多4天线的天线阵列进行测距,8中序号对应的双方可能的天线数量及路径情况,如下图所示。

Tx_Power_Delta & PHY

设置BLE CS过程中CS tones和RTT数据包的输出功率与PHY设置的数据发射功率的差值。

Preferred_Peer_Antenna

设置另外一个CS设备首先使用的天线单元,此处选择的首选天线单元,需要小于Tone_Antenna_Config中配置的远端CS设备可用的天线数量。

SNR_Control_Initiator & SNR_Control_Reflector

SNR_Control_Initiator控制由initiator设备发送CS_SYNC数据包时的SNR质量,SNR_Control_Reflector控制由reflector设备发送CS_SYNC数据包时的SNR质量,分别共有5档可选。

第二步:使能设置的BLE CS参数

设置完不同Connection_Handle下不同Config_ID的CS参数后,对没个配置的参数需要此命令单独使能。此命令中,明确需要使能的Connection_Handle和Config_ID即可,具体参考: Vol 4, Part E :7.8.141 LE CS Procedure Enable command。

BLE设备CS参数使能后,设备会通过空口发送LL_CS_REQ数据包,将LE CS Set Procedure Parameters中配置的参数发送给远端设备。LL_CS_REQ格式如下图所示,其中参数的定义与LE CS Set Procedure Parameters中的一致,不再展开解释,具体参考:Vol 6, Part B:2.4.2.47 LL_CS_REQ

远端设备收到LL_CS_REQ数据包后,将根据自身设备的性能,回复一个参数可能更新的LL_CS_RSP数据包,涉及到的参数是LL_CS_REQ的一个子集,如下图所示,具体参考:Vol 6, Part B:2.4.2.48 LL_CS_RSP

经过BLE CS双方关于上述参数的范围协商后,最终由Central device发送LL_CS_IND数据包。该数据包中明确了LL_CS_REQ和LL_CS_RSP中带范围参数的具体数值,以便BLE CS过程的执行,如下图所示,具体可以参考Vol 6, Part B:2.4.2.49 LL_CS_IND。

对比由reflector发起的CS过程,仅存在peripheral device将可期望的参数通过LL_CS_REQ发送给Central device,Central device根据自身的性能和属性直接决策CS过程具体使的参数,然后直接发送LL_CS_IND后,就可以开始BLE CS过程。

第三步:CS过程及返回数据

在规定的数量内,开始多次CS Procedure,根据CS过程,每个CS Procedure内又可以实施多次的CS Subevent。根据CS过程的跨度及复杂性,BLE CS双方都通过LE CS Subevent Result Event和LE CS Subevent Result Continue event事件将此次CS Procedure中的数据发送给各自Host,以便算法计算距离。

LE CS Subevent Result event返回的数据定义,如下图所示,详细介绍可参考:Vol 4, Part E:7.7.65.44 LE CS Subevent Result event

Subevent_Code & Connection_Handle & Config_ID

此次Event报告对应BLE CS的Connection_Handle和Config_ID,以及当前event中subevent的code

Start_ACL_Conn_Event_Counter

ACL 连接事件的起始计数

Procedure_Counter:

当前Event对应CS中的Procedure序号

Frequency_Compensation

显示当前CS过程在CS非模式0过程中initiator设备用的fractional frequency offset补偿值。

Reference_Power_Level

当前CS Subevnent数据射频参考功率

Procedure_Done_Status

显示当前CS Procedure执行过程,用于表明是否后面仍然有event数据。0x01时,表示后续仍然有Procedure;如果是0x00,表示当前CS Procedure已经执行完成;0x0F表示当前CS Procedure退出。

Subevent_Done_Status

显示当前CS Procedure中Subevent的执行过程,用于表明是否后面仍然有event数据。

Abort_Reason

如果当前CS Procedure是退出(Abort)的,那么可以查阅此处退出理由。

Num_Antenna_Paths

显示当前CS Procedure和Subevent用到的天线对。

Num_Steps_Reported & Step_Mode & Step_Channel

根据Num_Steps_Reported确定后续Step_Mode和Step_Channel数组的长度,然后可以在Step_Mode中获取每个Step用的具体CS Mode和每个Step用的具体信道号。

Step_Data_Length & Step_Data

根据Num_Steps_Reported确定Step_Data_Length数组的长度,每个Step_Data_Length数组元素的值中表明了Step_Data数组中对应Mode_Role_Specific_Info的数据长度。每个Step中Step_Data数组的长度取决于当前用到的CS Mode还有当前设备的Role。每组Step_Data数组被称为Mode_Role_Specific_Info对象。

  • CS Mode0, 参考Vol 6, Part H: 4.3.1 Channel Sounding step mode-0
    • Initiator每个Step获得的Mode_Role_Specific_Info有如下4组信息:
      • Packet_Quality
      • Packet_RSSI
      • Packet_Antenna
      • Measured_Freq_Offset
    • reflector每个Step获得的Mode_Role_Specific_Info有如下3组信息:
      • Packet_Quality
      • Packet_RSSI
      • Packet_Antenna
  • CS Mode1, 参考Vol 6, Part H: 4.3.2 Channel Sounding step mode-1
    • 不带RTT时,Initiator每个Step获得Mode_Role_Specific_Info有如下5组信息:
      • Packet_Quality
      • Packet_NADM
      • Packet_RSSI
      • ToA_ToD_Initiator
      • Packet_Antenna
      • 带RTT时,Initiator每个Step获得Mode_Role_Specific_Info有如下7组信息:
      • Packet_PCT2
      • Packet_PCT1
      • Packet_Antenna
      • ToA_ToD_Initiator
      • Packet_RSSI
      • Packet_NADM
      • Packet_Quality
      • 不带RTT时,reflector获得Mode_Role_Specific_Info有如下5组信息
      • Packet_Antenna
      • ToD_ToA_reflector
      • Packet_RSSI
      • Packet_NADM
      • Packet_Quality
      • 带RTT时,reflector获得Mode_Role_Specific_Info有如下5组信息
        • Packet_PCT2
        • Packet_PCT1
        • Packet_Antenna
        • ToD_ToA _reflector
        • Packet_RSSI
        • Packet_NADM
        • Packet_Quality
  • CS Mode2, 参考Vol 6, Part H: 4.3.3 Channel Sounding step mode-2
  • 不管是Initiator还是reflector,获得Mode_Role_Specific_Info有如下3组信息
  • Antenna_Permutation_Index
  • Tone_PCT[k]
  • Tone_Quality_Indicator[k]
  • CS Mode3, 参考Vol 6, Part H: 4.3.4 Channel Sounding step mode-3
    • Initiator每个Step获得Mode_Role_Specific_Info有如下8组信息:
      • Packet_Quality
      • Packet_NADM
      • Packet_RSSI
      • ToA_ToD_Initiator
      • Packet_Antenna
      • Antenna_Permutation_Index
      • Tone_PCT[k]
      • Tone_Quality_Indicator[k]
      • 支持相位测距和RTT情况下,Initiator每个Step获得Mode_Role_Specific_Info有如下10组信息:
        • Tone_Quality_Indicator[k]
        • Tone_PCT[k]
        • Antenna_Permutation_Index
        • Packet_PCT2
        • Packet_PCT1
        • Packet_Antenna
        • ToA_ToD_Initiator
        • Packet_RSSI
        • Packet_NADM
        • Packet_Quality
    • reflector每个Step获得Mode_Role_Specific_Info有如下8组信息:
      • Packet_Quality
      • Packet_NADM
      • Packet_RSSI
      • ToD_ToA_reflector
      • Packet_Antenna
      • Antenna_Permutation_Index
      • Tone_PCT[k]
      • Tone_Quality_Indicator[k]
    • 支持相位测距和RTT情况下,reflector每个Step获得Mode_Role_Specific_Info有如下10组信息:
      • Tone_Quality_Indicator[k]
      • Tone_PCT[k]
      • Antenna_Permutation_Index
      • Packet_PCT2
      • Packet_PCT1
      • Packet_Antenna
      • ToD_ToA_Initiator
      • Packet_RSSI
      • Packet_NADM
      • Packet_Quality

Mode_Role_Specific_Info中每个数据信息表达的含义,详细解释如下:

Packet_Quality:

占一个Octet, bit0~3用来表示BLE CS过程中Access Address的接收情况,bit4~7用来表示RTT过程中采用随机或者特定序列下,出现误比特的数量。

Packet_NADM:

占一个Octet,用来表示BLE CS数据包受到攻击的可能性。

Packet_RSSI:

占一个Octet,用来表示BLE CS数据包估计的RSSI值大小,单位为dBm。

Packet_Antenna

占1一个Octet,表明BLE RTT过程中使用的天线序号。

Packet_PCT1 & Packet_PCT2

每组数据占4个Octets,其中bit0~11组成一个12bit有符号数,表示校准后相位复数I路数值,bit12~23组成另外一个12bit有符号数,表示校准后相位复数Q路数值,实际相位校准复数为PCT1/PCT2=I+jQ

Measured_Freq_Offset:

占2个Octets,其中低15bit组成15bit有符号数,表示测量获得的信号频偏情况,单位为0.01ppm。

ToA_ToD_Initiator & ToD_ToA_Reflector

占2个Octets,分别表示数据包到达和发出、数据包发出和到达的时间差。

Antenna_Permutation_Index

占一个Octet,表明当前BLE CS步骤采用的天线路径序号,数值应该对应0x00~0x07。该序号值与使用的Num_Antenna_Paths对应,并以此计算后续Tone_PCT和Tone_Quality_Indicator两个数组的长度。

Tone_PCT[k]:

给出每条路径的校准后的相位测量复数值,后续可以用此值开展基于相位的测距算法。

Tone_Quality_Indicator[k]:

给出每条路径CS用信号质量。

相关推荐
SuperHeroWu71 个月前
【HarmonyOS】鸿蒙应用低功耗蓝牙BLE的使用心得 (三)
华为·蓝牙·harmonyos·鸿蒙·低功耗蓝牙·ble
记帖1 个月前
STM32WB55RG开发(3)----生成 BLE 程序连接手机APP
蓝牙·stm32cubemx·ipcc·ble·无线·stm32wb55rg·hsem
记帖1 个月前
STM32WB55RG开发(1)----开发板测试
蓝牙·stm32cubemx·ble·无线·stm32wb55rg·开发板测试
SuperHeroWu71 个月前
【HarmonyOS】鸿蒙应用低功耗蓝牙BLE的使用心得 (二)
华为·harmonyos·低功耗蓝牙·ble·扫描·特征值·广播
Projectsauron2 个月前
BLE 协议之 GATT
ble·gatt
Leung_ManWah2 个月前
NRF52832学习笔记(41)——添加串口库libuarte
串口·uart·ble·nrf52832·libuarte
WKJay_2 个月前
【ESP32S3】VSCode 开发环境搭建
wifi·esp32·ble
Projectsauron2 个月前
BLE 协议之传输层
ble
weixin_432702763 个月前
Bluetooth Channel Sounding中关于CS Event & Subevent的详细介绍
ble