【蓝牙协议栈】General Inquiry和Limited Inquiry全解析

前言

蓝牙设备发现机制分为普通搜索和受限搜索两种模式。普通搜索使用GIAC码,可发现所有可发现设备,耗时约10.24秒,适用于初始配对等场景;受限搜索使用LIAC码,仅发现特定设备,耗时约2.56秒,适用于快速重连等场景。查询过程涉及IDPacket(查询请求)、FHSPacket(基础响应)和可选的EIRPacket(扩展信息响应)。IDPacket包含查询访问码,FHSPacket提供设备地址等关键信息,EIRPacket则提供更详细的设备信息。查询参数包括访问码类型、持续时间和响应数量等设置。

背景

表 4.1 规定了响应设备(设备 B)的行为要求。

表 6.1 规定了搜索和发现步骤的设备(设备 A)的要求。

1. Inquiry mode

在传统蓝牙(BR/EDR)中,受限搜索模式(Limited Inquiry)和普通搜索模式(General Inquiry)是两种设备发现机制,主要区别如下:

1.1 普通搜索模式(General Inquiry)

  • 目的:发现周围所有可发现的蓝牙设备,无论它们处于普通可发现模式还是受限可发现模式。

  • 查询访问码 :使用 GIAC(General Inquiry Access Code,通用查询访问码)。

  • 响应设备 :所有处于可发现模式(如"可被发现"或"通用可发现")的设备都会响应。

  • 应用场景

    • 初始配对、搜索未知设备(如搜索新耳机、手机等)。

    • 用户主动搜索周围所有蓝牙设备。

  • 搜索时间:通常较长(默认约10.24秒),以确保发现更多设备。

  • **条件:**为了使设备 A 能够接收查询响应,范围内的远程设备必须设置为可发现状态(受限发现或普通发现模式)

1.2 受限搜索模式(Limited Inquiry)

  • 目的 :仅发现特定类型受限可发现的设备。

  • 查询访问码 :使用 LIAC(Limited Inquiry Access Code,受限查询访问码)。

  • 响应设备 :仅处于受限可发现模式的设备会响应(例如,设备仅临时开放发现)。

  • 应用场景

    • 快速连接已知设备或特定服务(如之前配对过的设备)。

    • 隐私保护场景,避免被广泛搜索。

    • 省电或减少搜索流量。

  • 搜索时间:通常较短(默认约2.56秒),以提高效率。

  • **条件:**为了使设备 A 能够接收搜索响应,必须将范围内的远程设备设置为有限可发现模式。

1.3 两者核心区别总结

特性 普通搜索模式 受限搜索模式
查询访问码 GIAC LIAC
目标设备 所有可发现设备 仅限受限可发现设备
搜索范围 广泛
典型耗时 较长(约10.24秒) 较短(约2.56秒)
使用场景 初始配对、广泛搜索 快速重连、隐私保护、省电

1.4 技术细节

  • 设备可同时支持两种模式,但需分别响应对应的查询访问码。

  • 受限搜索模式在蓝牙规范中设计为临时状态,设备通常不会长期处于此模式。

  • 实际应用中,普通搜索更常见(如手机搜索蓝牙设备),而受限搜索多用于特定协议或优化场景。

1.5 示例

  • 普通搜索:打开手机蓝牙,点击"搜索设备",会列出周围所有可发现的蓝牙耳机、音箱等。

  • 受限搜索:蓝牙耳机在配对模式下仅短时间(如30秒)进入受限可发现状态,此时手机可通过受限搜索快速找到它。

2. Inquiry报文格式

在蓝牙核心规范中,查询(Inquiry) 过程是实现设备发现的关键。这个过程主要涉及三种核心报文:ID PacketFHS Packet 和可选的 EIR Packet。下表汇总了它们的主要区别:

报文类型 发送方 主要功能 核心内容 长度/特点
ID Packet (查询请求) 主查询设备 广播查询请求,宣布"我正在找设备" 查询访问码 (GIAC/LIAC) 68/72位,无包头和有效载荷
FHS Packet (查询响应) 从响应设备 回应查询,告知"我在这里,这是我的信息" 蓝牙地址、时钟、设备类、页面扫描模式等 较完整的蓝牙数据包
EIR Packet (扩展查询响应) 从响应设备 提供更丰富的设备信息 本地名称、支持的UUID、发射功率等 数据结构为 LTV格式,可选

**2.**1. ID Packet格式与生成

ID Packet本质上是反复发送的查询访问码,其生成与结构如下:

组成核心查询访问码(LAP)

  • GIAC0x9E8B33

  • LIAC0x9E8B00

生成过程 :以LAP(如0x9E8B33)为种子,通过一组预定义的72位同步字序列生成。该序列由两部分组成:

  • 前置码10100101交替的4位模式,用于直流平衡和同步。

  • 同步字 :根据LAP计算出的64位独特序列,具备强自相关特性,便于接收端在嘈杂环境中可靠识别。

