如果标题是 XY 问题的形式,请原谅我,但是:
我有一个 Windows 系统,上面挂着很多 USB 设备。(我是一个有很多客户端的嵌入式开发人员,并且经常需要在一堆嵌入式设备上运行纵向测试。)我观察到以下现象:
我的默认 USB 设备集如下所示:
但是在这种情况下,我的 OSBOT TinyCam 设备不可用。(“看起来另一个应用程序已经在使用相机。Windows 相机应用程序错误代码 0xA00F4243”)
如果我弹出(或只是拔掉)任何四个 EDBG CMSIS-DAP 设备和/或 Atmel-ICE CMSIS-DAP 设备,TinyCam 运行正常。
这让我想到了以下问题:
- 系统可以在 USB 总线上管理的设备数量是否有限制?
- 我可以收集更多信息来更好地诊断问题吗?
另外,我认为这不是 OSBOT TinyCam 特有的。例如,如果我拔掉所有 CMSIS-DAP USB 设备并插入 OSBOT TinyCam 并启动相机应用程序,相机工作正常。但是,如果我在插入 TinyCam 后插入所有 CMSIS-DAP 设备,我的 Microchip IDE 将无法再访问所有 CMSIS-DAP 设备:
所以在这种情况下,看起来“谁先到”才是有效的,而其他人则被排除在外。
可能是您遇到了 USB 根主机控制器在端点方面的限制。这是与您的操作系统无关的硬件限制。
每个 USB 设备最多可以定义 32 个端点(16 个输入和 16 个输出,但必须是一个控制端点),但大多数设备只定义 2 或 3 个端点(例如数据输入、数据输出和一个控制端点)。集线器本身也至少定义了一个控制端点。每个 USB 控制器实现都可能有自己的层或端点限制。
在您的情况下,您的某些设备可能需要比其他设备更多的端点。您的 USB 根主机控制器也可能对它可以支持的端点数量有自己的限制。
要增加计算机支持的端点数量,您需要更多根 USB 主机控制器。链接 USB 集线器不会添加更多端点,而是减少数量,因为集线器本身会用完根控制器的端点。
尽管 USB 规范允许在一个根控制器上安装大量理论上的设备,但 USB 控制器实现中固有的实际限制进一步将可能的最大值限制在低得多的数量。
用于检查 USB 设备上的端点数量(以及其他所有内容)的工具是开源 USB 设备树查看器。它可以显示设备使用的端点,但不显示根控制器的限制。
例如,这里显示了连接的 USB 磁盘的 3 个端点:
关于该主题的一些来源:
解决方案:分支宽,不深
@harrymc 正确回答了这个问题:USB 拓扑“太深”,限制了端点的数量。
以前,我有四个 7 端口 USB 扩展器,“A”和“C”直接连接到 PC,“B”和“D”从“A”和“C”菊花链连接。
我重新配置了我的设置,因此“A”、“B”、“C”和“D”都直接连接到 PC。
这将我的 USB 设备树的深度降低了一个级别,我现在可以同时支持我需要的所有设备。