• 经典蓝牙Inquiry过程的跳频


    目录

    BT RF&BB

    Discovering Bluetooth Devices

     Frequency Hopping in Inquiry procedure


    关键词:Bluetooth Classic, Frequency Hopping, Inquiry

    经典蓝牙(以下简称BT)中,两个设备建立连接后,会同步Clock和hopping sequence。在建立连接之前的Inquiry过程中,两个设备是如何跳到同一个channel进行通信的呢?本文将通过解读Bluetooth Core spec的相关章节的内容来回答这个问题。希望本文能对还工作在古旧的Bluetooth Classic领域的工程师有所帮助。

    BT RF&BB

    在解读Inquiry过程的跳频之前,有必要简单介绍一下BT RF和BB的相关内容。

    • BT channels一共有79个,编号从0到78,每个channel bandwidth为1MHz。

    •  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)。

    Discovering Bluetooth Devices

    两个BT devices是如何找到对方的呢?Core spec定义了两个BT state:Inquiry and Inquiry Scan。一个设备(通常是做master/central那个)进入Inquiry state,并开始发送inquiries。另一个设备(通常是做slave/peripheral那个)进入Inquiry Scan state,试图接收inquiries。(做过BLE产品研发的同学需要注意,BT Inquiry过程和BLE Advertising的区别:BLE中,是由peripheral device发送advertisement,而在BT中,是由peripheral device 接收inquiry)

    Frequency Hopping in Inquiry procedure

    先简单描述一下 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。

    如果你想了解更多跳频算法的细节,请阅读Core Spec, Vol 2, Part B, 2.6 Hop selection。

    • 对于basic hop, SELECTION BOX内部如图Figure 2.16。

    • Inquiry Scan/Inquiry/Inquiry response的hop selection控制字(Control word): X, Y1, Y2, A to F 是由native Bluetooth Clock和GIAC决定的。可以看到, 在Table 2.2中,A to F都是相同的。

    • 这些控制字的来源如下。CLKN[27:0]就是native bluetooth clock。它是由一个28 bit counter实现的。这个counter受一个3.2 kHz的时钟驱动,所以CLKN[27:0]的单位时间是312.5us,即half a time slot。CLKN[0], CLKN[1], CLKN[2]和CLKN[12]分别对应着时间周期312.5us, 625us, 1.25ms和1.28s——这是Bluetooth System中四个重要的时间周期。

    最后,欢迎讨论交流!

    参考文献:

    1. Bluetooth Core Spec 5.3
    2. Introduction to Bluetooth Classic
  • 相关阅读:
    css3文字环绕旋转
    记 cisco ucs b200 m3 部署esxi 6.7
    【ATT&CK】ATT&CK视角下的水坑钓鱼攻防战法
    Python 解决tkinter的Menu菜单command参数与bind方法共用触发事件
    C++ Qt高级开发视频教程
    数据预处理和特征工程1--无量纲化:数据归一化、标准化
    UE5笔记【九】蓝图BluePrint;
    leetcode 经典题目42.接雨水
    每天几道Java面试题:集合(第四天)
    【Spring Cloud】安装 ElasticSearch、KIbana
  • 原文地址:https://blog.csdn.net/Wendell_Gong/article/details/126959498