【问题标题】:How to add a string descriptor如何添加字符串描述符
【发布时间】:2020-02-06 06:04:26
【问题描述】:

我想在我的 HID 项目中添加一个字符串(以存储有关固件版本的信息)。我读过关于字符串描述符https://www.beyondlogic.org/usbnutshell/usb5.shtml 的内容,我的理解是配置描述符或报告描述符列出了一个指向字符串的索引。该字符串存储在其他地方。然后主机可以通过“get”string“Descriptor”请求按索引请求字符串。

不过,我对它的实现感到非常困惑。我一直在浏览 STM32F04 示例库(可从 STM 下载或在此处复制 https://github.com/caozoux/arm/blob/master/stm32/STM32F0x2_USB-FS-Device_Lib%20V1.0.0/Libraries/STM32_USB_Device_Library/Class/dfu/src/usbd_dfu_core.c)并发现:

    /* USB DFU device Configuration Descriptor */
    const uint8_t usbd_dfu_CfgDesc[USB_DFU_CONFIG_DESC_SIZ] =
    {
      0x09, /* bLength: Configuration Descriptor size */
      USB_CONFIGURATION_DESCRIPTOR_TYPE, /* bDescriptorType: Configuration */
      USB_DFU_CONFIG_DESC_SIZ,
      /* wTotalLength: Bytes returned */
      0x00,
      0x01,         /*bNumInterfaces: 1 interface*/
      0x01,         /*bConfigurationValue: Configuration value*/
      0x02,         /*iConfiguration: Index of string descriptor describing the configuration*/
      0xC0,         /*bmAttributes: bus powered and Supports Remote Wakeup */
      0x32,         /*MaxPower 100 mA: this current is used for detecting Vbus*/
      /* 09 */

它在 0x02 处给出 iConfiguration 的索引。然后我搜索了另一个对 0x02 或配置字符串的引用的所有文件,但一无所获。我希望找到某种可以通过 0x02 索引或至少一个配置字符串索引的字符串数组。可能示例文件不完整,但我感觉我只是没有在寻找正确的东西。

我的问题是,首先是我对字符串描述符如何正确工作的基本假设?如果是这样,通常如何以及在哪里存储字符串?任何指向示例实现的链接也会非常有帮助!

【问题讨论】:

  • 既然您基本上是在寻求帮助以在其他人编写的程序中查找一段代码,您能否提供您正在查看的代码的链接?
  • 当然,很抱歉之前忽略了这一点。这个 repo 复制了我正在使用的所有示例代码,代码 sn-p 专门来自这个文件 github.com/caozoux/arm/blob/master/stm32/…

标签: usb stm32 hid stm32f0


【解决方案1】:

在简要查看您的代码后,看起来代码将字符串描述符返回到 USB 主机以响应“获取描述符”请求:

https://github.com/caozoux/arm/blob/e19fc5a/stm32/STM32F0x2_USB-FS-Device_Lib%20V1.0.0/Libraries/STM32_USB_Device_Library/Core/src/usbd_req.c#L313

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多