【问题标题】:Where to find information on custom USB descriptor types在哪里可以找到有关自定义 USB 描述符类型的信息
【发布时间】:2013-10-19 08:57:47
【问题描述】:

从 USB 设备读取配置数据(使用 0x200 wValue 的 GET_DESCRIPTOR 操作)我得到一个描述符类型为 0x22 的描述符块。我不太清楚它是什么。

描述符块(紧跟接口描述符):14,22,00,01,13,81,1d,00,17,01,02,08,13,01,0c,00,0c,01,02,08

那么,谁能告诉我它是什么,但更重要的是,我通常应该去哪里查找自定义类型描述符的信息,我是否会遇到其他一些描述符类型?

【问题讨论】:

  • 问题是真的,信息不是很清楚。
  • 之前对这个问题投反对票的人要么不了解 USB,要么正在做滋扰。

标签: usb


【解决方案1】:

我希望我已经准确记录了我是如何偶然发现这个解释的搜索路径,因为我花了很长时间,@KuldeepSinghDhaka 帮助我重新追踪了我的步骤。它在 USB 规范方面有点偷偷摸摸,因为它有点不明显。

我使用USB 2.0 Spec作为参考,后面版本中的节号可能不匹配。

来自USB 2.0 Spec,第 9.4.3 节 wValue 为 0x200 表示请求为标准(或第一个,低字节 0),配置描述符(高字节 0x2)

来自USB 2.0 Spec,第 9.5 节

如果类或供应商特定的描述符独立于 配置信息或使用非标准格式, GetDescriptor() 请求指定特定的类或供应商 描述符类型和索引可用于从 装置。类或供应商规范将定义 检索这些描述符的适当方法。

来自USB Common Class Specification says,第 3.11 节:

bDescriptorType 字段的最高有效位保留供将来使用。 ... bDescriptorType 字段的下两个最高有效位用于指示标准、类或 供应商特定的描述符。这些位使用与 a 的 bmRequestType.Type 字段相同的编码 USB 设备请求设置数据包。因为 bDescriptorType 字段的高三位用作 如上所述,可以为任何类别定义的唯一描述符的最大数量 (标准、类或设备特定)为 32

这是我对上述内容的解释,并将其应用于我所看到的(一些 M$)设备。

描述符类型有一个定义的结构:

  • 位 7:保留 0
  • 位 6..5:
    • 0:标准
    • 1:类
    • 2:供应商
    • 3:保留
  • 位 4..0:描述符 ID

所以,描述符类型 0x22 表示:类特定描述符 ID 2。

因此,一旦您看到非标准描述符类型,请检查它是否基于供应商,然后您需要查找供应商文档。如果它是基于类的,则检查 interface(*) 描述符的类。如果接口描述符使用标准类(例如 HID),则查找相应的标准文档。如果接口描述符使用供应商类,那么同样需要供应商文档来了解描述符内容是什么。

(*) 描述符可能适用于设备或接口。我的理解是,如果描述符类型是基于类的,则它适用于设备或接口的类,具体取决于其位置。

【讨论】:

  • 能否请您引用信息来源(尤其是描述符类型的位布局)。
  • 我很想阅读原始规格。请在答案中提及文档的链接和相关部分。
  • 如果文件和规格是真的,我会感到惊讶。我从来没有读过任何描述描述符类型的位布局的文档。我在等……:)(我也很怀疑……)
  • 终于看起来我明白了。 usbccs10.pdf《通用串行总线通用类规范》《3.11 识别类和供应商特定的请求和描述符》
  • @KuldeepSinghDhaka 感谢您的帮助。我已经更新了答案。
【解决方案2】:

尝试一些 USB 分析仪,如 USBview、Ellysis 可视化 USB 分析仪,这将有助于消除您的疑虑

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-13
    • 2019-12-16
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多