蓝牙Inquiry与Inquiry Scan

news2024/11/18 22:34:32

文章目录

  • 一、Inquiry和Inquiry Scan
  • 二、Inquiry的三种模式
    • 2.1 Inquiry命令
    • 2.2 标准Inquiry应答
    • 2.3 带RSSI的Inquiry应答
    • 2.4 带EIR的Inquiry应答
  • 三、Extend Inquiry Response
    • 3.1 EIR数据格式
    • 3.2 EIR数据注册
    • 3.3 EIR数据解析示例
    • 3.4 获取对端设备名称的方法
  • 四、Inquiry Scan参数

一、Inquiry和Inquiry Scan

Core spec定义了两个BT state:Inquiry and Inquiry Scan。一个设备(通常是做master/central那个)进入Inquiry state,并开始发送inquiries。另一个设备(通常是做slave/peripheral那个)进入Inquiry Scan state,试图接收inquiries。

BT Inquiry过程和BLE Advertising的区别:BLE中,是由peripheral device发送advertisement,而在BT中,是由peripheral device 接收inquiry)

在这里插入图片描述
Bluetooth Packet Format有以下两种。Inquiry过程只使用Basic Rate Packet,而且还是非常特殊的一种:ID packet——只有Access Code部分而没有Header和Payload部分。

两个BT设备之间处于同一个Physical Channel定义是:在同一个timeslot (625us)内,两个设备的工作频率都跳到同一个RF channel,且Access Code匹配。

Access Code长度为68或72bits。Inquiry过程使用一种特定类型的Access Code: GIAC (General Inquiry Access Code),长度为68bits(ID packet只包含Access Code,所以ID packet length为68bits,duration也就是68us)。GIAC是用Core Spec规定的general inquiry LAP address (0x9E8B33)生成的(生成算法详见Core Spec)。

img

在这里插入图片描述

先简单描述一下 Inquiry/Inquiry Scan 过程,然后再介绍跳频的细节。

  • Central和Peripheral使用各自的Native Bluetooth Clock (CLKN) 计算channel,所以一开始Central Tx channel和Peripheral Rx channel是不相同的。一段时间后,在某个时刻一定会出现Central Tx channel与Peripheral Rx channel相同。Figure 2.10中标注的 “hop f(k)”处,Central和Peripheral都工作在了f(k) channel。注意,在此时刻之前,peripheral就已经工作在f(k) channel上了。
  • Peripheral接收到了Central发出的 ID packet后,会切换channel到 f’(k),并在625us后发送 FHS packet;与其同时Central也已经把channel切换到了 f’(k),Central会在该channel上接收到FHS packet。注意,在此过程中CLKN还在继续变化,但是并不是用实时的CLKN来计算channel。
  • Inquiry/Inquiry Scan过程中,Central和Peripheral能够跳到同一个channel的关键点在于他们都使用同一个“k”来计算ID packet传输channel和FHS packet传输channel。但是,计算ID packet传输channel的算法与计算FHS packet传输channel的算法不同,因此传输这两种packet的channel是不同的。

下面将罗列出Inquiry/Inquiry Scan过程中跳频的一些重要细节,以帮助理解上述过程。

  • Inquiry scan physical channel使用一个较短的伪随机跳频序列 (pseudo-random hopping sequence),该序列没有包含所有79个channel,而仅仅含有32个channel——分成A和B两个train,每个train有16个channel。这32个channel以2MHz为间隔,分散在64MHz频带上。
  • 该跳频序列中包含的channels是由GIAC决定的。由于GIAC是定值,所以Inquiry/Inquiry Scan过程用到的跳频序列也是一个固定channels的集合。
  • 在某一个时刻,使用的channel是用native Bluetooth Clock做输入参数,按照一定算法,从跳频序列中选出来的。
    Central发ID Packet的跳频速率是3200 hops per second,即在一个Tx Slot (625us)内,Central需要在2个不同的channel上发inquiry,即ID packet;在接下来的Rx Slot (625us)内,Central也会试图在另外2个不同的channel上接收inquiry response,即FHS packet (1,000,000us / 312.5us = 3200)。
  • 在10ms内,Central可以完成在16个channel (即一个train) 上发送inquiry (每1.25ms在2个channel上发送inquiry,16个channel就需要1.25ms x 8 = 10ms)。
  • Central在切换到一个新train之前,单个train至少要重复256次,即2.56s。为了在干扰环境收集到所有inquiry response,至少要做3次train切换,所以Central的Inquiry substate至少要持续2.56s x 4 = 10.24s,除非Baseband Resource Manager得到了足够的responses或者被Host命令取消。

