如何确定正在使用哪个 USB 端口?
Posted
技术标签:
【中文标题】如何确定正在使用哪个 USB 端口?【英文标题】:How to determine which USB port is being used? 【发布时间】:2013-08-12 16:33:54 【问题描述】:我的硬件设备连接到 PC 并公开了虚拟串行端口。串行端口号取决于我将设备插入的物理 USB 端口。有没有办法让我的应用程序知道我的设备连接到哪个物理 USB 端口?这真的会帮助我优化代码。目前,我的应用程序通过遍历所有可能的端口来确定每次连接设备时的实际端口号,这是一个漫长的过程。如果我知道它连接了哪个 USB 端口,我就已经知道它暴露了哪个通信端口,我可以为每个特定的物理 USB 端口(配置文件)保存/加载这些设置。我正在使用 C++/MFC 和 Windows 7。我也希望它在 XP 中工作。
【问题讨论】:
您的问题绝对取决于操作系统。据你说,你使用 MFC,我假设你在 Windows 上。但具体是哪个版本? 我使用的是 Windows 7,但如果它不同,我也希望 Win XP 的解决方案。没错,我正在使用 MFC。我已更新问题标签以包含窗口。 另一端有什么“响应”吗?如果是这样,我会尝试机器中可用的每个串行端口(显然假设您的编译器也没有连接到核导弹,如果您尝试在其串行端口上连接它并且失败超过 X 次,核导弹就会飞走)。我用这个技术在一个系统中找到手机来测试手机(因为每次插入不同的手机,它得到一个不同的号码com-port,所以我改为通过它的身份识别手机,并使用了一个将手机 ID 映射到更有用的名称的配置文件) @MatsPetersson 我的情况与您的情况略有不同,我只连接一个专有设备,所以我只需要担心它为不同的 USB 端口创建不同的端口号。如果您在两个不同的端口上连接同一部手机,我认为您不会遇到同样的问题,这有点幸运!目前我的应用程序也在轮询所有端口,但这需要很长时间。 在我的情况下不需要很长时间 - 可以在十分之几秒内完成 100 个端口(我相信这是最大值),这不是问题。所有手机都有唯一 ID (IMEI),所以没问题。 【参考方案1】:USBView 示例源在 WDK 中可用。如果您对此不熟悉,只需运行它 - 该工具会遍历系统上的整个 USB 树,并打印出每个设备的信息和描述符列表,以及主机控制器和集线器上的位置。
从本示例中的 RefreshTree() 函数开始,然后您可以按照代码查看它如何枚举主机控制器、集线器和最终设备。
获取此示例源代码的最简单方法是安装 7.1.0 WDK,目前可在此处获得:http://www.microsoft.com/en-us/download/details.aspx?id=11800
【讨论】:
以上是关于如何确定正在使用哪个 USB 端口?的主要内容,如果未能解决你的问题,请参考以下文章
使用 pyserial 识别给定 USB VID 和 PID 的 USB 到串行端口