传统蓝牙BR/EDR的搜索Inquiry

传统蓝牙BR/EDR的搜索Inquiry

在这里插入图片描述

一提到蓝牙想必大家都会随口而出蓝牙音乐、蓝牙免提电话等等蓝牙技术提供的这些功能,这也是用户使用蓝牙的目的。但所有这些功能得以正常使用,有一个必要条件——蓝牙搜索。操作蓝牙的这些功能必须得知道对端蓝牙设备的存在,再与之建立ACL连接,那这就离不开这期的主题,本篇文章就简单介绍下传统蓝牙搜索Inquiry。

蓝牙搜索协议简介

参考文件:蓝牙核心协议《Core_v5.0.pdf》,第二卷,F部分

搜索Inquiry顾名思义就是检测和收集周围环境中的蓝牙设备,根据询问的方式可分为 One-Time Inquiry(一次性询问)Periodic inquiry(周期性询问) 两种搜索模式。需要周期性地搜索蓝牙设备的情况下才会采用周期性询问这种方式,但是由于该种模式使用的场景有限且对功耗是个不小的负担,所以现在市面上的蓝牙设备基本不采用这种搜索模式,接下来就主要介绍下一次性询问。

One-Time Inquiry
步骤1:蓝牙Host通过命令HCI_Inquiry告知控制器Controller进入查询模式,用于发现周围环境中的其他蓝牙设备。
在这里插入图片描述

步骤2:蓝牙控制器Controller接收到上层开启搜索指令后将以指定的查询访问代码(IAC)和查询时长启动蓝牙基带搜索查询流程,对外发送ID包。周围环境中的蓝牙设备接收到ID包后会自己的设备信息封装到FHS包中做出响应,控制器解析FHS包获取所需的信息,并使用一个或多个查询结果事件将找到的设备相关信息返回给主机Host。
在这里插入图片描述

步骤3(a):如果主机Host希望停止搜索查询,则使用HCI_Inquiry_Cancel命令通知控制器Controller立即停止查询过程,控制器接收到指令就会停止对外发送ID包执行停止查询流程。
在这里插入图片描述

步骤3(b):如果主机Host没有主动停止查询,则控制器Controller会在查询上报的结果已达数量限制或者查询时长已到而停止查询,并将查询的完成事件上报给Host。
在这里插入图片描述

经过以上三步,一个完整的搜索查询Inquiry流程就完成了。对于流程中涉及到的HCI命令或事件再做如下说明:

1、 HCI_Inquiry
在这里插入图片描述

命令中三个参数的含义如下所示

LAP:上述步骤2中的查询访问代码就是从该值派生得到的,具体取值范围为是 0x9E8B00 ~ 0x9E8B3F,但是只有 0x9E8B000x9E8B33 这两个数值是有效的,其他值保留供将来使用。

  • 0x9E8B33 代表一般/无限制查询访问代码(GIAC)
  • 0x9E8B00 代表有限的专用查询访问代码(LIAC)

由于LIAC的使用有其局限性,所以参数LAP基本上都是使用GIAC这一固定参数。

详细介绍可以参考蓝牙SIG官网Assigned Numbers中的Baseband部分。
链接:https://www.bluetooth.com/specifications/assigned-numbers/baseband/
在这里插入图片描述

Inquiry_Length:查询模式的总持续时间,当此时间超时后查询将被停止,该参数的取值范围及对应的超时时间如下图:
在这里插入图片描述

Num_Responses:在查询停止之前可以接收的响应数,当响应数达到该值后,控制器Controller停止当前的查询,并上报Host查询完成事件。该参数的取值范围如下:
在这里插入图片描述

2、 上报查询的结果
在当前查询期间响应的蓝牙设备如果未被上报过且该设备没有被命令Set_Event_Filter过滤掉应始终以如下三种事件之一(Inquiry Result、Inquiry Result with RSSI或者Extended Inquiry Result)上报主机Host查询的结果,不管采用哪个事件上报Host,都是将查询到的设备信息告知主机。事件中具体包含什么信息感兴趣的同学可以执行查看具体协议中HCI COMMANDS AND EVENTS部分。主机协议栈依次接收到这些设备信息后,解析出相应的数据保存并上报蓝牙服务层。

如果搜索到的蓝牙设备在当前查询或查询期间已经被上报过,则该设备这次可能被上报,也可能不被上报,这取决于控制器Controller中的实现(对同一设备是只上报一次,还是只要设备响应就上报)。

