User Tools

Site Tools


Sidebar

Go Back

Refresh

You are not allowed to add pages

Direct Link

library:usb:descriptorexample

USB声卡描述符样例

1. 一个USB Audio的配置描述符 USB数据包

/* Frame (281 bytes) */
static const unsigned char pkt2[281] = {
0x1c, 0x00, 0xb0, 0x98, 0xed, 0x62, 0x80, 0xfa,
0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00,
0x01, 0x01, 0x00, 0x04, 0x00, 0x80, 0x02, 0xfd,
0x00, 0x00, 0x00, 0x01,
0x09, 0x02, 0xfd, 0x00,
0x04, 0x01, 0x00, 0x80, 0x32,
0x09, 0x04, 0x00,
0x00, 0x00, 0x01, 0x01, 0x00, 0x00,
0x0a, 0x24,
0x01, 0x00, 0x01, 0x64, 0x00, 0x02, 0x01, 0x02,
0x0c, 0x24, 0x02, 0x01, 0x01, 0x01, 0x00, 0x02,
0x03, 0x00, 0x00, 0x00,
0x0c, 0x24, 0x02, 0x04,
0x01, 0x02, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00,
0x09, 0x24, 0x03, 0x03, 0x01, 0x03, 0x00, 0x06,
0x00,
0x09, 0x24, 0x03, 0x02, 0x01, 0x01, 0x00,
0x09, 0x00,
0x07, 0x24, 0x05, 0x09, 0x01, 0x05,
0x00,
0x0a, 0x24, 0x06, 0x06, 0x08, 0x01, 0x01,
0x02, 0x02, 0x00,
0x09, 0x24, 0x06, 0x05, 0x04,
0x01, 0x43, 0x00, 0x00,
0x09, 0x24, 0x06, 0x07,
0x04, 0x01, 0x03, 0x00, 0x00,
0x0d, 0x24, 0x04,
0x08, 0x02, 0x01, 0x07, 0x02, 0x03, 0x00, 0x00,
0x00, 0x00,
0x09, 0x04, 0x01, 0x00, 0x00, 0x01,
0x02, 0x00, 0x00,
0x09, 0x04, 0x01, 0x01, 0x01,
0x01, 0x02, 0x00, 0x00,
0x07, 0x24, 0x01, 0x01,
0x01, 0x01, 0x00,
0x0e, 0x24, 0x02, 0x01, 0x02,
0x02, 0x10, 0x02, 0x44, 0xac, 0x00, 0x80, 0xbb,
0x00,
0x09, 0x05, 0x05, 0x01, 0xc0, 0x00, 0x01,
0x00, 0x00,
0x07, 0x25, 0x01, 0x01, 0x00, 0x00,
0x00,
0x09, 0x04, 0x02, 0x00, 0x00, 0x01, 0x02,
0x00, 0x00,
0x09, 0x04, 0x02, 0x01, 0x01, 0x01,
0x02, 0x00, 0x00,
0x07, 0x24, 0x01, 0x02, 0x01,
0x01, 0x00,
0x0e, 0x24, 0x02, 0x01, 0x01, 0x02,
0x10, 0x02, 0x44, 0xac, 0x00, 0x80, 0xbb, 0x00,
0x09, 0x05, 0x86, 0x01, 0x64, 0x00, 0x01, 0x00,
0x00,
0x07, 0x25, 0x01, 0x01, 0x00, 0x00, 0x00,
0x09, 0x04, 0x03, 0x00, 0x01, 0x03, 0x00, 0x00,
0x00,
0x09, 0x21, 0x01, 0x02, 0x00, 0x01, 0x22,
0x29, 0x00,
0x07, 0x05, 0x83, 0x03, 0x08, 0x00,
0x20

};

2. 配置描述符包分析

