- Vendor ID(VID)的商用需要向USB组织申请,开发者可直接使用开发平台的厂商ID。
- Product ID(PID)由厂商自行管理。VID和PID的作用是让主机快速识别某些著名的设备(Windows可以在完成枚举之前依此直接派发驱动),它们也常常作为搜索从机的条件(如libusb)。
- BcdDevice:用于标识USB当前产品的固件版本号,在Windows中生成的硬件ID中,不REV,如
USB\VID_12D1&PID_3A07&REV_0024
一个USB设备的VID和PID在USB设备描述符中指定,通过wIdVendor和wIdProduct指定。
#pragma data_alignment=1 //对齐方式为Byte
typedef struct _USB_Desc_Device_t {
uint8_t bLength; // 固定值18B
uint8_t bDescriptorType; // 固定值Device(0x01)
uint16_t wBcdUSB; // USB Spec版本
uint8_t bDeviceClass; // 设备类型
uint8_t bDeviceSubClass; // 设备子类型
uint8_t bDeviceProtocol; // 协议类型
uint8_t bMaxPacketSize0; // EP0的最大包长度
uint16_t wIdVendor; // 厂商ID
uint16_t wIdProduct; // 产品ID
uint16_t wBcdDevice; // 设备软件版本
uint8_t bStringIndexManufacturer; // 厂商名称字符串索引号
uint8_t bStringIndexProduct; // 产品名称字符串索引号
uint8_t bStringIndexSerialNumber; // 序列号索字符串引号
uint8_t bNumConfigurations // 配置数量>=1
}USB_Desc_Device_t;
大部分USB设备都是标准的兼容设备,如UVC摄像头,HID键盘等,都是使用USB设备分类的bDeviceClass、bDeviceSubClass和bDeviceProtocol生成的兼容ID进行驱动匹配的,Windows中提供了大量的兼容驱动。
对于使用自定义分类的bDeviceClass的设备,系统可能会因为无法找到驱动而并成未知设备,这时需要开发相应的USB设备驱动,这时可以使用由VendorID、ProductID和BcdDevice给成的硬件ID来进行匹配。
[Standard.NT$ARCH$]
%DeviceDesc%=UsbzhDevice, USB\VID_0A39&PID_0001&REV_0100;
%DeviceDesc%=UsbzhDevice, USB\VID_0A39&PID_0002;