蓝牙Inquiry与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命令进行设置。
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

  • 4
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dokin丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值