我们在C ++代码中使用libusb v1.0.9.0(带有Java前端)。我们在多个版本的Windows和多台USB 2.0 / 3.0控制器上测试它,我们发现了一些非常糟糕的问题。
在Windows 7上,它无法在“Intel USB 3.0 Extensible Host Controller”平台上看到任何端口。
在Windows Server 2008上,它无法在USB 2.0和3.0控制器上看到某些端口。 2.0集线器上的某些端口可以正常工作,而3.0集线器上的某些端口可以工作,但其他端口对同一设备和任何设备都是不可见的。
第一个可能只是一个特定的控制器特性,很快就会得到支持,但第二个真的让我们担心。这种行为常见吗?我们该如何解决?
我们正在使用libusb_get_device_list()
或libusb_open_device_with_vid_pid()
。
答案 0 :(得分:1)
我在某些USB 3.0端口上遇到了一些麻烦,即使它可能与你的情况有点不同。所以我不太确定我是否可以帮助你,我相信它与硬件问题更相关。但请记住以下事实:
USB 3.0硬件尚未建立(仍处于开发阶段) - 一些端口正在逐渐失去其功能,尤其是这些非常便宜的(带有Intel芯片组的主板上的内置端口)。由于通过USB 3.0提供的电流和数据速率远高于USB 2.0,因此这些由廉价电线制成的端口容易破裂并不奇怪。
即使使用不同的电缆也会产生影响,而不是说集线器 - 它们似乎仍然是原型,至少是我使用的原型。
定期查看xHCI的最新驱动程序。内部经常会出现令人讨厌的错误。
最后但并非最不重要的是,改变发送到xHCI的数据包的大小。实际上,首选大小为64 KB,因此将数据拆分为此大小的块。这与由大数据包引起的中断问题有关。对于某些xHCI而言,这已经是投降的原因(特别是如果你在USB 2.0下运行!)。
总而言之,不同xHCI(Renesas,Intel,..)的行为差异很大。这很烦人,因为原因并不明显。
最后一个建议:尝试USBlyzer之类的工具。最后一个选项可能是Voyager M3i(协议分析器),如果你愿意花费大约30,000美元左右。