哪里可以找到有关自定义USB描述符类型的信息

时间:2013-10-19 08:57:48

标签: usb

从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

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

2 个答案:

答案 0 :(得分:2)

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

我正在使用USB 2.0 Spec作为参考,以后版本中的部分编号可能不匹配。

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

USB 2.0 Spec,第9.5节

  

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

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

  

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

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

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

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

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

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

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

答案 1 :(得分:0)

尝试一些USB分析仪,如USBview,Ellisys可视USB分析仪,这有助于消除疑虑