在这里插入图片描述

  • Peripheral会以比Central慢得多的速率进行跳频——每1.28s切换一次channel。CLKN[16:12]被用于选择Inquiry scan的channel,而CLKN[16:12]每1.28s才变化一次(详见后面的跳频算法细节)。
  • Peripheral会默认每2.56s进行一次Inquiry scan——可用参数Inquiry_Scan_Interval (11.25ms to 2560ms)改变。Peripheral会默认每次Inquiry scan运行11.25ms——可用参数Inquiry_Scan_Window (10.625ms to 2560ms)改变。Host用HCI_Write_Inquiry_Scan_Avtivity命令将这两个参数配置给Controller。注意:Inquiry_Scan_Window应该小于等于Inquiry_Scan_Interval。
  • BT由两种Hop selection:Basic hop selection和Adapted hop selection (AFH)。Inquiry/Inquiry scan/Inquiry response使用Basic hop selection。两种Hop selection的差异在于,AFH会将某些有干扰的channel标记为不可用,从而在跳频的时候避开这些channel。

二、Inquiry的三种模式

  1. 标准Inquiry
  2. 在标准Inquiry的基础上增加RSSI
  3. 带RSSI或者EIR(Extend Inquiry Response)
    在这里插入图片描述

2.1 Inquiry命令

在这里插入图片描述
在这里插入图片描述

  • LAP:目前只有两个值,0x9E8B00为Limited Inquiry Access Code(LIAC),0x9E8B00为General Inquiry Access Code(GIAC)
  • Inquiry_Length:扫描时长
  • Num_Responses:扫描数量
    注意!只要Inquiry_Length与Num_Responses满足其一,INquiry就会自动结束,也可以通过Inquiry Cancel命令提前结束。

2.2 标准Inquiry应答

在这里插入图片描述

  • Num_Response:扫描到的个数
  • BD_ADDR:蓝牙地址
  • Page_Scan_Repetition_Mode:page时的策略,有3种可选,对连接时间的要求度逐级降低
  • Class_Of_Device:设备类型,可以参考Assigned Numbers文档
  • Clock_Offset:表示master和slave之间的clock的偏差,有了这个值可以加快master和slave之间page的时间

2.3 带RSSI的Inquiry应答

在这里插入图片描述

  • Num_Response:扫描到的个数
  • BD_ADDR:蓝牙地址
  • Page_Scan_Repetition_Mode:page时的策略,有3种可选,对连接时间的要求度逐级降低
  • Class_Of_Device:设备类型,可以参考Assigned Numbers文档
  • Clock_Offset:表示master和slave之间的clock的偏差,有了这个值可以加快master和slave之间page的时间
  • RSSI:信道强度

2.4 带EIR的Inquiry应答

在这里插入图片描述

  • Num_Response:扫描到的个数
  • BD_ADDR:蓝牙地址
  • Page_Scan_Repetition_Mode:page时的策略,有3种可选,对连接时间的要求度逐级降低
  • Class_Of_Device:设备类型,可以参考Assigned Numbers文档
  • Clock_Offset:表示master和slave之间的clock的偏差,有了这个值可以加快master和slave之间page的时间
  • RSSI:信道强度
  • EIR:即Extend Inquiry Response

三、Extend Inquiry Response

