Skip to main content
欢迎来到PAWPAW技术文档网站了解更多信息

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设备缓存:

  1. 使用DevManView工具清除USB设备缓存:

    • 下载并运行DevManView工具。这是一个由NirSoft提供的小型工具,可以让您查看所有设备并卸载不再需要的设备驱动。
    • 在DevManView中找到对应的USB音频设备,执行卸载操作。
    • DevManView工具的下载链接:NirSoft DevManView
  2. 使用设备管理器刷新设备:

    • 打开Windows的设备管理器。
    • 选择“操作”菜单中的“扫描检测硬件改动”选项,或者点击工具栏的“扫描更改”图标。
    • 这将强制Windows重新加载USB设备的描述符信息。

步骤详解

以下是使用DevManView工具和设备管理器刷新USB设备描述符的详细步骤:

1. 使用DevManView工具

image-20240111160702295

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

2. 使用设备管理器

image-20240111160804884

  1. 按下 Windows 键 + X ,然后选择“设备管理器”。
  2. 在设备管理器窗口中,点击菜单栏的“操作”>“扫描检测硬件改动”。
  3. 等待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