我正在使用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条答案
按热度按时间polhcujo1#
我不知道有任何文档描述了bcdUSB的所有可能值,但必须提到一件事。没有任何东西可以阻止USB设备发送无效的设备描述符内容。虽然,我没有完全测试它的任何东西,它似乎很可能对我来说,一个操作系统是要忽略一个错误的bcdUSB,与设备继续运行的预期。
确保有一些合理的默认值,以防在那里遇到无效值。
为了演示,这就是在设备端定义设备描述符的方式。几乎是“硬编码”。是的,这是一个实际的代码,来自一个实际的库,在一个实际的设备上运行。
qq24tv8q2#
我不知道对有效版本号有什么限制,但像USB FS的1.1或USB HS的2.0(BCD中分别为0x0200和0x0110)这样的数字是我见过的典型值。从这篇文章中可能可以收集到一些其他可能的值:https://www.tomshardware.com/features/usb-decoded-all-the-specs-and-version-numbers