USB的VendorID、ProductID和BcdDevice有什么作用

  • Vendor ID(VID)的商用需要向USB组织申请,开发者可直接使用开发平台的厂商ID。
  • Product ID(PID)由厂商自行管理。VID和PID的作用是让主机快速识别某些著名的设备(Windows可以在完成枚举之前依此直接派发驱动),它们也常常作为搜索从机的条件(如libusb)。
  • BcdDevice:用于标识USB当前产品的固件版本号,在Windows中生成的硬件ID中,不REV,如
     
      
    1. USB\VID_12D1&PID_3A07&REV_0024

一个USB设备的VID和PID在USB设备描述符中指定,通过wIdVendor和wIdProduct指定。

 
  1. #pragma data_alignment=1 //对齐方式为Byte
  2. typedef struct _USB_Desc_Device_t {
  3. uint8_t bLength; // 固定值18B
  4. uint8_t bDescriptorType; // 固定值Device(0x01)
  5. uint16_t wBcdUSB; // USB Spec版本
  6. uint8_t bDeviceClass; // 设备类型
  7. uint8_t bDeviceSubClass; // 设备子类型
  8. uint8_t bDeviceProtocol; // 协议类型
  9. uint8_t bMaxPacketSize0; // EP0的最大包长度
  10. uint16_t wIdVendor; // 厂商ID
  11. uint16_t wIdProduct; // 产品ID
  12. uint16_t wBcdDevice; // 设备软件版本
  13. uint8_t bStringIndexManufacturer; // 厂商名称字符串索引号
  14. uint8_t bStringIndexProduct; // 产品名称字符串索引号
  15. uint8_t bStringIndexSerialNumber; // 序列号索字符串引号
  16. uint8_t bNumConfigurations // 配置数量>=1
  17. }USB_Desc_Device_t;

大部分USB设备都是标准的兼容设备,如UVC摄像头,HID键盘等,都是使用USB设备分类的bDeviceClass、bDeviceSubClass和bDeviceProtocol生成的兼容ID进行驱动匹配的,Windows中提供了大量的兼容驱动。
对于使用自定义分类的bDeviceClass的设备,系统可能会因为无法找到驱动而并成未知设备,这时需要开发相应的USB设备驱动,这时可以使用由VendorID、ProductID和BcdDevice给成的硬件ID来进行匹配。

 
  1. [Standard.NT$ARCH$]
  2. %DeviceDesc%=UsbzhDevice, USB\VID_0A39&PID_0001&REV_0100;
  3. %DeviceDesc%=UsbzhDevice, USB\VID_0A39&PID_0002;
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值