最近电脑连 Sony WH-1000XM6 出了个怪问题:蓝牙设置里显示「已连接」,但音量面板里根本没有这副耳机的输出选项,过几秒就断开,然后又自动连上,一直循环。耳机连手机完全正常,换 Galaxy Buds4 Pro 连这台电脑也一样没声音。
折腾了两天,最后用系统自带的 ETW 抓了蓝牙 HCI 包,才发现问题出在高通 FastConnect 6900 蓝牙驱动 2.0.0.1339 带的固件上:它用一个 Windows 根本没开启的 HCI 事件来报告「链路已加密」,Windows 等不到它要的那个事件,就一直认为链路没加密,把所有音频通道都拦了。把驱动回退到 2.0.0.1292,再彻底断电开机,问题解决。只重启是没用的。
过程挺曲折,记录一下排查思路和证据,说不定能帮到遇到类似问题的人。
问题现象
- 蓝牙设置里耳机显示「已连接」,但声音输出列表里没有它,「声音」控制面板里显示为已断开。
- 几秒到十几秒后断开,然后自动重连,无限循环。
- 删除设备重新配对能配对成功,但马上又是同样的问题;重新配对时还要等好几分钟才能搜到耳机。
- 耳机连手机正常;另一副 Galaxy Buds4 Pro 连这台电脑也一样没声音。
- 事件查看器 → Windows 日志 → 系统,来源
BTHUSB,大量事件 ID 24 警告:「Windows 拒绝了设备连接,因为设备没有在建立服务级别的连接之前进行加密。」

