如何确定USB端口的速度?

4

有没有一种简单的方法来编程确定USB端口的速度(或版本)?我想根据其最大带宽控制发送到USB端口的数据速度。


你为什么想要这样做? - Brian
正如问题所述,我需要知道最大数据传输速率。 - SwDevMan81
1
仅为澄清:问题是“我们有一个可以写入X MB/s的设备,但我们不确定端口是否支持该速率”,但我认为可能设备的速度是限制因素。你是对的SwDevMan81!;) - Isaac
2个回答

5
如果您需要 Windows 的解决方案,这应该是一个不错的起点:

http://msdn.microsoft.com/en-us/library/ms793313.aspx

基本上你应该尝试这样做:
1. 列举USB设备及其驱动程序的符号名称。 2. 通过CreateFile打开USB设备驱动程序的符号名称来获得驱动程序句柄。 3. 对驱动程序句柄执行DeviceIoControl,使用控制代码IOCTL_USB_GET_NODE_CONNECTION_INFORMATION_EX。这将返回结构体USB_NODE_CONNECTION_INFORMATION_EX。其中有一个成员名为Speed,类型为USB_DEVICE_SPEED。 4. (关闭驱动程序句柄)。
这也可能对你有趣:CodeProject: Enumerate Properties of an Installed Device

感谢您在此处提供的额外细节,Robert。 - SwDevMan81

0
回答你的问题,我相信有获取所需信息的方法。我不知道Windows的答案,但Linux有您可以在sysfs目录结构中读取的文件。
速度控制通常由驱动程序和控制总线的硬件处理。大多数现代USB控制器每个端口实际上都有两个控制器连接。一个用于较慢的速度12Mbps USB 1.0,另一个用于更高的速度480Mbps USB 2.0。内部有一个神奇的开关将其正确连接。驱动程序本身确保一切都被正确枚举、控制流程等。更高级别的“用户空间”应用程序通常不需要担心这些事情。
此外,如果您有一个能够以超过12Mbps的速度运行的设备,并将其插入12Mbps的端口,则无论您是否喜欢它,它都会被拉到12Mbps。您想知道它是否被拉下来了吗?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接