Windows 蓝牙耳机已连接却没声音、反复断开:高通 FastConnect 6900 蓝牙驱动 2.0.0.1339(2026/1/27)的固件问题

最近电脑连 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

事件查看器里的 BTHUSB 事件 24,一共 120 条(计算机名已打码)

系统日志里蓝牙相关的记录(同一事件连续出现的合并成一行):

环境: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,不用装任何第三方工具。需要管理员权限:

第一个 GUID 是 Microsoft-Windows-BTH-BTHPORT,第二个是 Microsoft-Windows-BTH-BTHUSB。输出路径别太长:超过 260 个字符时 logman 会直接报「系统找不到指定的路径」。

事件 402 的第 3 个属性是包类型(1 = 命令,2 = 事件,3 = 收到的 ACL 数据,4 = 发出的 ACL 数据),第 5 个属性是原始字节。用 PowerShell 就能读:

剩下就是对着蓝牙核心规范解析:命令的前两个字节是 opcode(小端),事件的第一个字节是事件码;ACL 数据前 4 字节是句柄和长度,后面是 L2CAP 头(长度、通道 ID),通道 0x0001 是信令。PSM 0x0019 是 AVDTP(音乐),0x0003 是 RFCOMM(免提走这个)。

关键证据:加密已经开了,Windows 还是拒绝

耳机主动连电脑时的一次完整过程,下面是原始字节和我的注释(EVT = 适配器发给主机的事件,CMD = 主机发的命令,RX/TX = 收/发的 ACL 数据):

链路明明在 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 初始化时到底开了哪些事件:

结论很清楚:是适配器固件在发一个主机没开启的事件。Windows 不处理它,于是永远不知道链路已经加密。这跟耳机无关,所以所有经典蓝牙耳机都中招。

什么时候开始的

日期发生了什么
2026-09-25装了可选预览更新 KB5124010(26300.9550),更新了 bthport.sys 等蓝牙核心文件
2026-09-30Windows 更新自动装了「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 更新历史记录

Windows 更新历史:9/25 的预览更新 KB5124010 和 10/17 的安全更新 KB5127648

两个版本的驱动包都还在驱动商店里,对比一下给这颗芯片(ROM 版本 0x00130201)用的固件补丁文件,大部分都变了(SHA-256 前 12 位):

解决办法,以及为什么重启没用

  1. 设备管理器 → 蓝牙 → Qualcomm FastConnect 6900 Bluetooth Adapter → 属性 → 驱动程序 → 回退驱动程序。如果按钮是灰的:更新驱动程序 → 浏览我的电脑以查找驱动程序 → 让我从计算机上的可用驱动程序列表中选取 → 选 2.0.0.1292(2025/3/20)。
  2. 彻底关机并断电:按住 Shift 点「关机」(跳过快速启动),关机后拔掉电源或关掉电源开关 30 秒,再开机。
蓝牙适配器驱动回退到 2.0.0.1292

回退后的蓝牙适配器驱动:2.0.0.1292(2025/3/20)

第二步是关键。下面是同一个驱动(2.0.0.1292)下三次开机的对比,「拒绝次数」是 BTHUSB 24 的数量:

开机方式Windows 版本拒绝次数有声音
重启26300.955017否
装 10 月更新后重启26300.97119否
关机 + 断电 30 秒26300.97110是

高通芯片的固件补丁是加载到芯片内存里的。普通重启时这块网卡不一定断电,驱动发现芯片已经打过补丁,就可能不再重新下载,所以回退驱动以后芯片里跑的还是 1339 的固件。只有真正断电,2.0.0.1292 自带的旧固件才会被加载。这也解释了为什么「回退了驱动却没用」。

9 月 25 日的预览更新同样改了蓝牙协议栈,一开始我也怀疑是它和新固件凑在一起才出的问题。但下面这份修好后的抓包里,Windows 版本完全没变(都是 26300.9711),只是芯片换回了 1292 的固件,适配器就改发经典的 0x08 事件,音频马上正常。至少在这个版本的 Windows 上,光固件一项就足以解释整个问题。

修好之后再抓一次:经典事件回来了

断电冷启动后,我又抓了一次「耳机关机再开机、自动重连」的过程。和上面坏掉时那份一样,都是耳机主动连电脑,Windows 版本也一样,区别只在芯片里的固件:

1339 固件(坏)1292 固件(好)
加密完成事件0x59 Encryption Change v2(6 份抓包共 14 次,0x08 为 0 次)0x08 Encryption Change(1 次,0x59 为 0 次)
免提(RFCOMM)Pending,1 秒后 Security BlockPending,31 ms 后 Success
音乐(AVDTP)Pending,随后连接被 Windows 断开同一毫秒内 Success
系统日志 BTHUSB 24每次重连都有0 条
结果没声音、反复断开正常出声

如果你也遇到了

  1. 事件查看器 → Windows 日志 → 系统,筛选来源 BTHUSB,看有没有事件 ID 24。
  2. 设备管理器里看蓝牙适配器是不是高通 FastConnect 6900,驱动版本是不是 2.0.0.1339。
  3. 回退驱动,然后关机断电冷启动(上面两步)。
  4. 防止它被装回来:管理员运行 pnputil /enum-drivers,找到原始名称为 btfilter.inf、版本 2.0.0.1339 的那一项,用 pnputil /delete-driver 删掉;以后 Windows 更新再推这个驱动,用微软的「显示或隐藏更新」工具把它隐藏。我这里的输出是这样的:
  5. 注意:万一哪天又被装回 1339,症状要等到下一次断电开机才会出现,很容易找错原因。
  6. 临时方案:插一个其他芯片的 USB 蓝牙适配器,并在设备管理器里禁用板载的那个。

参考

0 评论
    留言