您现在的位置是:主页 > USB百科 >

USB设备描述符中的idVendor、idProduct和bcdDevice

发布时间:2022-12-25 16:04:09所属栏目:USB百科 已帮助编辑作者:【USB接口百科】

USB设备描述符总其18字节,其中有三个比较重要的成员,分别为idVendor、idProduct和bcdDevice。
其实从字节意思来看:

idVendor:代表着设备的生产商ID,由USB设备生产商向USB-IF官方来统一管理和申请。idProduct:代表着该生产商生产的产品编号,同一厂商下的不同idProduct代表着该公司不同的产品系列。bcdDevice:是一个BCD编码格式,代表着设备的出产编号,或者同一产品的版本更新迭代。

在设备管理器中还有一个字符串序列iSerialNumber,代表着该产品的出厂序列编号。

从设备描述符字段的idVendor、idProduct和bcdDevice字段解释来看,这三个成员代表着惟一的设备型号,在Windows中,使用idVendor、idProduct和bcdDevice组合成的字符串用来标识该设备,即硬件ID。我们可以通过在Widows设备管理器查看设备的硬件ID来查看设备信息。如本人电脑中的一个USB鼠标,我们在设备管理器中以“按连接列出设备”查看该设备树。
USB鼠标设备树
我们可以通过右键查看设备属性,在详细信息中选择硬件ID来看。
USB鼠标硬件ID

可以看到,该设备的硬件ID(只取第一个)分别为:

USB\VID_093A&PID_2510&REV_0100 HID\VID_093A&PID_2510&REV_0100

前面不USB或者HID代表着设备的类别,再加上后面由VID,PID和REV组成的字符串生成了设备的硬件ID.

这里的REV就是bcdDevice。

在查看REACTOS的usbccgp.sys源代码的时候,我们也可以看到该硬件ID的生成方式。

   Index = swprintf(Buffer, L"USB\\VID_%04X&PID_%04X&REV_%04X",
       FDODeviceExtension->DeviceDescriptor->idProduct,
       FDODeviceExtension->DeviceDescriptor->bcdDevice) + 1;

   Index += swprintf(&Buffer[Index], L"USB\\VID_%04X&PID_%04X",
       FDODeviceExtension->DeviceDescriptor->idProduct) + 1;

由idVendor、idProduct和bcdDevice生成的硬件ID相对来说比较重要,我们在开发USB设备时候,一般就是通过这个硬件ID来进行设备的驱动更新的。设备驱动中支持的硬件ID在INF文件中指定,如:

[Strings]
DeviceID   = "VID_1908&PID_2070"


[libusbDevice_WinUSB.NTx86]
%DeviceName% = USB_Install, USB\%DeviceID%

[libusbDevice_WinUSB.NTamd64]
%DeviceName% = USB_Install, USB\%DeviceID%

[libusbDevice_WinUSB.NTarm]
%DeviceName% = USB_Install, USB\%DeviceID%

可根据需要,自行加入是否需要版本信息。

在windows体统的注册表中,系统中所有枚举出的USB设备可通过注册表路径:

计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB

来查看。
USB鼠标注册表信息

当然,如果我们是USB设备的固件开发商,可以直接通过修改设备描述符数组中相应的字段即可。

相关文章:

USBCCGP 复合USB设备的枚举 http://www.usbzh.com/article/detail-578.html

     以上就是USB接口百科为您提供USB设备描述符中的idVendor、idProduct和bcdDevice的解读,本文章链接: http://www.usb-hub.cn/usbbk/42088.html 欢迎分享转载,更多婚礼相关资讯请前往USB百科