Frame 8: 281 bytes on wire (2248 bits), 281 bytes captured (2248 bits) on interface 0
USB URB
CONFIGURATION DESCRIPTOR
INTERFACE DESCRIPTOR (0.0): class Audio
Class-specific Audio Control Interface Descriptor: Header Descriptor
Class-specific Audio Control Interface Descriptor: Input terminal descriptor
Class-specific Audio Control Interface Descriptor: Input terminal descriptor
Class-specific Audio Control Interface Descriptor: Output terminal descriptor
Class-specific Audio Control Interface Descriptor: Output terminal descriptor
Class-specific Audio Control Interface Descriptor: Selector unit descriptor
Class-specific Audio Control Interface Descriptor: Feature unit descriptor
Class-specific Audio Control Interface Descriptor: Feature unit descriptor
Class-specific Audio Control Interface Descriptor: Feature unit descriptor
Class-specific Audio Control Interface Descriptor: Mixer unit descriptor
INTERFACE DESCRIPTOR (1.0): class Audio
INTERFACE DESCRIPTOR (1.1): class Audio
Class-specific Audio Streaming Interface Descriptor: General AS Descriptor
Class-specific Audio Streaming Interface Descriptor: Format type descriptor
ENDPOINT DESCRIPTOR
Class-specific Audio Streaming Endpoint Descriptor
INTERFACE DESCRIPTOR (2.0): class Audio
INTERFACE DESCRIPTOR (2.1): class Audio
Class-specific Audio Streaming Interface Descriptor: General AS Descriptor
Class-specific Audio Streaming Interface Descriptor: Format type descriptor
ENDPOINT DESCRIPTOR
Class-specific Audio Streaming Endpoint Descriptor
INTERFACE DESCRIPTOR (3.0): class HID
HID DESCRIPTOR
ENDPOINT DESCRIPTOR

Detail

Detail

Frame 2: 281 bytes on wire (2248 bits), 281 bytes captured (2248 bits) on interface 0
    Interface id: 0 (\\.\pipe\wireshark_extcap_\\.\USBPcap1_20210206011049)
        Interface name: \\.\pipe\wireshark_extcap_\\.\USBPcap1_20210206011049
    Encapsulation type: USB packets with USBPcap header (152)
    Arrival Time: Feb  6, 2021 01:11:12.962023000 中国标准时间
    [Time shift for this packet: 0.000000000 seconds]
    Epoch Time: 1612545072.962023000 seconds
    [Time delta from previous captured frame: 0.000000000 seconds]
    [Time delta from previous displayed frame: 0.000000000 seconds]
    [Time since reference or first frame: 0.000000000 seconds]
    Frame Number: 2
    Frame Length: 281 bytes (2248 bits)
    Capture Length: 281 bytes (2248 bits)
    [Frame is marked: True]
    [Frame is ignored: False]
    [Protocols in frame: usb:usbaudio:usbaudio:usbaudio:usbaudio:usbaudio:usbaudio:usbaudio:usbaudio:usbaudio:usbaudio:usbaudio:usbaudio:usbaudio:usbaudio:usbaudio:usbaudio:usbhid]
USB URB
    [Source: 1.4.0]
    [Destination: host]
    USBPcap pseudoheader length: 28
    IRP ID: 0xfffffa8062ed98b0
    IRP USBD_STATUS: USBD_STATUS_SUCCESS (0x00000000)
    URB Function: URB_FUNCTION_CONTROL_TRANSFER (0x0008)
    IRP information: 0x01, Direction: PDO -> FDO
        0000 000. = Reserved: 0x00
        .... ...1 = Direction: PDO -> FDO (0x1)
    URB bus id: 1
    Device address: 4
    Endpoint: 0x80, Direction: IN
        1... .... = Direction: IN (1)
        .... 0000 = Endpoint number: 0
    URB transfer type: URB_CONTROL (0x02)
    Packet Data Length: 253
    [Request in: 1]
    [Time from request: 0.000000000 seconds]
    Control transfer stage: Data (1)
