Windows debugging
修改XMOS音频固件后,Windows系统无法正确识别设备
在USB音频设备开发过程中,修改XMOS音频固件中的描述符(如音频采样率、通道数、UAC类型等)后,可能会遇到Windows系统驱动不正确识别设备,导致音频录制和播放功能异常,无法正常使用设备的问题。
具体表现
- 设备管理器中的音频设备名称显示异常。
- 音频播放软件无法识别或使用USB音频设备。
- 录音软件显示设备,但无法录制音频,或录制的音频质量不正常。
问题分析
这个问题的根本原因在于Windows操作系统对USB设备的描述符信息有缓存机制。当设备的产品ID(PID)和供应商ID(VID)没有变化时,Windows不会主动请求新的描述符信息。因此,即使开发者更改了USB设备的关键描述符,Windows仍然使用旧的缓存信息,导致音频设备无法正常工作。
Windows USB设备缓存机制
- Windows通过匹配USB设备的PID和VID来识别设备。
- 如果PID和VID未改变,Windows将使用缓存的描述符信息。
- 这可能会导致设备的实际功能与系统中的信息不同步。
解决思路:
要解决Windows系统中USB音频设备描述符缓存问题,您可以使用两种方式:
- 每次更新固件后,清除USB设备缓存。
- 对于不同的固件,使用不同的PID和VID。
在编译时使用不同的PID和VID,可以确保Windows系统在识别设备时,不会使用缓存的描述符信息。仅仅修改PID在多数情况下也可以解决问题。
您可以通过以下步骤清除Windows的USB设备缓存:
-
使用DevManView工具清除USB设备缓存:
- 下载并运行DevManView工具。这是一个由NirSoft提供的小型 工具,可以让您查看所有设备并卸载不再需要的设备驱动。
- 在DevManView中找到对应的USB音频设备,执行卸载操作。
- DevManView工具的下载链接:NirSoft DevManView。
-
使用设备管理器刷新设备:
- 打开Windows的设备管理器。
- 选择“操作”菜单中的“扫描检测硬件改动”选项,或者点击工具栏的“扫描更改”图标。
- 这将强制Windows重新加载USB设备的描述符信息。
步骤详解
以下是使用DevManView工具和设备管理器刷新USB设备描述符的详细步骤:
1. 使用DevManView工具

- 访问NirSoft官方网站或直接通过上面提供的链接下载DevManView工具。
- 解压并运行DevManView.exe文件。
- 在列表中找到您的USB音频设备,右键单击并选择“卸载选定的设备”。
- 确认卸载操作。
2. 使用设备管理器

- 按下
Windows键 +X,然后选择“设备管理器”。 - 在设备管理器窗口中,点击菜单栏的“操作”>“扫描检测硬件改动”。
- 等待Windows自动扫描并更新设备列表。
其他注意事项:
在完成上述步骤后,为确保最佳兼容性和性能,建议您按照以下步骤操作:
- 重新启动任何音频播放或录制软件,以确保软件能够识别最新的设备状态。
- 重新启动计算机。
通过以上步骤,您应该能够解决USB音频设备在Windows系统中的识别问题。
Windows 10/11 UAC2.0 驱动相关问题
如果您在寻找稳定的windows驱动,可以参考UAC驱动 for Windows章节的说明,本节仅针对Windows 10/11 默认的UAC2.0驱动的问题进行说明。
驱动描述
Windows 10 build 1703 及更高版本(包括 Windows 11)附带 USB 音频 2.0 驱动程序。该驱动程序支持消费类音 频应用程序并支持 Windows 声音 API,例如 WASAPI、DirectSound 和 MME。
Windows 10/11 默认的UAC2.0驱动由Thesycon公司开发,该驱动具备以下基本功能与特性:
优点:
- ✅支持UAC2.0协议
- ✅支持最多8通道输出,8通道输入
- ✅设备为2通道输出,2通道输入时,采样率最高支持384kHz,可以变更
- ✅支持WASAPI、DirectSound 和 MME等 Windows 声音 API
缺点:
- ❌超过2通道时,采样率固定为44.1kHz,无法变更
- ❌不支持ASIO,DSD,Dop等功能
- ❌不含DFU工具,需要自行提供解决方案
- ❌不含时钟源选择功能,例如SPDIF输入时,无法选择外部时钟源
常见问题
-
需要显式描述反馈端点以支持 Windows play loopback
在代码中定义:
#define UAC_FORCE_FEEDBACK_EP