3

我们在 C++ 代码中使用libusb v1.0.9.0(带有 Java 前端)。我们正在多个版本的 Windows 和用于各种 USB 2.0/3.0 控制器的多台机器上对其进行测试,我们发现了一些非常糟糕的问题。

在 Windows 7 上,它看不到“英特尔 USB 3.0 可扩展主机控制器”平台上的任何端口。

在 Windows Server 2008 上,它看不到 USB 2.0 和 3.0 控制器上的某些端口。2.0 集线器上的一些端口工作,3.0 集线器上的一些端口工作,但其他端口对同一设备、任何设备都是不可见的。

第一个可能只是一个特定的控制器特性,很快就会得到支持,但第二个确实让我们担心。这种行为普遍吗?我们如何解决它?

我们正在使用libusb_get_device_list()or libusb_open_device_with_vid_pid()

4

1 回答 1

1

我在某些 USB 3.0 端口上也遇到了一些麻烦,尽管它可能与您的情况有些不同。所以我不太确定我是否可以帮助你,我相信这与硬件问题更相关。但请记住以下事实:

USB 3.0 硬件还没有很好地建立(仍在开发中) - 随着时间的推移,一些端口正在失去它们的功能,尤其是这些相当便宜的端口(带有英特尔芯片组的主板上的内置端口)。因为通过USB 3.0提供的电流,并且数据速率远高于USB 2.0,所以这些由廉价线材制成的端口容易断线并不是什么奇迹。

即使使用不同的电缆也会有所不同,更不用说集线器了——它们似乎仍然是原型,至少我使用的那些。

定期查找xHCI的最新驱动程序。内部经常会修复令人讨厌的错误。

最后但同样重要的是,改变发送到 xHCI 的数据包大小。实际上,首选大小是 64 KB,因此将数据分成这个大小的块。这与大数据包引起的中断问题有关。对于某些 xHCI 来说,这已经是放弃的理由(尤其是如果您在 USB 2.0 下运行!)。

总而言之,不同 xHCI(瑞萨、英特尔、..)的行为差异很大。这很烦人,因为原因根本不明显。

最后一个建议:尝试使用USBlyzer之类的工具。如果您愿意花费大约 30,000 美元左右,最后一个选项是Voyager M3i (协议分析仪)。

于 2013-06-12T14:52:37.750 回答