CONFIGURATION DESCRIPTOR
    bLength: 9
    bDescriptorType: 0x02 (CONFIGURATION)
    wTotalLength: 253
    bNumInterfaces: 4
    bConfigurationValue: 1
    iConfiguration: 0
    Configuration bmAttributes: 0x80  NOT SELF-POWERED  NO REMOTE-WAKEUP
        1... .... = Must be 1: Must be 1 for USB 1.1 and higher
        .0.. .... = Self-Powered: This device is powered from the USB bus
        ..0. .... = Remote Wakeup: This device does NOT support remote wakeup
    bMaxPower: 50  (100mA)
INTERFACE DESCRIPTOR (0.0): class Audio
    bLength: 9
    bDescriptorType: 0x04 (INTERFACE)
    bInterfaceNumber: 0
    bAlternateSetting: 0
    bNumEndpoints: 0
    bInterfaceClass: Audio (0x01)
    bInterfaceSubClass: 0x01
    bInterfaceProtocol: 0x00
    iInterface: 0
Class-specific Audio Control Interface Descriptor: Header Descriptor
    bLength: 10
    bDescriptorType: 0x24 (audio class interface)
    Subtype: Header Descriptor (0x01)
    Version: 1.00
    Total length: 100
    Total number of interfaces: 2
    Interface number: 1
    Interface number: 2
Class-specific Audio Control Interface Descriptor: Input terminal descriptor
    bLength: 12
    bDescriptorType: 0x24 (audio class interface)
    Subtype: Input terminal descriptor (0x02)
    Terminal ID: 1
    Terminal Type: USB Streaming (0x0101)
    Assoc Terminal: 0
    Number Channels: 2
    Channel Config: 0x0003, Left Front, Right Front
        .... .... .... ...1 = Left Front: True
        .... .... .... ..1. = Right Front: True
        .... .... .... .0.. = Center Front: False
        .... .... .... 0... = Low Frequency Enhancement: False
        .... .... ...0 .... = Left Surround: False
        .... .... ..0. .... = Right Surround: False
        .... .... .0.. .... = Left of Center: False
        .... .... 0... .... = Right of Center: False
        .... ...0 .... .... = Surround: False
        .... ..0. .... .... = Side Left: False
        .... .0.. .... .... = Side Right: False
        .... 0... .... .... = Top: False
        0000 .... .... .... = Reserved: 0x0
    Channel Names: 0
    Terminal: 0
Class-specific Audio Control Interface Descriptor: Input terminal descriptor
    bLength: 12
    bDescriptorType: 0x24 (audio class interface)
    Subtype: Input terminal descriptor (0x02)
    Terminal ID: 4
    Terminal Type: Microphone (0x0201)
    Assoc Terminal: 0
    Number Channels: 1
    Channel Config: 0x0001, Left Front
        .... .... .... ...1 = Left Front: True
        .... .... .... ..0. = Right Front: False
        .... .... .... .0.. = Center Front: False
        .... .... .... 0... = Low Frequency Enhancement: False
        .... .... ...0 .... = Left Surround: False
        .... .... ..0. .... = Right Surround: False
        .... .... .0.. .... = Left of Center: False
        .... .... 0... .... = Right of Center: False
        .... ...0 .... .... = Surround: False
        .... ..0. .... .... = Side Left: False
        .... .0.. .... .... = Side Right: False
        .... 0... .... .... = Top: False
        0000 .... .... .... = Reserved: 0x0
    Channel Names: 0
    Terminal: 0
Class-specific Audio Control Interface Descriptor: Output terminal descriptor
    bLength: 9
    bDescriptorType: 0x24 (audio class interface)
    Subtype: Output terminal descriptor (0x03)
    Terminal ID: 3
    Terminal Type: Speaker (0x0301)
    Assoc Terminal: 0
    Source ID: 6
    Terminal: 0
Class-specific Audio Control Interface Descriptor: Output terminal descriptor
    bLength: 9
    bDescriptorType: 0x24 (audio class interface)
    Subtype: Output terminal descriptor (0x03)
    Terminal ID: 2
    Terminal Type: USB Streaming (0x0101)
    Assoc Terminal: 0
    Source ID: 9
    Terminal: 0
