请教多个相同的USB HID设备同时接电脑怎么区分

如题,我连接了两个相同的板子,芯片是CH549,设置成USB HID设备,由于是相同的PID和VID,所以,我的上位机没有办法区分是哪个板,尝试读芯片的序列号,但这个芯片序列号为“00000000”,请问有什么办法吗?

1656772045420.png

看到芯片例程里有设置产品信息的地方,用另一个USB工具则可以通个这个产品信息来找到设备,但不知这个是怎样实现的

1656772101645.png

1656772292303.png


通常厂商具备自己的VID,PID可以自行定义。所以PID、VID当然可以进行修改(不冲突的情况下),用来区分不同设备(不过通常没必要)。

实际上,我们开发USB设备,希望来传输一些自定义数据,为了合理,多半还会加上一些简单的命令,完全可以通过数据通道上传一些特定数据,用来指示“序列号”。





我是想在发命令之前就需要确定是和哪个设备通信的,所以在命令中加上特定数据应该行不通,还有其它的方法吗?谢谢~


参考hidapi库,获取hid_device_info结构体,这部分不难从网络中获取到信息。


我现在用的HID库是可以获取芯片的序列号(STM32的芯片厂家有写唯一的序列号,可以通过这个来区分),但沁恒的芯片获取的序列号是"00000000",应该是出厂时没有写入序列号,想通过自定义的Product Info信息来区分,但是还没有找到可以获取这个信息的库,不知有没有大神用过?


你描述的序列必然不可能凭空产生,是通过数据交互获取,可以对现有产品USB抓包,分析是通过什么传输实现的。

另外的USB API库通常都具备获取USB设备字符串的能力,其中厂商信息、设备序列号信息都是可以直接获取的。

设备描述符中包含以下信息,重点byte14、15、16:

image.png

具体实现可以自行研究字符串描述符的实现。


好的,多谢,我再研究研究


只有登录才能回复,可以选择微信账号登录