如何让我的UWP应用程序区分两个相同的USB设备?

如何让我的UWP应用程序区分两个相同的USB设备?,uwp,usb,Uwp,Usb,我正在编写一个UWP应用程序,它与两个微控制器(Teensy 3.2和3.6)接口,每个微控制器都被编程来做不同的事情。当编程为串行设备时,uC的VID和PID始终分别为0x16C0和0x0483 在IDE中,我可以将其类型更改为以下任意类型: 当它们都被编程为串行设备时,它们会显示在UWP串行示例应用程序中,如下所示: 你可能会认为这会让我在PID之后根据一切来区分两者,然而,它们似乎每隔一次我启动应用程序时就会切换位置。这令人沮丧。此外,当我连接到其中任何一个时,大括号中的部分始终相同:

我正在编写一个UWP应用程序,它与两个微控制器(Teensy 3.2和3.6)接口,每个微控制器都被编程来做不同的事情。当编程为串行设备时,uC的VID和PID始终分别为0x16C0和0x0483

在IDE中,我可以将其类型更改为以下任意类型:

当它们都被编程为串行设备时,它们会显示在UWP串行示例应用程序中,如下所示:

你可能会认为这会让我在PID之后根据一切来区分两者,然而,它们似乎每隔一次我启动应用程序时就会切换位置。这令人沮丧。此外,当我连接到其中任何一个时,大括号中的部分始终相同:

我尝试过将类型更改为各种类型,我基本上能够与这两个设备进行对话,但它们在设备管理器中显示为我制作的任何设备,我担心这可能会导致与系统的其他部分发生冲突。例如,将其设置为“上述所有”设备可以让我的计算机将其视为音频,这导致Hulu在试图向微控制器发送数字音频时崩溃。如果可能的话,我想把它们都作为串行设备


是否有其他标识属性可用于硬编码我的应用程序以识别我的设备?我将在专用计算机上运行此应用程序。

PID后面的部分是设备的序列号。由于您有一个没有内置序列号的自制板,Windows无法区分两个设备并分配自动生成的序列号

序列号存储在struct
usb\u string\u serial\u number
中,该结构定义为弱结构,可由用户代码覆盖。因此,通过将以下代码添加到草图或单独的*.cpp文件中,您可以轻松地提供自己的序列号

extern“C”
{
结构usb\u字符串\u描述符\u结构
{
uint8_t bLength;
uint8_t bDescriptorType;
uint16_t wString[10];
};
usb字符串描述符结构usb字符串序列号=
{
22,
3.
{M'、'Y'、'S'、'N'、'0'、'0'、'0'、'1',0},
};
}
无效设置()
{
引脚模式(LED内置,输出);
}
void循环()
{
digitalWriteFast(LED内置,!digitalReadFast(LED内置));
延迟(200);
}
上载Windows后,将报告以下设备ID:

请注意:
引导加载程序仍然报告“旧”序列号,这会混淆一些上载程序(例如tyTools)。stock Teensy上载程序(Teensy.exe)可以毫无问题地处理此问题

GUID\u deviceinterface\u COMPORT
始终与
86e0d1e0-8089-11d0-9ce4-08003e301f73
相同,根据设计,您可以将此文档用于。不同的部分在GUID\u deviceinterface\u COMPORT前面。@NicoZhu MSFT我知道
86e0d1e0-8089-11d0-9ce4-08003e301f73
前面的不同部分,但每次启动应用程序、重新启动计算机时,它都会在两个设备之间切换,或者重新连接设备。你的意思是设备id与物理设备不匹配吗?@NicoZhu MSFT否,我的意思是所有连接的设备的AQ都是相同的。请解释第一个屏幕截图,以及如何使用IDE更改类型?工作非常顺利,谢谢!即使是小论坛上的人也无法如此优雅地解决这个问题。