Class-specific Audio Control Interface Descriptor: Selector unit descriptor
    bLength: 7
    bDescriptorType: 0x24 (audio class interface)
    Subtype: Selector unit descriptor (0x05)
    Unit ID: 9
    Number In Pins: 1
    Source ID: 5
    Selector : 0
Class-specific Audio Control Interface Descriptor: Feature unit descriptor
    bLength: 10
    bDescriptorType: 0x24 (audio class interface)
    Subtype: Feature unit descriptor (0x06)
    Unit ID: 6
    Source ID: 8
    Control Size: 1
    Controls: 0102
        Control: 0x01, Mute
            .... ...1 = Mute: True
            .... ..0. = Volume: False
            .... .0.. = Bass: False
            .... 0... = Mid: False
            ...0 .... = Treble: False
            ..0. .... = Graphic Equalizer: False
            .0.. .... = Automatic Gain: False
            0... .... = Delay: False
        Control: 0x02, Loudness
            .... ...0 = Bass Boost: False
            .... ..1. = Loudness: True
            0000 00.. = Reserved: 0x00
    Feature: 2
Class-specific Audio Control Interface Descriptor: Feature unit descriptor
    bLength: 9
    bDescriptorType: 0x24 (audio class interface)
    Subtype: Feature unit descriptor (0x06)
    Unit ID: 5
    Source ID: 4
    Control Size: 1
    Controls: 4300
        Control: 0x43, Mute, Volume, Automatic Gain
            .... ...1 = Mute: True
            .... ..1. = Volume: True
            .... .0.. = Bass: False
            .... 0... = Mid: False
            ...0 .... = Treble: False
            ..0. .... = Graphic Equalizer: False
            .1.. .... = Automatic Gain: True
            0... .... = Delay: False
        Control: 0x00
            .... ...0 = Bass Boost: False
            .... ..0. = Loudness: False
            0000 00.. = Reserved: 0x00
    Feature: 0
Class-specific Audio Control Interface Descriptor: Feature unit descriptor
    bLength: 9
    bDescriptorType: 0x24 (audio class interface)
    Subtype: Feature unit descriptor (0x06)
    Unit ID: 7
    Source ID: 4
    Control Size: 1
    Controls: 0300
        Control: 0x03, Mute, Volume
            .... ...1 = Mute: True
            .... ..1. = Volume: True
            .... .0.. = Bass: False
            .... 0... = Mid: False
            ...0 .... = Treble: False
            ..0. .... = Graphic Equalizer: False
            .0.. .... = Automatic Gain: False
            0... .... = Delay: False
        Control: 0x00
            .... ...0 = Bass Boost: False
            .... ..0. = Loudness: False
            0000 00.. = Reserved: 0x00
    Feature: 0
Class-specific Audio Control Interface Descriptor: Mixer unit descriptor
    bLength: 13
    bDescriptorType: 0x24 (audio class interface)
    Subtype: Mixer unit descriptor (0x04)
    Unit ID: 8
    Number In Pins: 2
    Source ID: 1
    Source ID: 7
    Number Channels: 2
    Channel Config: 0x0003, Left Front, Right Front
        .... .... .... ...1 = Left Front: True
        .... .... .... ..1. = Right Front: True
        .... .... .... .0.. = Center Front: False
        .... .... .... 0... = Low Frequency Enhancement: False
        .... .... ...0 .... = Left Surround: False
        .... .... ..0. .... = Right Surround: False
        .... .... .0.. .... = Left of Center: False
        .... .... 0... .... = Right of Center: False
        .... ...0 .... .... = Surround: False
        .... ..0. .... .... = Side Left: False
        .... .0.. .... .... = Side Right: False
        .... 0... .... .... = Top: False
        0000 .... .... .... = Reserved: 0x0
    Channel Names: 0
    Controls: 0x00
    Mixer: 0