3.1 EIR数据格式

在这里插入图片描述

  1. EIR的数据结构是TLV格式的变种,即LTV(Length、Type、Value)
  2. 即使用不到240字节,也要填充到240字节
  3. 能扫描获取到EIR的前提是被扫描方提前注册了EIR数据
  4. EIR数据并不是每次扫描都能获取到

3.2 EIR数据注册

在这里插入图片描述

  • FEC_Required:是否使用FEC编码
  • Extend_Inquiry_Response:即EIR

3.3 EIR数据解析示例

在这里插入图片描述

3.4 获取对端设备名称的方法

  1. 通过EIR中的Complete Name获取。
  2. 如果对端没有注册EIR,可以先Inquiry获取到对端的地址,然后通过Remote Name Request command命令获取。
    在这里插入图片描述
    在这里插入图片描述

四、Inquiry Scan参数

Peripheral的Inquiry scan跳频频率固定为每1.28秒一次。inquiry scan的参数可由HCI_Write_Inquiry_Scan_Activity命令进行设置。
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

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

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

相关文章

推荐系统入门学习(二)【小白入门系列】

搭建你的第一个推荐系统 初识推荐系统 最初的推荐系统,作用是过滤垃圾邮件。今日机器学习算法的发展,朴素贝叶斯、神经网络已然成为了过滤垃圾邮件的好手。但是在30年前,算法还没有如今使用得广泛的时候,“找相同”就成为了过滤…

大型网络游戏任务系统的架构与设计

在网路游戏中做任务已经成为游戏很重要的一个核心功能和玩法,如何做好一个灵活可扩展的任务系统的架构与设计,今天来给大家分享一些我们的设计经验。接下来我把整个的任务系统分成以下6个模块:任务配置表设计与管理;游戏任务的解锁与生成;任务完成判定;任…

将本地的word文档转为markdown(带图片)发布到CSDN

