DeviceInformation.FindAllAsync(SerialDevice.GetDeviceSelector()) 端口名称为空

DeviceInformation.FindAllAsync(SerialDevice.GetDeviceSelector()) Portname is empty

我正在尝试获取一些连接到 Windows IoT RPi 单元的 USB 转串口适配器的端口名称。我仍然能够打开,并且我得到了一个可用的实例化 serialDevice。我能够在端口上发送和接收数据,但 PortName 对象显示“”,所以我不知道它是 COM1 还是 COM2 等。这不是问题,除非我连接多个适配器并且需要一种方法来识别适配器独一无二。还有其他人看到了吗?

我用来查询和打开端口的代码是:

 Dim dis = Await DeviceInformation.FindAllAsync(SerialDevice.GetDeviceSelector())
 Dim Count As Integer = 0
    Do Until Count = dis.Count
        Debug.WriteLine("UART Port: " & dis(Count).Name & ", " & dis(Count).Id)
        If dis(Count).Id.Contains("FTDI") Or dis(Count).Id.Contains("FT232") Then
            serialPort = Await SerialDevice.FromIdAsync(dis(Count).Id)
        End If
        Count += 1
    Loop

您可以在台式机上获得有效的 SerialDevice.PortName,但不能在 Windows IoT Core 设备上获得。给串口设备分配一个COM号需要系统提供的函数驱动程序,如Serial.sys etc。但是 Windows IoT Core 设备上未提供这些驱动程序。你可以在C:\Windows\System32\drivers路径下查看。

要识别多个设备,有一个解决方法是使用 VID(供应商 ID)和 PID(产品 ID)。它们被认为是独一无二的。

所以您可以使用 SerialDevice.GetDeviceSelectorFromUsbVidPid(vid, pid) 而不是 SerialDevice.GetDeviceSelector()。您可以在 DeviceInformation.Id 中找到 VID 和 PID。它会像这样:

\?\USB#VID_10C4&PID_EA60#0001#{86e0d1e0-8089-11d0-9ce4-08003e301f73}