INTERFACE DESCRIPTOR (1.0): class Audio
    bLength: 9
    bDescriptorType: 0x04 (INTERFACE)
    bInterfaceNumber: 1
    bAlternateSetting: 0
    bNumEndpoints: 0
    bInterfaceClass: Audio (0x01)
    bInterfaceSubClass: 0x02
    bInterfaceProtocol: 0x00
    iInterface: 0
INTERFACE DESCRIPTOR (1.1): class Audio
    bLength: 9
    bDescriptorType: 0x04 (INTERFACE)
    bInterfaceNumber: 1
    bAlternateSetting: 1
    bNumEndpoints: 1
    bInterfaceClass: Audio (0x01)
    bInterfaceSubClass: 0x02
    bInterfaceProtocol: 0x00
    iInterface: 0
Class-specific Audio Streaming Interface Descriptor: General AS Descriptor
    bLength: 7
    bDescriptorType: 0x24 (audio class interface)
    Subtype: General AS Descriptor (0x01)
    Terminal ID: 1
    Interface delay in frames: 1
    Format: 0x0001
Class-specific Audio Streaming Interface Descriptor: Format type descriptor
    bLength: 14
    bDescriptorType: 0x24 (audio class interface)
    Subtype: Format type descriptor (0x02)
    FormatType: 1
    Number Channels: 2
    Subframe Size: 2
    Bit Resolution: 16
    Samples Frequence Type: 2
    Samples Frequence: 44100
    Samples Frequence: 48000
ENDPOINT DESCRIPTOR
    bLength: 9
    bDescriptorType: 0x05 (ENDPOINT)
    bEndpointAddress: 0x05  OUT  Endpoint:5
        0... .... = Direction: OUT Endpoint
        .... 0101 = Endpoint Number: 0x5
    bmAttributes: 0x01
        .... ..01 = Transfertype: Isochronous-Transfer (0x1)
        .... 00.. = Synchronisationtype: No Sync (0x0)
        ..00 .... = Behaviourtype: Data-Endpoint (0x0)
    wMaxPacketSize: 192
        ...0 0... .... .... = Transactions per microframe: 1 (0)
        .... ..00 1100 0000 = Maximum Packet Size: 192
    bInterval: 1
Class-specific Audio Streaming Endpoint Descriptor
    bLength: 7
    bDescriptorType: 0x25 (audio class endpoint)
    Subtype: 0x01
INTERFACE DESCRIPTOR (2.0): class Audio
    bLength: 9
    bDescriptorType: 0x04 (INTERFACE)
    bInterfaceNumber: 2
    bAlternateSetting: 0
    bNumEndpoints: 0
    bInterfaceClass: Audio (0x01)
    bInterfaceSubClass: 0x02
    bInterfaceProtocol: 0x00
    iInterface: 0
INTERFACE DESCRIPTOR (2.1): class Audio
    bLength: 9
    bDescriptorType: 0x04 (INTERFACE)
    bInterfaceNumber: 2
    bAlternateSetting: 1
    bNumEndpoints: 1
    bInterfaceClass: Audio (0x01)
    bInterfaceSubClass: 0x02
    bInterfaceProtocol: 0x00
    iInterface: 0
Class-specific Audio Streaming Interface Descriptor: General AS Descriptor
    bLength: 7
    bDescriptorType: 0x24 (audio class interface)
    Subtype: General AS Descriptor (0x01)
    Terminal ID: 2
    Interface delay in frames: 1
    Format: 0x0001
Class-specific Audio Streaming Interface Descriptor: Format type descriptor
    bLength: 14
    bDescriptorType: 0x24 (audio class interface)
    Subtype: Format type descriptor (0x02)
    FormatType: 1
    Number Channels: 1
    Subframe Size: 2
    Bit Resolution: 16
    Samples Frequence Type: 2
    Samples Frequence: 44100
    Samples Frequence: 48000