文章目录一、前言二、word转为markdown三、自动发布本地md文件一、前言 背景:早期很多学习笔记都是记在word上(那一年,还不知道有markdown),现在想将早期的一些资料都发布到CSDN上(本地学习资料我都懒得打…

数据中心灾备通用基础

1.灾备的定义 没有灾备会带来的问题 一旦数据中心的数据遭到破坏,随之而来的是很多棘手的问题 灾备可以提供全面数据保护 IT行业中的备份 在当今IT行业中,数据量急剧增长,并且新的法规不断出台,对备份时间、恢复时间目标&#…

Linux应用编程---4.pthread_create函数

Linux应用编程—4.pthread_create函数 ​ 之前学习了进程有关的东西,现在学习如何创建一个线程。 4.1 pthread_create()函数详情 ​ 线程创建函数是:pthread_create()。在Linux终端下,输入man pthread_create,查看函数定义以及…

Python基础(二十三):面向对象之继承介绍

文章目录 面向对象之继承介绍 一、继承的概念 二、单继承 三、多继承

IntelliJ IDEA安装教程(超详细)

✅作者简介:CSDN内容合伙人、阿里云专家博主、51CTO专家博主、新星计划第三季python赛道Top1🏆 📃个人主页:hacker707的csdn博客 🔥系列专栏:实用工具 💬个人格言:不断的翻越一座又一…

Java学习(44)new关键字

new关键字 对象实例化 实例化对象的过程可以分为两部分: (1) 声明对象:Cat one (2) 实例化对象:new Cat()JVM可以被理解为Java程序与操作系统之间的桥梁 每次使用new关键字,就相当于在内存中开辟了一块新的存储空间。 package c…

CPU概述

CPU 概述 1. CPU 基础 CPU 的概念 CPU 是最重要的计算机组件,由控制器和运算器组成,通过总线与其它设备连接。 CPU 与南北桥 所谓的桥,都是 cpu 和其它设备连接这样的一个桥梁。分为南北桥。 什么是南桥? 南桥主要是用来连接…

【北邮果园大三上】运筹学期中后

运筹学后半段 第五章 动态规划 最优化原理,可以归结为一个递推公式 现实应用:比如最优路径、资源分配、生产计划和库存等 5.1 动态规划的最优化原理及其算法 5.1.1 求解多阶段决策过程的方法 例如:最短路径问题 求A到B的最短路径&#xff…

SpringBoot3.0集成SpringDoc2.0

SpringBoot3.0集成SpringDoc1. pom配置2. OpenApi配置类3. 使用4. SpringDoc注解与SpringFox对比5. 演示项目这里为什么要使用SpringDoc呢?是因为集成SpringFox只支持SpringBoot2.x, 而基于Swagger的SpringDoc的社区现在十分活跃,代码也在不断…

excel 设置双坐标轴柱状图

思路:通过添加辅助列来调整。 步骤1 选中数据,插入柱状图,这时候会得到原始的柱状图 选中“设计”-“更改图表类型”-“组合”,调整图表类型均为柱状图,可以得到初始双坐标轴图表…

Linux应用编程---7.有名管道

Linux应用编程—7.有名管道 7.1 mkfifo函数详情 ​ 无名管道用于具有亲缘关系的进程之间通讯,比如:父子进程、兄弟进程。有名管道用于非亲缘关系进程之间的通讯。创建有名管道使用到的库函数是:mkfifo(),这里强调是库函数的原因…

Elasticsearch连续剧之基础篇

目录一、前言二、Elasticsearch数据结构三、安装1.配置最大可创建文件数大小2.由于ES不能以root用户运行,我们需要创建一个非root用户,此处创建一个名为es的用户3.安装es4.启动es服务四、常用操作1.创建没有结构的索引2.创建有结构的索引3.删除索引4.文档…

【迅为iMX6Q】开发板 u-boot 2020.04 RTL8211E 以太网驱动适配

相关参考 【迅为iMX6Q】开发板 u-boot 2015.04 SD卡 启动 【迅为iMX6Q】开发板 u-boot 2020.04 SD卡 启动 【迅为iMX6Q】开发板 u-boot 2022.04 SD卡 启动 开发环境 win10 64位 VMware Workstation Pro 16 ubuntu 22.04 【迅为imx6q】开发板, 2G DDR 目标 …

SAP Webservice 发布外网SAP端代理配置

前言 SAP Webservice接口发布外网的需求不算少见,一般是通过代理形式替换Webservice地址中的域名,但是完整的Webservice接口发布外网还需要以下步骤(如果调用方在不做这些配置的情况下可以正常调用,则无需处理。) 1. 配…

gravity 安装部署

gravity是由膜拜公司自主研发的不同数据库间数据同步工具。 官方介绍:https://github.com/moiot/gravity/blob/master/README-cn.md Gravity 是一款数据复制组件,提供全量、增量数据同步,以及向消息队列发布数据更新。 DRC 的设计目标是&a…

有电脑就可以干的工作有哪些?试试这些项目

现在几乎人人都有手机,吃饭时候看,睡觉的时候看,上个厕所也在看,有次坐地铁,发现很多上学的初中生、小学生都拿着手机,手机档次还挺高,都是最新的苹果、华为款的手机。反之再看看使用电脑的人又…

Linux——信号知识归纳(上)

一.信号概念(一).大致认识信号是操作系统控制进程的一种方式,比如ctrl C、栈溢出程序崩溃、kill -9命令等底层都是操作系统发送信号给进程执行特定操作。因此,所有信号就底层而言都是操作系统发出的。同时,进程接收到信…

Java设计模式中桥接模式是什么/桥接模式有什么用,怎么运用桥接模式

继续整理记录这段时间来的收获,详细代码可在我的Gitee仓库SpringBoot克隆下载学习使用! 5.5 桥接模式 5.5.1 定义 将抽象与实现分离,使他们可以独立变化,即用组合关系来代替继承关系实现,从而降低抽象与实现两个可变…