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

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

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


| 特性 | 普通搜索模式 | 受限搜索模式 |
|---|---|---|
| 查询访问码 | GIAC | LIAC |
| 目标设备 | 所有可发现设备 | 仅限受限可发现设备 |
| 搜索范围 | 广泛 | 窄 |
| 典型耗时 | 较长(约10.24秒) | 较短(约2.56秒) |
| 使用场景 | 初始配对、广泛搜索 | 快速重连、隐私保护、省电 |
在蓝牙核心规范中,查询(Inquiry) 过程是实现设备发现的关键。这个过程主要涉及三种核心报文:ID Packet、FHS Packet 和可选的 EIR Packet。下表汇总了它们的主要区别:
| 报文类型 | 发送方 | 主要功能 | 核心内容 | 长度/特点 |
|---|---|---|---|---|
| ID Packet (查询请求) | 主查询设备 | 广播查询请求,宣布“我正在找设备” | 查询访问码 (GIAC/LIAC) | 68/72位,无包头和有效载荷 |
| FHS Packet (查询响应) | 从响应设备 | 回应查询,告知“我在这里,这是我的信息” | 蓝牙地址、时钟、设备类、页面扫描模式等 | 较完整的蓝牙数据包 |
| EIR Packet (扩展查询响应) | 从响应设备 | 提供更丰富的设备信息 | 本地名称、支持的UUID、发射功率等 | 数据结构为 LTV格式,可选 |
ID Packet本质上是反复发送的查询访问码,其生成与结构如下:
组成核心: 查询访问码(LAP)
生成过程:以LAP(如0x9E8B33)为种子,通过一组预定义的72位同步字序列生成。该序列由两部分组成:
关键特性:ID Packet没有传统数据包的包头、有效载荷或CRC。它是一个“简化到极致”的信号,唯一目的就是让扫描设备知道“正在进行一次查询”。
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等)的奇偶校验。 |
关键字段深度解析:
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字节为公司识别码,其余为自定义数据。 |
假设收到一个EIR数据片段:02 01 06 05 09 48 65 6C 6C 6F
查询/响应流程中的报文交互:

