在Windows上,libusb看不到某些端口。

On Windows, libusb can't see some ports

本文关键字:看不到 Windows libusb      更新时间:2023-10-16

我们在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()libusb_open_device_with_vid_pid()

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

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

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

请定期查找xHCI的最新驱动程序。

最后,但并非最不重要的是,改变发送到xHCI的数据包的大小。实际上,首选的大小是64kb,因此将数据分割成这样大小的块。这与由大数据包引起的中断问题有关。对于一些xhci来说,这已经是放弃的理由了(特别是如果你在usb2.0下运行!)。

总而言之,不同xhci(瑞萨,英特尔,…)的行为差异很大。最恼人的是原因根本不明显。

最后一个建议:试试USBlyzer之类的工具。最后一个选择是类似旅行者M3i(协议分析器)的东西,如果你愿意花大约3万美元的话。