2

从 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

那么,任何人都可以让我知道它是什么,但更重要的是,我通常应该去哪里查找自定义类型描述符的信息,我是否会遇到其他一些描述符类型?

4

2 回答 2

4

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

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

USB 2.0 Spec 开始,sec 9.4.3 wValue of 0x200 表示请求是针对标准(或第一个,低字节 0)、配置描述符(高字节 0x2)

来自USB 2.0 规范,第 9.5 节

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

USB 通用类规范中说,第 3.11 节:

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

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

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

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

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

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

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

于 2013-10-19T20:03:17.127 回答
0

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

于 2013-12-19T12:12:57.200 回答