关键特性 :ID Packet没有传统数据包的包头、有效载荷或CRC。它是一个"简化到极致"的信号,唯一目的就是让扫描设备知道"正在进行一次查询"。

**2.**2. FHS Packet格式详解

FHS Packet是一个完整的、包含了连接所需全部基础信息的蓝牙数据包。

FHS Packet整体结构(240位 = 30字节)

字段 长度(位) 说明
LAP (Lower Address Part) 24 从设备蓝牙地址的低24位部分。
SR (Scan Repetition) 2 页面扫描重复模式。00 = R0, 01 = R1, 10 = R2。
SP (Scan Period) 1 保留位。
UAP (Upper Address Part) 8 从设备蓝牙地址的中间8位部分。
NAP (Non-significant Address Part) 16 从设备蓝牙地址的高16位部分。
Device Class 24 设备类,编码了主要设备类型、主要服务和次要服务。
AM_ADDR (暂时未用) 3 在查询响应中设为000
Clock Offset 13 本地时钟偏移,主设备用于预测从设备时钟。
Page Scan Mode 1 0 = 标准扫描模式, 1 = 强制扫描模式。
Reserved 2 保留位。
3-bit Parity 3 对前面34位(LAP+UAP+SR等)的奇偶校验。

关键字段深度解析

  1. 蓝牙地址(BD_ADDR) :由NAPUAPLAP拼接成48位唯一地址。查询响应中,LAP部分可能与原始ID Packet的查询LAP不同。

  2. 设备类(Class of Device)

    • 格式:一个24位的字段,划分为三个部分:

      • Bit 23-13次要设备类,描述设备在主要类别中的子类型。

      • Bit 12-8主要服务类,描述设备提供的核心服务(如渲染、音频、电话等)。

      • Bit 7-2主要设备类,描述设备的大类(如电话、音频、外设、成像等)。

      • Bit 1-0格式类型 ,通常为00

  3. 时钟偏移(Clock Offset)

    • 这是查询设备本地时钟与响应设备本地时钟之间采样时刻的差值 ,计算公式为:
      clock_offset = (CLKN_{slave} - CLKN_{master}) mod 32768

    • 主设备在后续的寻呼(Page)过程中使用此偏移量,可以大幅缩短连接建立时间

  4. 扫描模式(SR & Page Scan Mode)

    • 这些字段告诉查询设备,应该以何种方式、多快的速度来发起后续的寻呼连接。

**2.**3 EIR Packet格式详解

EIR Packet紧随FHS之后发送,采用TLV(类型-长度-值) 结构(也称为LTV,即长度-类型-值),提供丰富的扩展信息。

EIR数据段整体结构

整个EIR Packet的有效载荷由一个或多个EIR数据结构顺序连接而成。

单个EIR数据结构格式

字段 长度(字节) 说明
Length 1 本数据结构中 "Type"和"Data"部分的总字节数
Type (EIR Data Type) 1 定义后续"Data"字段的含义。
Data (Length - 1) 与Type对应的具体数据内容。

常用EIR数据类型(Type)示例

类型值 (Hex) 名称 数据内容说明
0x01 Flags 比特掩码,如:Bit 0 = LE受限发现模式, Bit 1 = LE普通发现模式, Bit 2 = BR/EDR不支持, Bit 3 = 同时支持BR/EDR和LE。
0x08 Shortened Local Name 设备名称的简称(如果完整名称太长)。
0x09 Complete Local Name 设备的完整名称。
0x0A Tx Power Level 1字节有符号整数,表示发射功率(单位:dBm)。
0x0D Class of Device 3字节,与FHS中的设备类相同,提供冗余信息。
0x16 16-bit Service UUIDs 一系列16位的服务UUID(如0x110A = 音频输出服务)。
0xFF Manufacturer Specific Data 厂商自定义数据。前2字节为公司识别码,其余为自定义数据。

2.4解析示例

假设收到一个EIR数据片段:02 01 06 05 09 48 65 6C 6C 6F

  • 02 01 06:第一个数据结构。长度=2(0106共2字节),类型=0x01(标志位),数据=0x06(二进制00000110,表示支持LE普通发现模式且同时支持BR/EDR)。

  • 05 09 48 65 6C 6C 6F:第二个数据结构。长度=5,类型=0x09(完整名称),数据=48 65 6C 6C 6F(ASCII码对应"Hello")。

2.5总结

查询/响应流程中的报文交互

  1. 主查询设备在多个频率上重复发送ID Packet(只有访问码)。

  2. 从设备在扫描时捕获ID Packet,计算时机,在特定时隙用FHS Packet 回复,其中包含连接必需的地址、时钟和类别信息

  3. (可选)从设备紧接着发送EIR Packet ,提供名称、服务、功率等丰富元数据

相关推荐
Wireless_Link2 年前
蓝牙音视频远程控制协议(AVRCP)介绍
蓝牙协议栈·蓝牙avrcp协议·蓝牙音乐控制协议·avrcp·音视频远程控制
天安彩2 年前
BLE架构与开源协议栈
开源·esp32·ble·蓝牙协议栈·nrf52