使用 TM4C1294KC 和修订版2.1.1.71的 Tiva USB 库的客户
他们 注意到、USB 描述符结构似乎被硬编码为一个3的字符串索引。 这指向硬编码的序列号字符串, 它们不能按单位更改。 因此 ,无法通过 WHQL 序列号测试。
我们是否可以将字符串索引设置为0?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
使用 TM4C1294KC 和修订版2.1.1.71的 Tiva USB 库的客户
他们 注意到、USB 描述符结构似乎被硬编码为一个3的字符串索引。 这指向硬编码的序列号字符串, 它们不能按单位更改。 因此 ,无法通过 WHQL 序列号测试。
我们是否可以将字符串索引设置为0?
您好、Lawrence、
感谢您提供有关 iSerialNumber 的详细信息、这有助于我缩小他们描述的内容。
与他们的想法相反、它与 USB 模式相关、因为它是自己的描述符。 例如、CDC 器件描述符位于 usbdcdcdc.c g_pui8CDCSerDeviceDescriptor 下。 您可以在此处看到产品序列号的硬编码0x03。 HID、MSC、Composite 等都具有相同的0x03设置。 根据我看到的情况、我预计他们在将其更改为0x00时不会遇到任何问题。 但是、对于他们希望在该模式的器件描述符变量中使用的每种模式、他们都需要对其进行更改。
例如、再次使用 g_pui8CDCSerDeviceDescriptor、这就是它在 usbdcdc.c 中的外观:
// // //设备描述符。 它存储在 RAM 中、以便允许 在运行时根据客户端的要求更改多个字段。 //// ***************** uint8_t g_pui8CDCSerDeviceDescriptor[]= { 18、 //此结构的大小。 USB_DTYPE_DEVICE、 //此结构的类型。 USBShort (0x110)、 // USB 版本1.1 (如果我们说2.0、主机 //假设高速-请参阅 USB 2.0规范 // 9.2.6.6) USB_class_CDC、 // USB 器件类(规范5.1.1) 0、 // USB 器件子类(规范5.1.1) USB_CDC_Protocol_none、 // USB 器件协议(规范5.1.1) 64、 //默认管道的最大包大小。 USBShort (0)、 //供应商 ID (在期间填写 // USBDCDCInit)。 USBShort (0)、 //产品 ID (在期间填写) // USBDCDCInit)。 USBShort (0x100)、 //设备版本 BCD。 1、 //制造商字符串标识符。 2、 //产品字符串标识符。 3、 //产品序列号。 1 //配置数量。 };
因此、他们需要更改行:
3、 //产品序列号。
这是 iSerialNumber、可以通过查看 usblib.h 中的设备描述符定义来验证它:
// // //! 此结构描述了 USB //!中定义的 USB 设备描述符 2.0规范第9.1.1节。 //// ***************** typedef 结构 { // //! 该描述符的长度(以字节为单位)。 所有器件描述符都是 //! 18字节长。 // uint8_t bLength; // //! 描述符的类型。 对于器件描述符、这将是 //! USB_DTYPE_DEVICE (1)。 // uint8_t b 描述符类型; // //! BCD 格式的 USB 规范版本号。 对于 USB 2.0、这是 //! 将是0x0200。 // uint16_t bcdusb; // //! 器件类代码。 // uint8_t bDeviceClass; // //! 器件子类代码。 此值限定中的值 //! b DeviceClass 字段。 // uint8_t bDeviceSubClass; // //! 器件协议代码。 该值由的值限定 //! bDeviceClass 和 bDeviceSubClass。 // uint8_t bDeviceProtocol; // //! 端点0的最大数据包大小。 有效值为8、16、32 //! 和64。 // uint8_t bMaxPacketSize0; // //! 由 USB-IF 分配的器件供应商 ID (VID)。 // uint16_t idVendor; // //! 由制造商分配的器件产品 ID (PID)。 // uint16_t idProduct; // //! BCD 格式的器件版本号。 // uint16_t bcdDevice; // //! 描述制造商的字符串描述符的索引。 // uint8_t 制造商; // //! 描述产品的字符串描述符的索引。 // uint8_t iProduct; // //! 描述器件串行的字符串描述符的索引 //! 数字。 // uint8_t iSerialNumber; // //! 器件提供的可能配置的数量。 这种情况 //! 字段表示不同配置描述符的数量 //! 器件提供的功能。 // uint8_t bNumConfigurations; } packed tDeviceDescriptor;
希望这些信息能帮助他们解决问题。