事件查看器里的 BTHUSB 事件 24,一共 120 条(计算机名已打码)
系统日志里蓝牙相关的记录(同一事件连续出现的合并成一行):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 2026-09-30 04:30:24 WU 19 安装成功: Qualcomm Atheros Communications Bluetooth Driver Update (2.0.0.1339) 2026-10-11 03:12:38 BTHUSB 16 本地蓝牙无线收发器与地址为 (58:18:62:xx:xx:xx) 的设备之间的相互验证失败。 2026-10-12 09:54:06 BTHUSB 24 Windows 拒绝了设备连接,因为设备没有在建立服务级别的连接之前进行加密。 ……同一事件又重复 10 次 2026-10-15 10:25:25 BTHUSB 8 远程适配器 (58:18:62:xx:xx:xx) 成功地与本地适配器配对。 ← 重新配对 2026-10-15 10:25:26 BTHUSB 24 Windows 拒绝了设备连接…… ← 1 秒后又被拒 ……同一事件又重复 18 次 2026-10-15 10:47:17 BTHUSB 3 发送到适配器的命令已经超时;适配器没有响应。 2026-10-15 10:51:21 BTHUSB 16 ……相互验证失败。(又重复 5 次) 2026-10-15 10:57:02 BTHUSB 8 远程适配器 (58:18:62:xx:xx:xx) 成功地与本地适配器配对。 ← 第二次重新配对 2026-10-15 20:12:33 BTHUSB 24 Windows 拒绝了设备连接……(又重复 17 次) 2026-10-16 00:10:49 BTHUSB 24 Windows 拒绝了设备连接……(又重复 42 次) 2026-10-17 05:34:37 WU 19 安装成功: 2026-10 安全更新(KB5127648) (26300.9711) 2026-10-17 15:44:49 BTHUSB 24 Windows 拒绝了设备连接……(又重复 8 次) ← 装完 10 月更新、重启后依旧 (2026-10-17 15:49 断电冷启动之后:0 条) |
环境:Windows 11 26H2(26300),无线网卡是高通 FastConnect 6900(蓝牙部分的硬件 ID 是 USB\VID_0489&PID_E0E3)。
走过的弯路
一开始怀疑了一圈,一个个排除:
| 怀疑对象 | 怎么验证的 | 结论 |
|---|---|---|
| 耳机端的配对信息坏了 | 删除重配;抓包看认证过程 | 链接密钥和加密都成功,不是它 |
| 搜不到耳机:无线电被占用 | 抓包发现电脑每 5 秒呼叫一次已配对、但不在身边的 Buds4 Pro(Create Connection → Page Timeout),90 秒内 16 次 | 这就是「要等几分钟才搜得到」的原因,删掉 Buds 的配对就好了;但和没声音无关 |
| 第三方 A2DP 驱动(为了 LDAC 装的 Alternative A2DP Driver) | 设备管理器里把耳机的 A2DP 驱动换回微软自带的;再临时停掉 AltA2dpSVC 服务 | 换回微软驱动照样没声音,不是根因。不过它会在耳机断开的瞬间立刻重连,让日志更乱 |
| 耳机的 SDP 服务记录有问题 | 从抓包里拼出耳机 1720 字节的 SDP 记录,发现 HID 那条记录里有重复、乱序的属性;再用 Windows API(BluetoothSdpEnumAttributes、WSALookupServiceBegin + NS_BTH)解析 | Windows 都能正常解析,不是它 |
| 存储感知清理了驱动、过滤驱动、服务状态 | 查 setupapi.dev.log、设备类过滤器、蓝牙相关服务 | 只清理了旧的 NVIDIA 驱动,其他都正常 |
| 耳机本身 | 换 Galaxy Buds4 Pro 测试 | 一样失败,问题在电脑上 |
用系统自带工具抓蓝牙 HCI 包
Windows 蓝牙协议栈 BTHPORT 有个 ETW provider,开启后会把每个 HCI 包记成事件 402,不用装任何第三方工具。需要管理员权限:
1 2 3 4 5 6 7 8 9 10 | # bt-providers.txt 的内容 {8A1F9517-3A8C-4A9E-A018-4F17A200F277} 0xffffffffffffffff 0xff {33693E1D-246A-471B-83BE-3E75F47A832D} 0xffffffffffffffff 0xff # 开始抓(管理员) logman start BtTrace -ets -pf C:\bt\bt-providers.txt -o C:\bt\bt.etl -bs 1024 -nb 64 512 -mode Circular -max 512 # ……复现问题…… logman stop BtTrace -ets |
第一个 GUID 是 Microsoft-Windows-BTH-BTHPORT,第二个是 Microsoft-Windows-BTH-BTHUSB。输出路径别太长:超过 260 个字符时 logman 会直接报「系统找不到指定的路径」。
事件 402 的第 3 个属性是包类型(1 = 命令,2 = 事件,3 = 收到的 ACL 数据,4 = 发出的 ACL 数据),第 5 个属性是原始字节。用 PowerShell 就能读:
1 2 3 4 5 6 7 | Get-WinEvent -Path C:\bt\bt.etl -Oldest | Where-Object Id -eq 402 | ForEach-Object { $p = $_.Properties '{0:HH:mm:ss.fff} type={1} {2}' -f $_.TimeCreated, $p[2].Value, (($p[4].Value | ForEach-Object { $_.ToString('x2') }) -join ' ') } |
剩下就是对着蓝牙核心规范解析:命令的前两个字节是 opcode(小端),事件的第一个字节是事件码;ACL 数据前 4 字节是句柄和长度,后面是 L2CAP 头(长度、通道 ID),通道 0x0001 是信令。PSM 0x0019 是 AVDTP(音乐),0x0003 是 RFCOMM(免提走这个)。
关键证据:加密已经开了,Windows 还是拒绝
耳机主动连电脑时的一次完整过程,下面是原始字节和我的注释(EVT = 适配器发给主机的事件,CMD = 主机发的命令,RX/TX = 收/发的 ACL 数据):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | 00:10:48.202 EVT 04 0a xx xx xx 62 18 58 04 04 24 01 → Connection Request:耳机要连进来 00:10:48.393 EVT 03 0b 00 0d 00 xx xx xx 62 18 58 01 00 → Connection Complete:status=0x00,句柄 0x000d 00:10:48.770 EVT 17 06 xx xx xx 62 18 58 → Link Key Request:耳机发起认证,Windows 随后回复了链接密钥(这个包含密钥,不贴) 00:10:48.884 EVT 59 05 00 0d 00 01 10 → Encryption Change v2:status=0x00,句柄 0x000d,加密=1,密钥长度 0x10(16 字节) 00:10:48.922 RX 0d 20 0c 00 08 00 01 00 02 05 04 00 03 00 40 00 → L2CAP Connection Request,PSM 0x0003(RFCOMM,免提) 00:10:48.922 TX 0d 00 10 00 0c 00 01 00 03 05 08 00 42 00 40 00 01 00 00 00 → Connection Response,result 0x0001 = Pending 00:10:48.924 RX 0d 20 0c 00 08 00 01 00 02 06 04 00 19 00 42 00 → L2CAP Connection Request,PSM 0x0019(AVDTP,音乐) 00:10:48.924 TX 0d 00 10 00 0c 00 01 00 03 06 08 00 43 00 42 00 01 00 00 00 → Connection Response,result 0x0001 = Pending 00:10:49.936 TX 0d 00 10 00 0c 00 01 00 03 05 08 00 42 00 40 00 03 00 00 00 → Connection Response,result 0x0003 = Security Block(拒绝) 00:10:49.936 CMD 06 04 03 0d 00 05 → HCI Disconnect,原因 0x05 Authentication Failure 00:10:50.034 EVT 05 04 00 0d 00 16 → Disconnection Complete,原因 0x16(本机主动断开) 同一秒的系统日志:BTHUSB 24「设备没有在建立服务级别的连接之前进行加密」 |
链路明明在 48.884 就已经加密了,Windows 却在 1 秒后说设备没加密,然后自己断开了连接。
再看电脑主动连耳机的情况:Windows 发 Set Connection Encryption,适配器回 0x59,之后 Windows 就再也没动静了,既不开 AVDTP 也不开 RFCOMM,只是反复去查耳机的 SDP 记录。耳机等了几秒没人理,主动断开(原因 0x13),然后再来一遍。
前后 6 份抓包统计:加密事件 0x59(Encryption Change v2)共 14 次,经典的 0x08(Encryption Change)0 次。
是谁让适配器发 v2 事件的?
Encryption Change v2 是蓝牙 5.3 新加的,比 v1 多了一个密钥长度字段,省得主机收到加密事件后再单独发一次 Read Encryption Key Size。按规范,控制器只有在主机用 Set Event Mask Page 2 开启它以后才应该发 v2,否则应该发 v1。
于是抓包的同时用 pnputil /restart-device 重启蓝牙适配器,看 Windows 初始化时到底开了哪些事件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 22:45:41.035 CMD 03 0c 00 → HCI_Reset 22:45:41.584 CMD 01 10 00 → Read Local Version Information 22:45:41.590 EVT 0e 0c 01 01 10 00 0c 00 00 0c 1d 00 e2 65 → HCI 版本 0x0c(蓝牙 5.3),厂商 0x001d(Qualcomm),LMP subversion 0x65e2 22:45:41.635 CMD 01 0c 08 ff ff ff ff ff ff bf 3d → Set Event Mask = 0x3DBFFFFFFFFFFFFF,bit 7(Encryption Change 0x08)= 1,已开启 (整个初始化过程没有出现 63 0c 开头的命令,也就是 Set Event Mask Page 2 一次都没发过) …… 22:47:10.911 CMD 13 04 03 03 00 01 → Set Connection Encryption,句柄 0x0003,开启加密 22:47:11.079 EVT 59 05 00 03 00 01 10 → Encryption Change v2:主机没开启的事件;主机等的 0x08 永远不来 |
结论很清楚:是适配器固件在发一个主机没开启的事件。Windows 不处理它,于是永远不知道链路已经加密。这跟耳机无关,所以所有经典蓝牙耳机都中招。
什么时候开始的
| 日期 | 发生了什么 |
|---|---|
| 2026-09-25 | 装了可选预览更新 KB5124010(26300.9550),更新了 bthport.sys 等蓝牙核心文件 |
| 2026-09-30 | Windows 更新自动装了「Qualcomm Atheros Communications Bluetooth Driver Update (2.0.0.1339)」,里面这颗芯片的固件补丁(ramps_0x00130201*.dfu)和 2.0.0.1292 的不一样 |
| 2026-10-11 | 系统日志第一次出现蓝牙认证失败(BTHUSB 16) |
| 2026-10-12 起 | 大量 BTHUSB 24 |
| 2026-10-16 | 回退到 2.0.0.1292 并重启,还是不行 |
| 2026-10-17 | 装 10 月安全更新 KB5127648(26300.9711)并重启,还是不行 |
| 2026-10-17 | 关机后断电 30 秒再开机,正常了 |

