Edit online

Packet 135 (Setup Data)

3 Dec 2024
Read time: 1 minute(s)

主要分析一下第二个包数据包中的 DATA 字段,包含的就是命令。Data 中总共有 8 字节,每字节的含义如下 (USB 协议报文是小端模式):


image24

在 Linux kernel 中,使用一个结构体来表示:
struct usb_ctrlrequest {
    __u8 bRequestType;
    __u8 bRequest;
    __le16 wValue;
    __le16 wIndex;
    __le16 wLength;
} __attribute__ ((packed));
  • bmRequestType

    OffsetFieldSizeValueDescription
    0bmRequestType10x80表示 期望的数据传输方向为 设备传输给主机,这条 命令的接收者为设备。
  • bRequest

    OffsetFieldSizeValueDescription
    1bmRequest10x06代表了 一个命令,根据 Table 9-4 可以得知代表的命令为获取描述符 GET_DESCRIPTOR

    image25

  • wValue

    OffsetFieldSizeValueDescription
    2wValue20x00 0x01根据 Table 9-3 可以得知,此时代表的是: Descriptor Type + Descriptor Index
    2Descriptor Index10x00想要获取的描述符 index 为 0
    3Descriptor Type10x01根据 Table 9-5 可以得知,想要获取的描述 符为``Device Descriptor``

    image26


    image27

  • wIndex

    OffsetFieldSizeValueDescription
    4wIndex20x00 0x00根据 Table 9-3 可以 得知,此时代表的是: Zero or Language ID
  • wLength

    OffsetFieldSizeValueDescription
    6wLength20x40 0x00根据 Table 9-3 可以得知,此时代表的是: Description Length 即:请求 Device 发送 Device Descriptor 的 前 64 个字节