libusb设备描述符:bcdUSB可能的取值

5

我正在使用libusb-1.0开发C应用程序,想要获取与USB设备相关的一些配置参数。我的问题与bcdUSB参数有关。我的代码如下:

libusb_device *dev;
struct libusb_device_descriptor desc;

....

ret = libusb_get_device_descriptor(dev, &desc);

if (ret<0) {
    fprintf(stderr, "error in getting device descriptor\n");
    return 1;
}

printf("bcdUSB: %04x\n", desc.bcdUSB);

有些设备我得到了0401的值:
bcdUSB: 0401

我不明白这个值的确切含义。

在libusb代码中,我发现在libusb_device_descriptor结构体代码中有这样一个注释:

/** USB specification release number in binary-coded decimal. A value of
 * 0x0200 indicates USB 2.0, 0x0110 indicates USB 1.1, etc. */
uint16_t bcdUSB;

它只指定了0200和0110值的含义。是否有关于所有可能的bcdUSB值(包括0401)的文档?

2个回答

2
我不知道是否有关于描述bcdUSB所有可能值的文档,但必须提一件事情。没有任何防止USB设备发送无效设备描述符内容的措施。虽然我没有在任何设备上进行过测试,但我觉得操作系统很可能会忽略错误的bcdUSB,并使设备继续按预期运行。
确保设置一些合理的默认值,以防遇到无效值。
仅为演示,以下是设备端如何定义设备描述符。基本上是"硬编码"的。是的,这是一个实际代码,来自实际库,在实际设备上运行。
/*-----------------------------------------------------------------------------+
| Device Descriptor 
|-----------------------------------------------------------------------------*/
uint8_t const abromDeviceDescriptor[SIZEOF_DEVICE_DESCRIPTOR] = {
    SIZEOF_DEVICE_DESCRIPTOR,               // Length of this descriptor
    DESC_TYPE_DEVICE,                       // Type code of this descriptor
    0x00, 0x02,                             // Release of USB spec
    0x02,                                   // Device's base class code
    0x00,                                   // Device's sub class code
    0x00,                                   // Device's protocol type code
    EP0_PACKET_SIZE,                        // End point 0's packet size
    USB_VID&0xFF, USB_VID>>8,               // Vendor ID for device, TI=0x0451
                                            // You can order your own VID at www.usb.org"
    USB_PID&0xFF, USB_PID>>8,               // Product ID for device,
                                            // this ID is to only with this example
    VER_FW_L, VER_FW_H,                     // Revision level of device
    1,                                      // Index of manufacturer name string desc
    2,                                      // Index of product name string desc
    USB_STR_INDEX_SERNUM,                   // Index of serial number string desc
    1                                       //  Number of configurations supported
};

1

жҲ‘дёҚзҹҘйҒ“е…ідәҺжңүж•ҲйҮҠж”ҫеҸ·з ҒжҳҜеҗҰжңүд»»дҪ•йҷҗеҲ¶пјҢдҪҶеғҸUSB FSзҡ„1.1жҲ–USB HSзҡ„2.0пјҲеҲҶеҲ«еңЁBCDдёӯдёә0x0200е’Ң0x0110пјүжҳҜжҲ‘и§ҒиҝҮзҡ„е…ёеһӢеҖјгҖӮдёҖдәӣе…¶д»–еҸҜиғҪзҡ„еҖјеҸҜиғҪеҸҜд»Ҙд»ҺиҝҷзҜҮж–Үз« дёӯиҺ·еҫ—:

https://www.tomshardware.com/features/usb-decoded-all-the-specs-and-version-numbers

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接