ENDPOINT DESCRIPTOR
    bLength: 9
    bDescriptorType: 0x05 (ENDPOINT)
    bEndpointAddress: 0x86  IN  Endpoint:6
        1... .... = Direction: IN Endpoint
        .... 0110 = Endpoint Number: 0x6
    bmAttributes: 0x01
        .... ..01 = Transfertype: Isochronous-Transfer (0x1)
        .... 00.. = Synchronisationtype: No Sync (0x0)
        ..00 .... = Behaviourtype: Data-Endpoint (0x0)
    wMaxPacketSize: 100
        ...0 0... .... .... = Transactions per microframe: 1 (0)
        .... ..00 0110 0100 = Maximum Packet Size: 100
    bInterval: 1
Class-specific Audio Streaming Endpoint Descriptor
    bLength: 7
    bDescriptorType: 0x25 (audio class endpoint)
    Subtype: 0x01
INTERFACE DESCRIPTOR (3.0): class HID
    bLength: 9
    bDescriptorType: 0x04 (INTERFACE)
    bInterfaceNumber: 3
    bAlternateSetting: 0
    bNumEndpoints: 1
    bInterfaceClass: HID (0x03)
    bInterfaceSubClass: No Subclass (0x00)
    bInterfaceProtocol: 0x00
    iInterface: 0
HID DESCRIPTOR
    bLength: 9
    bDescriptorType: 0x21 (HID)
    bcdHID: 0x0201
    bCountryCode: Not Supported (0x00)
    bNumDescriptors: 1
    bDescriptorType: HID Report (0x22)
    wDescriptorLength: 41
ENDPOINT DESCRIPTOR
    bLength: 7
    bDescriptorType: 0x05 (ENDPOINT)
    bEndpointAddress: 0x83  IN  Endpoint:3
        1... .... = Direction: IN Endpoint
        .... 0011 = Endpoint Number: 0x3
    bmAttributes: 0x03
        .... ..11 = Transfertype: Interrupt-Transfer (0x3)
    wMaxPacketSize: 8
        ...0 0... .... .... = Transactions per microframe: 1 (0)
        .... ..00 0000 1000 = Maximum Packet Size: 8
    bInterval: 32

3. 解读

  • 配置包含4个Interface(CONFIGURATION DESCRIPTOR bNumInterfaces: 4)
  • Interface 0~2 是音频类接口, 4是HID接口

3.1 Interface 0

共11个描述符,其中:
Interface Descriptor 1
Class-specific Audio Control Interface Descriptor : 10

除去1个头部描述符,余下9个控制描述符如下表

序号 接口子类 ID 输入源ID 备注
1 Input terminal descriptor(0x02) 1 USB Streaming (0x0101)
2 Input terminal descriptor(0x02) 4 Microphone (0x0201)
3 Output terminal descriptor(0x03) 3 6 Speaker (0x0301)
4 Output terminal descriptor(0x03) 2 9 USB Streaming (0x0101)
5 Selector unit descriptor(0x05) 9 5 Selector,
6 Feature unit descriptor(0x06) 6 8 Feature Unit,Controls:Mute(0x01) Volume(0x02)
7 Feature unit descriptor(0x06) 5 4 Feature Unit,Controls:Mute, Volume, Automatic Gain(0x43) 0x00
8 Feature unit descriptor(0x06) 7 4 Feature Unit, Controls:Mute, Volume(0x03) 0x00
9 Mixer unit descriptor(0x04) 8 1/7 Mixer, Number Channels: 2, Channel Config: Left Front, Right Front(0x0003)
IT(4)(MIC) ---> FU(5)(Mute,Volume) ---> FU(9)(Selector)  -----------------------> OT(2)(AS)
            \-> FU(7)(Mute,Volume) ---> FU(8)(Mixer) ---> FU(6)(Mute,Volume) ---> OT(3)(Speaker)
IT(1)(AS) --------------------------/

3.2 Interface 1

3.3 Interface 2

3.4 Interface 3

library/usb/descriptorexample.txt · Last modified: 2022/05/02 00:32 (external edit)