Windows 更新历史:9/25 的预览更新 KB5124010 和 10/17 的安全更新 KB5127648
两个版本的驱动包都还在驱动商店里,对比一下给这颗芯片(ROM 版本 0x00130201)用的固件补丁文件,大部分都变了(SHA-256 前 12 位):
1 2 3 4 5 6 7 8 9 | 文件 2.0.0.1292 2.0.0.1339 ramps_0x00130201.dfu C664048371B7 25164112DF83 不同 ramps_0x00130201_LEHP.dfu CDB661ED13DE D3F682BC6EF9 不同 ramps_0x00130201_gf.dfu 3C6B30ADBA68 46DC13D8BC16 不同 ramps_0x00130201_gf_LEHP.dfu F3AB142B6A43 6D0AB4C134B3 不同 ramps_0x00130201_010a.dfu C664048371B7 25164112DF83 不同 ramps_0x00130201_010b.dfu C664048371B7 25164112DF83 不同 ramps_0x00130201_030a.dfu 7E009D1B71B4 7E009D1B71B4 相同 (其余几个 gf_/LEHP 变体同样是不同,只有 030a 两个相同) |
解决办法,以及为什么重启没用
- 设备管理器 → 蓝牙 → Qualcomm FastConnect 6900 Bluetooth Adapter → 属性 → 驱动程序 → 回退驱动程序。如果按钮是灰的:更新驱动程序 → 浏览我的电脑以查找驱动程序 → 让我从计算机上的可用驱动程序列表中选取 → 选 2.0.0.1292(2025/3/20)。
- 彻底关机并断电:按住 Shift 点「关机」(跳过快速启动),关机后拔掉电源或关掉电源开关 30 秒,再开机。

