获取USB串口转换器的信息

4
希望您能帮我解决问题。 我有一个串口设备,此设备将连接到USB串口转换器,然后转换器将连接到我的计算机的USB端口。系统将在设备管理器中添加另一个COM端口。 我的问题是,如何在C#中将COM端口号映射到转换器?我可以通过SerialPort.GetPortNames()枚举系统中可用的COM端口,但不确定此转换器有哪个COM端口号。 谢谢 ar

1
如果连接了两个这样的设备,系统应该如何行为? - Rowland Shaw
1
@Rowland Shaw:USB 设备使用序列号来区分相同的硬件。 - leppie
5个回答

3

通常情况下,您可以通过WMI查询获得一些有用的信息,但需要设备驱动程序的配合。大多数都支持此操作。在Win32_SerialPort类上运行查询。您可以使用WMI Code Creator工具尝试查询并自动生成所需的C#代码。

不要指望能够自动选择设备。您需要一个配置选项来允许用户选择端口。您可以显示从查询中获取的信息以帮助她选择正确的端口。或者请她拔掉设备并重新插入,新增的COM端口应该就是正确的端口。


谢谢,那正是我所做的。一个易于使用的工具。 - user426118

1

我们针对不同的应用程序采用了不同的解决方案。对于我们拥有特定类型设备的唯一实例的情况,我们使用显式配置,但在系统配置之前,无法确定它将被分配到哪个COM端口。在另一种情况下,我们有一根USB电缆,它分成一个带有许多转换器的集线器,因此我们探测了所有我们能够成功打开的COM端口,以寻找我们感兴趣的设备。

关于Windows上的USB /串行转换器有几个注意事项--如果您的设备是像GPS单元这样的设备,每当它通电时都会发送数据,则在启动期间插入设备可能会导致Windows将其检测为旧的串行鼠标。此外,插入不同的USB端口很可能会占用额外的COM端口号(以及破坏您所做的任何显式配置)。


0

你需要在注册表中查找这个。

我只能假设这是一个 FTDI 芯片。如果是这样,你可以通过使用他们的公共 API 获取信息,该 API 已包含在驱动程序中。

如果没有其他答案,我晚些时候回家后会检查,因为我的 JTAG 调试器也有同样的芯片。

更新:

这是我的设备分配的 COM 端口的注册表键(在 PortName 下)

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB\VID_0483&PID_5740\498C54823932\Device Parameters

我想你可以使用usbser驱动程序枚举USB设备。


0

当我遇到同样的问题(RFID读卡器)时,我检查了每个端口是否有数据。可能是在COM4:COM9之间的某个端口。

我知道这不是最好的解决方案,但我在移动设备上使用它,因为我确定我的COM连接...

也许在您的驱动程序的*.ini文件中有一些关于COM号码的信息。


1
Windows会分配一个未使用的COM端口,这与.inf文件无关。 - leppie

0
如果您正在使用基于FTDI的解决方案进行USB<->串行转换,您可以使用FTDI网站提供的FT_PROG实用程序为转换器分配自定义VID:PID对,然后您可以查询以识别哪个适配器分配给哪个虚拟端口。
或者,您可以利用每个芯片独特的FTDIChip-ID,有关此信息(包括代码示例)的详细信息位于此处:http://ftdichip.com/Support/SoftwareExamples/FTDIChip-ID.htm

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