蓝牙Flags字段含义解析及BlueZ btmon工具输出中Flag代码解读
我来帮你拆解这些蓝牙Flags的含义,刚好我也经常用BlueZ的btmon工具调试BLE设备,分两部分给你讲清楚——首先要区分你看到的两种不同的Flags字段:
一、MGMT Event层的Flags(直接跟在RSSI后的那行)
这些是BlueZ自身MGMT接口定义的设备发现标志,对应BlueZ源码里的mgmt.h头文件,你提到的两个值含义如下:
0x00000004:Not Connectable,意思是这个BLE设备只对外广播数据,不接受任何连接请求,常见于蓝牙信标(Beacon)这类设备。0x00000000:无特殊标志,说明设备是可连接的,且没有其他发现相关的限制属性。
二、BLE广告数据中的Flags(Data子项里的Flags)
这类Flags是蓝牙核心规范官方定义的,对应蓝牙核心规范Vol 3, Part C, Section 11.1.3,每个bit位代表设备的不同能力(从bit0开始计数):
| Bit位 | 含义 |
|---|---|
| 0 | LE Limited Discoverable Mode(有限可发现模式) |
| 1 | LE General Discoverable Mode(通用可发现模式) |
| 2 | BR/EDR Not Supported(不支持经典蓝牙) |
| 3 | Simultaneous LE and BR/EDR (Controller)(控制器同时支持BLE和经典蓝牙) |
| 4 | Simultaneous LE and BR/EDR (Host)(主机同时支持BLE和经典蓝牙) |
你遇到的两个值拆解后是:
0x1a:转换成二进制是11010,对应bit1(0x02)、bit3(0x08)、bit4(0x10),也就是btmon已经帮你解析的:- LE General Discoverable Mode
- Simultaneous LE and BR/EDR (Controller)
- Simultaneous LE and BR/EDR (Host)
这类设备同时支持BLE和经典蓝牙,且处于通用可发现状态。
0x06:二进制是110,对应bit1(0x02)和bit2(0x04),也就是:- LE General Discoverable Mode
- BR/EDR Not Supported
这类设备只支持BLE,不兼容经典蓝牙。
实用解读技巧
- 先区分Flags所属的层级:MGMT层的Flags在
@ MGMT Event: Device Found条目下,紧跟在RSSI之后;广告数据的Flags在Data length下面的子列表里。 - 对于MGMT层的Flags:如果遇到btmon没标注的数值,可以查BlueZ的
mgmt.h(树莓派上可以用apt source bluez下载源码查看,里面定义了MGMT_DEV_FLAG_*系列宏)。 - 对于广告数据的Flags:把十六进制值转成二进制,对照上面的bit位表逐一匹配即可,btmon通常会帮你解析大部分常见组合,如果遇到未解析的,自己拆bit就行。
内容的提问来源于stack exchange,提问作者dl1




