从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
那么,任何人都可以让我知道它是什么,但更重要的是,我通常应该去哪里找到自定义类型描述符的信息,我是否会遇到其他描述符类型?
答案 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 $)设备中看到的内容。
描述符类型具有以下定义的结构:
因此,描述符类型0x22表示:类特定的描述符ID 2。
因此,一旦您看到非标准描述符类型,检查它是否是基于供应商的,那么您将需要查找供应商文档。如果它是基于类的,那么检查接口(*)描述符的类。如果接口描述符使用标准类(例如HID),则查找相应的标准文档。如果接口描述符使用供应商类,那么再次需要供应商文档来理解描述符内容是什么。
(*)描述符可适用于设备或接口。我的理解是,如果描述符类型是基于类的,则它适用于设备或接口的类,基于其位置。
答案 1 :(得分:0)
尝试一些USB分析仪,如USBview,Ellisys可视USB分析仪,这有助于消除疑虑