最后随着HCI_Inquiry_Complete事件的上报,查询流程就完结了。那本篇传统蓝牙查询协议分享就到这,感兴趣的小伙伴欢迎私信留言一起讨论。

更多互联互通技术,欢迎关注微信公众号:Connectivity
在这里插入图片描述

<think>好的,用户想了解蓝牙的Page过程的工作原理实现细节。我需要先回忆一下蓝牙连接的基本流程。蓝牙设备在连接前通常需要经过寻呼(Page)寻呼扫描(Page Scan)阶段。根据用户提供的引用,特别是引用[1]中的“inquiry scan”,不过Page过程可能类似,但具体步骤可能不同。 首先,Page过程是用于建立连接的一个步骤。主设备(Master)会发送Page消息,从设备(Slave)需要处于Page Scan模式来接收这些消息。根据引用[2],HCI日志中的连接流程可能涉及生成Link Key,这可能在连接建立后发生。而引用[3]提到的RFCOMM协议属于高层,可能不在Page过程的讨论范围内。 接下来,我需要确认Page过程的具体步骤。主设备发送Page消息,使用从设备的蓝牙地址(BD_ADDR)来确定跳频序列。从设备在Page Scan状态下监听特定的信道,当收到Page消息后,会响应以建立连接。然后进入连接状态,可能涉及频率同步、时序调整等。 另外,可能需要提到Page Scan的物理信道时序参数,比如Page Scan窗口间隔。根据蓝牙规范,设备在Page Scan期间会周期性地监听,主设备需要在这段时间内发送Page消息。此外,Page过程可能涉及不同的状态切换,比如从Standby状态转换到Connection状态。 需要确保回答的结构清晰,分步骤说明主设备从设备的行为,并引用相关的资料,比如引用[2]中提到的HCI命令Link Key存储,这可能是在连接建立后的步骤。可能还需要区分传统蓝牙BR/EDR低功耗蓝牙(BLE)的不同,但用户的问题可能指的是经典蓝牙,根据引用[2][3]中的内容。 最后,生成相关问题,需要围绕Page过程的相关技术点,比如优化方法、失败处理、参数配置等。同时,确保使用正确的中文术语LaTeX格式,比如设备地址用$BD\_ADDR$,符合用户的要求。</think>### 蓝牙Page过程的工作原理与实现细节 蓝牙的**Page过程**是经典蓝牙BR/EDR)中主设备主动发起连接的关键步骤,用于建立物理链路层的连接。以下是其核心原理与实现细节: --- #### 1. **基本概念** - **主设备(Master)**:主动发起连接的设备。 - **从设备(Slave)**:处于可连接状态(Page Scan模式)的设备。 - **目标地址**:主设备需已知从设备的蓝牙地址($BD\_ADDR$),用于生成跳频序列[^2]。 --- #### 2. **Page过程的核心步骤** 1. **主设备发送Page消息** - 主设备使用从设备的$BD\_ADDR$生成**跳频序列**(Frequency Hopping Sequence),在32个特定频点上发送**ID数据包**(包含从设备的$BD\_ADDR$)。 - 发送频率时序由蓝牙时钟同步算法控制,确保信道切换与从设备扫描窗口对齐。 2. **从设备的Page Scan模式** - 从设备周期性监听Page Scan物理信道,每个扫描周期(`Page Scan Window`)持续约11.25ms,间隔由`Page Scan Interval`参数控制[^1]。 - 当检测到主设备的ID数据包时,从设备返回**从设备响应包**(Slave Response Packet)。 3. **建立连接** - 主设备收到响应后,发送**FHS数据包**(包含主设备的$BD\_ADDR$时钟信息),完成时序同步。 - 双方进入**连接状态**,主设备分配激活成员地址(`AM_ADDR`),开始数据传输。 --- #### 3. **关键技术细节** - **跳频抗干扰**:Page过程使用79个频点(传统蓝牙),主从设备按伪随机序列切换频点,避免干扰。 - **时序同步**:主设备通过FHS包传递时钟偏移量,使从设备调整本地时钟,保持时序一致。 - **超时与重试**:若主设备未收到响应,会重复发送Page消息,直到超时或成功。 --- #### 4. **HCI层的实现** 在协议栈中,Host Controller Interface(HCI)通过以下命令控制Page过程: - `HCI_Create_Connection`:触发主设备发起Page流程。 - `HCI_Write_Stored_Link_Key`:存储连接后生成的链路密钥(Link Key)[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值