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

news2024/11/17 4:29:49

当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 ProcedureSubevent用到的天线对。

Num_Steps_Reported & Step_Mode & Step_Channel

根据Num_Steps_Reported确定后续Step_ModeStep_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的数据长度。每个StepStep_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用信号质量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2175910.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

QT界面制作

作业 1> 创建一个新项目,将默认提供的程序都注释上意义 pro文件 QT core gui #引入类库 core,gui greaterThan(QT_MAJOR_VERSION, 4): QT widgets #超过版本4会加上widgetsCONFIG c11 #支持c11新特性# The following define makes your …

第二节—类与对象(上)

1.面向过程和面向对象初步认识 C语言是面向过程的,关注的是过程,分析出求解问题的步骤,通过函数调用逐步解决问题。 C是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间的交互完成 2.…

Java中的哈希函数

在Java的世界里,哈希函数是一个核心概念,它不仅在数据结构中扮演着重要角色,如哈希表(HashMap、HashSet等),还在安全领域,如密码存储和消息摘要中发挥着至关重要的作用。本文将深入探讨Java中的…

千兆网络变压器HX84801SP POE应用主板

千兆网络变压器HX84801SP POE应用主板: 随着网络时代科技飞速发展,2G到5G时代短短10年实现了目标。 千兆POE交换机是一种高速网络设备,适用于各种网络环境,尤其是需要高带宽和快速数据传输的场合。 千兆网络变压器POE交换机通常采…

HTML基础用法介绍二

目录: 列表 无序列表有序列表定义列表 表格 表格单元格合并 input标签 属性值text和password的使用 输入框中占位文本的使用 属性值radio的使用属性值checkbox的使用属性值file的使用 下拉菜单 文本域 label标签 字符实体 🚘正片开始 无序列表 …

手机/平板端 Wallpaper 动态壁纸文件获取及白嫖使用指南

Wallpaper 动态壁纸文件获取及使用指南 目录 壁纸文件获取手机 / 平板使用手机 / 平板效果预览注意事项PC/Mac 使用 1. 壁纸文件获取链接 链接:夸克网盘分享 复制链接到浏览器打开并转存下载即可。 (主页往期视频的 4K 原图和 mpkg 动态壁纸文件&#xf…

IO端口与IO接口

I/O端口和I/O接口是计算机系统中用于连接外部设备的关键组成部分,两者密切相关,但又有明显的区别: I/O端口 (I/O Port): 定义: I/O端口是内存地址空间中的一组特殊地址,用于与外部设备进行数据交换。CPU通过向这些特定的地址写入…

【C语言】单片机map表详细解析

1、RO Size、RW Size、ROM Size分别是什么 首先将map文件翻到最下面,可以看到 1.1 RO Size:只读段 Code:程序的代码部分(也就是 .text 段),它存放了程序的指令和可执行代码。 RO Data:只读…

MQ基础:RabbitMQ真面目

同步调用方式,指的是发送方直接发送给接收方的形式。而这种方式在某些情况下可能出现问题,比如当业务逻辑变得复杂,同步的方式需要等待上一条指令被接收后才会继续,对性能的影响很大。 异步的方式,增加了一个消息代理…

网络编程(12)——完善粘包处理操作(id字段)

十二、day12 之前的粘包处理是基于消息头包含的消息体长度进行对应的切包操作,但并不完整。一般来说,消息头仅包含数据域的长度,但是如果要进行逻辑处理,就需要传递一个id字段表示要处理的消息id,当然可以不在包头传i…

【Godot4.3】简单物理模拟之圆粒子碰撞检测

概述 最近开始研究游戏物理的内容,研究运动、速度、加速度之类的内容。也开始模仿一些简单的粒子模拟。这些都是一些基础、简单且古老的算法,但是对于理解游戏内的物理模拟很有帮助。甚至你可以在js、Python或者其他程序语言中实现它们。 图形的碰撞检…

Linux操作系统中SpringGateway

1、SpringGateway简介 核心功能有三个: 路由:用于设置转发地址的 断言:用来判断真实应该请求什么地址 过滤器:可以过滤地址和处理参数 1、什么是网关 网关是后台服务的统一入口,类似于平时网络里提到的网关。 2…

ppt压缩有什么简单方法?压缩PPT文件的几种方法

ppt压缩有什么简单方法?许多用户常常面临文件过大的问题,尤其在需要通过电子邮件发送或上传至网络平台时,大文件会带来诸多麻烦。此外,较大的文件可能导致软件响应缓慢,从而影响整体的演示体验。因此,寻找有…

ESP8266/01s模块烧录MQTT AT固件篇

(代码完美实现)stm32 新版 onenet mqtt物联网(保姆级教程) 地址: (代码完美实现)stm32 新版 onenet mqtt物联网(保姆级教程)https://blog.csdn.net/Wang2869902214/article/details/142501323 乐鑫ESP8266/安信可…

Python项目Flask框架整合Mysql

一、在配置类中编写Mysql配置信息 二、实现Mysql配置类 import pymysql from config.config import MYSQL_HOST, MYSQL_USER, MYSQL_PASSWD, MYSQL_PROT, MYSQL_DB, MYSQL_CHARSETclass MysqlDB():def __init__(self, MYSQL_HOST, MYSQL_USER, MYSQL_PASSWD, MYSQL_PROT, MYS…

time命令:轻松测量Linux命令执行时间!

一、命令简介 用途: 用于测量 Linux 命令执行的时间,包括实际时间、用户 CPU 时间和系统 CPU 时间。刚开始以为是用来“看现在几点钟”的 🥲。标签: 实用工具,性能分析。 ‍ 二、命令参数 2.1 命令格式 time [选项…

COSCon'24 第九届中国开源年会议题征集正式启动

一年一度的开源盛会,COSCon24 第九届中国开源年会暨开源社十周年嘉年华将于2024年11月2-3日在中关村国家自主创新示范区会议中心举办。在为期2天的大会中,我们将为大家带来精彩纷呈的 Keynote 主题演讲(上午),和百花齐…

【初阶数据结构】排序——选择排序

目录 前言选择排序堆排序 前言 对于常见的排序算法有以下几种: 下面这节我们来看选择排序算法。 选择排序 基本思想:   每一次从待排序的数据元素中遍历选出最大(或最小)的元素放在序列的起始位置,直到全部待排序…

2024前端技术发展概况

当前前端技术呈现出多方面的发展态势,以下是详细介绍: 前端框架不断演进: React:作为流行的前端框架之一,React 依旧保持着强大的生命力。它具有高效的虚拟 DOM 机制,能够快速更新和渲染页面,极…

如何创建一个docker,给它命名,且下次重新打开它

1.创建一个新的docker并同时命名 docker run -it --name one ubuntu:18.04 /bin/bash 这时候我们已经创建了一个docker,并且命名为"one" 2.关闭当前docker exit 3.这时docker已经终止了,我们需要使用它要重新启动 docker start one 4.现在可以重新打…