[AT32F415] 如果有两个相同代码的usb设备连上电脑,主机如何区分?

[复制链接]
2204|7
 楼主| lvben5d 发表于 2022-8-9 10:42 | 显示全部楼层 |阅读模式
本帖最后由 lvben5d 于 2022-8-22 13:41 编辑

相同设备的VID PID一般都只能烧录一份,因为上位机去比对不同pid 会很麻烦~  好想我的产品 序列号 没有调试出来,上位机不知道哪里去获取libusb 是 libusb_open_device_with_vid_pid(ctx, USB_VENDOR_ID, product_id);     VID咱一般不可能去改,那会变动的 就应该是 pid了。

7320162f1cc045e438.png           这个是WINDOSW抓捕 USB热插入的获得usb 设备的dbcc_name字符串 前面主要部分~
我用的libusb 如果pid相同,只能开第1个设备。
查注册表速度慢,5楼通过libusb_get_device_list(nullptr, &list); 的方式 获取设备描述符 更快方便。WIN10已经验证OK。
WINDOWS不能通过libusb注册热插拔事件是个比较头痛的事情,插入新的设备,重新扫描list, 你要判断相同vid pid的 device_address是否已经存在,如果已经存在,说明那是个已经插入的同类usb设备。 热拔的时候,libusb 接收事件首先提供LIBUSB_TRANSFER_STALL,然后才进入::nativeEvent(......)
knk 发表于 2022-8-13 12:19 | 显示全部楼层
可以让每个USB设备都用不同的SN,根据SN再去识别。
 楼主| lvben5d 发表于 2022-8-13 12:53 | 显示全部楼层
knk 发表于 2022-8-13 12:19
可以让每个USB设备都用不同的SN,根据SN再去识别。

我目前是根据PID区分~ 可以实现了。 如果用SN区分,是不是 VID PID都一样先 再通过设备描述符去访问

评论

knk
电脑插两个相同的USB外设,我说的相同是指固件一样,两个设备的PID、VID和PVN完全一样,这时候只能通过SN来识别了。  发表于 2022-8-14 13:10
 楼主| lvben5d 发表于 2022-8-14 13:33 | 显示全部楼层
本帖最后由 lvben5d 于 2022-8-17 10:10 编辑

我发现了一个问题,WINDOWS注册表里 USB设备文件夹 是 VIDPID以及版本 VVVVPPPPRRRR  这个是一样的,而且libusbOPEN usb函数 只是输入VID PID,如果第2个设备跟第一个相同,libusb只能开第一个(官网明确说了) 看来,如果使用我这个上位机方式,我就改PID了。
humaoxiao3 发表于 2022-8-17 13:57 | 显示全部楼层
不需要修改 多个相同pid vid设备插到电脑上应该通过这两个接口区别
libusb_get_bus_number
libusb_get_device_address
也就是说他们的bus_number和device_address是不同的,可以区分出来
然后使用libusb_open接口打开设备
而不是libusb_open_device_with_vid_pid
后面这个函数只能打开第一个符合pid vid条件的设备
humaoxiao3 发表于 2022-8-17 13:58 | 显示全部楼层
也不需要操作什么注册表,libusb库内部作者早就把这些问题考虑到了,所有的设备操作都可以在libusb库内部解决
 楼主| lvben5d 发表于 2022-8-19 07:53 | 显示全部楼层
本帖最后由 lvben5d 于 2022-8-23 16:48 编辑

设备热插入 和 拔出, windows下,Libusb热插拔函数就不能正常使用,官网1.0.9后号称支持热插拔事件,我只能推测是linux下支持了(windows下 我试过注册函数返回不了 0==SUCCESS) 最后用了网上大家推荐windows的消息函数 nativeEvent(虽然它会监听到所有USB设备热插拔)  。 要是windows 下有其他libusb库函数应用(热插拔)的方式,楼上可以说说。 目前 我只能靠windows的消息函数 nativeEvent  来做windows下热插拔监控了。 拔的时候,还可以监听出接收 STALL 事件,但是插入的时候 就。。。因为没插入就没usb句柄啊,无法进行库函数调用。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

95

主题

746

帖子

12

粉丝
快速回复 在线客服 返回列表 返回顶部