回退后的蓝牙适配器驱动:2.0.0.1292(2025/3/20)
第二步是关键。下面是同一个驱动(2.0.0.1292)下三次开机的对比,「拒绝次数」是 BTHUSB 24 的数量:
| 开机方式 | Windows 版本 | 拒绝次数 | 有声音 |
|---|---|---|---|
| 重启 | 26300.9550 | 17 | 否 |
| 装 10 月更新后重启 | 26300.9711 | 9 | 否 |
| 关机 + 断电 30 秒 | 26300.9711 | 0 | 是 |
高通芯片的固件补丁是加载到芯片内存里的。普通重启时这块网卡不一定断电,驱动发现芯片已经打过补丁,就可能不再重新下载,所以回退驱动以后芯片里跑的还是 1339 的固件。只有真正断电,2.0.0.1292 自带的旧固件才会被加载。这也解释了为什么「回退了驱动却没用」。
9 月 25 日的预览更新同样改了蓝牙协议栈,一开始我也怀疑是它和新固件凑在一起才出的问题。但下面这份修好后的抓包里,Windows 版本完全没变(都是 26300.9711),只是芯片换回了 1292 的固件,适配器就改发经典的 0x08 事件,音频马上正常。至少在这个版本的 Windows 上,光固件一项就足以解释整个问题。
修好之后再抓一次:经典事件回来了
断电冷启动后,我又抓了一次「耳机关机再开机、自动重连」的过程。和上面坏掉时那份一样,都是耳机主动连电脑,Windows 版本也一样,区别只在芯片里的固件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 17:01:04.950 EVT 04 0a xx xx xx 62 18 58 04 04 24 01 → Connection Request:耳机要连进来 17:01:05.116 EVT 03 0b 00 01 00 xx xx xx 62 18 58 01 00 → Connection Complete:status=0x00,句柄 0x0001 17:01:05.391 EVT 17 06 xx xx xx 62 18 58 → Link Key Request:耳机发起认证,Windows 回复链接密钥 17:01:05.497 EVT 08 04 00 01 00 01 → Encryption Change(经典 0x08):status=0x00,句柄 0x0001,加密=1 17:01:05.527 RX 01 20 0c 00 08 00 01 00 02 05 04 00 03 00 40 00 → L2CAP Connection Request,PSM 0x0003(RFCOMM,免提) 17:01:05.527 TX 01 00 10 00 0c 00 01 00 03 05 08 00 42 00 40 00 01 00 00 00 → Pending 17:01:05.528 RX 01 20 0c 00 08 00 01 00 02 06 04 00 19 00 42 00 → L2CAP Connection Request,PSM 0x0019(AVDTP,音乐) 17:01:05.528 TX 01 00 10 00 0c 00 01 00 03 06 08 00 43 00 42 00 01 00 00 00 → Pending 17:01:05.528 TX 01 00 10 00 0c 00 01 00 03 06 08 00 43 00 42 00 00 00 00 00 → result 0x0000 = Success(同一毫秒内) 17:01:05.558 TX 01 00 10 00 0c 00 01 00 03 05 08 00 42 00 40 00 00 00 00 00 → result 0x0000 = Success(31 ms 后) |
| 1339 固件(坏) | 1292 固件(好) | |
|---|---|---|
| 加密完成事件 | 0x59 Encryption Change v2(6 份抓包共 14 次,0x08 为 0 次) | 0x08 Encryption Change(1 次,0x59 为 0 次) |
| 免提(RFCOMM) | Pending,1 秒后 Security Block | Pending,31 ms 后 Success |
| 音乐(AVDTP) | Pending,随后连接被 Windows 断开 | 同一毫秒内 Success |
| 系统日志 BTHUSB 24 | 每次重连都有 | 0 条 |
| 结果 | 没声音、反复断开 | 正常出声 |
如果你也遇到了
- 事件查看器 → Windows 日志 → 系统,筛选来源
BTHUSB,看有没有事件 ID 24。 - 设备管理器里看蓝牙适配器是不是高通 FastConnect 6900,驱动版本是不是 2.0.0.1339。
- 回退驱动,然后关机断电冷启动(上面两步)。
- 防止它被装回来:管理员运行
pnputil /enum-drivers,找到原始名称为btfilter.inf、版本 2.0.0.1339 的那一项,用pnputil /delete-driver删掉;以后 Windows 更新再推这个驱动,用微软的「显示或隐藏更新」工具把它隐藏。我这里的输出是这样的:
123456789发布名称: oem165.inf原始名称: btfilter.inf提供程序名称: Qualcomm Atheros Communications驱动程序版本: 03/20/2025 2.0.0.1292发布名称: oem56.inf ← 要删的就是这个原始名称: btfilter.inf提供程序名称: Qualcomm Atheros Communications驱动程序版本: 01/27/2026 2.0.0.1339 - 注意:万一哪天又被装回 1339,症状要等到下一次断电开机才会出现,很容易找错原因。
- 临时方案:插一个其他芯片的 USB 蓝牙适配器,并在设备管理器里禁用板载的那个。
参考
- Bluetooth Core 5.3 Feature Enhancements(Encryption Change v2 和 Read Encryption Key Size 的说明)
- bluez/bluez #811:另一个蓝牙 5.3 控制器在加密密钥长度这一步出问题的案例
0 评论