using a Raspberry Pi 4 as a USB DSP-DAC

Status
This old topic is closed. If you want to reopen this topic, contact a moderator using the "Report Post" button.
I still do not see the equivalency of usb-audio and usb-ethernet. The audio function can be used by any player, it is a regular soundcard. The ethernet function requires a very different playback chain involving some network streaming tool. Its only advantage compared to regular ethernet/network card is the separate segment with automatic IP configuration.

Back to the usb-audio gadget.

Async output should have the feedback endpoint http://dl.project-voodoo.org/usb-audio-spec/USB Audio v2.0/Audio20 final.pdf ch. 4.10.2. That is obvious, async stream without feedback is not async. But why does the gadget define the output endpoint as asynchronous in the first place? There is no independent clock involved. When the amount of data transfered to the gadget from the host reaches the alsa device period size, the gadget will call the alsa method snd_pcm_period_elapsed which is an IRQ callback by a regular soundcard (IRQ is thrown by the soundcard when its DMA pointer reaches the boundary of period in the RAM buffer - the very same behaviour)

linux/u_audio.c at 6f0d349d922ba44e4348a17a78ea51b7135965b1 * torvalds/linux * GitHub
linux/u_audio.c at 6f0d349d922ba44e4348a17a78ea51b7135965b1 * torvalds/linux * GitHub

Therefore the timing fully depends on the data rate controlled by the USB host - the adaptive mode.

IMO if the output endpoint was defined as adaptive, it could work properly. A simple change

fullspeed out endpoint descriptor:
linux/f_uac2.c at 6f0d349d922ba44e4348a17a78ea51b7135965b1 * torvalds/linux * GitHub

USB_ENDPOINT_SYNC_ASYNC -> USB_ENDPOINT_SYNC_ADAPTIVE

highspeed out endpoint descriptor:
linux/f_uac2.c at 6f0d349d922ba44e4348a17a78ea51b7135965b1 * torvalds/linux * GitHub

USB_ENDPOINT_SYNC_ASYNC -> USB_ENDPOINT_SYNC_ADAPTIVE

Perhaps some adaptive clock lock delay should be defined (it cannot hurt):
https://github.com/torvalds/linux/b...5b1/drivers/usb/gadget/function/f_uac2.c#L299

.bLockDelayUnits = 0,
.wLockDelay = 0,

to 1 millisecond

.bLockDelayUnits = 1,
.wLockDelay = 1,

Unfortunately I do not have a way to test it. It would involve only recompiling the kernel for RPI with these trivial changes. lsusb -v will show if the change worked. IMO it could fix the windows driver problem.
 
I still do not see the equivalency of usb-audio and usb-ethernet. The audio function can be used by any player, it is a regular soundcard. The ethernet function requires a very different playback chain involving some network streaming tool. Its only advantage compared to regular ethernet/network card is the separate segment with automatic IP configuration.

Back to the usb-audio gadget.

Async output should have the feedback endpoint http://dl.project-voodoo.org/usb-audio-spec/USB Audio v2.0/Audio20 final.pdf ch. 4.10.2. That is obvious, async stream without feedback is not async. But why does the gadget define the output endpoint as asynchronous in the first place? There is no independent clock involved. When the amount of data transfered to the gadget from the host reaches the alsa device period size, the gadget will call the alsa method snd_pcm_period_elapsed which is an IRQ callback by a regular soundcard (IRQ is thrown by the soundcard when its DMA pointer reaches the boundary of period in the RAM buffer - the very same behaviour)

linux/u_audio.c at 6f0d349d922ba44e4348a17a78ea51b7135965b1 * torvalds/linux * GitHub
linux/u_audio.c at 6f0d349d922ba44e4348a17a78ea51b7135965b1 * torvalds/linux * GitHub

Therefore the timing fully depends on the data rate controlled by the USB host - the adaptive mode.

IMO if the output endpoint was defined as adaptive, it could work properly. A simple change

fullspeed out endpoint descriptor:
linux/f_uac2.c at 6f0d349d922ba44e4348a17a78ea51b7135965b1 * torvalds/linux * GitHub

USB_ENDPOINT_SYNC_ASYNC -> USB_ENDPOINT_SYNC_ADAPTIVE

highspeed out endpoint descriptor:
linux/f_uac2.c at 6f0d349d922ba44e4348a17a78ea51b7135965b1 * torvalds/linux * GitHub

USB_ENDPOINT_SYNC_ASYNC -> USB_ENDPOINT_SYNC_ADAPTIVE

Perhaps some adaptive clock lock delay should be defined (it cannot hurt):
https://github.com/torvalds/linux/b...5b1/drivers/usb/gadget/function/f_uac2.c#L299

.bLockDelayUnits = 0,
.wLockDelay = 0,

to 1 millisecond

.bLockDelayUnits = 1,
.wLockDelay = 1,

Unfortunately I do not have a way to test it. It would involve only recompiling the kernel for RPI with these trivial changes. lsusb -v will show if the change worked. IMO it could fix the windows driver problem.

I have the Pi 4 and can make some time to test this out. I will send you a PM about it.
 
phofman:

Code:
charlie@ZBOX-CI329-1:~$ arecord -l
**** List of CAPTURE Hardware Devices ****
card 0: Loopback [Loopback], device 0: Loopback PCM [Loopback PCM]
  Subdevices: 8/8
  Subdevice #0: subdevice #0
  Subdevice #1: subdevice #1
  Subdevice #2: subdevice #2
  Subdevice #3: subdevice #3
  Subdevice #4: subdevice #4
  Subdevice #5: subdevice #5
  Subdevice #6: subdevice #6
  Subdevice #7: subdevice #7
card 0: Loopback [Loopback], device 1: Loopback PCM [Loopback PCM]
  Subdevices: 8/8
  Subdevice #0: subdevice #0
  Subdevice #1: subdevice #1
  Subdevice #2: subdevice #2
  Subdevice #3: subdevice #3
  Subdevice #4: subdevice #4
  Subdevice #5: subdevice #5
  Subdevice #6: subdevice #6
  Subdevice #7: subdevice #7
card 1: PCH [HDA Intel PCH], device 0: ALC892 Analog [ALC892 Analog]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: PCH [HDA Intel PCH], device 2: ALC892 Alt Analog [ALC892 Alt Analog]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 2: Gadget [Linux USB Audio Gadget], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
 
When I check the device parameters, the sample rate is not correct. I set up c_srate=96000 as an option when the g_audio module is loaded on the Pi, but on the Linux host the rate is shown as 48000:

Code:
charlie@ZBOX-CI329-1:~$ arecord -D hw:2,0 --dump-hw-params
Recording WAVE 'stdin' : Unsigned 8 bit, Rate 8000 Hz, Mono
HW Params of device "hw:2,0":
--------------------
ACCESS:  MMAP_INTERLEAVED RW_INTERLEAVED
FORMAT:  S16_LE
SUBFORMAT:  STD
SAMPLE_BITS: 16
FRAME_BITS: 32
CHANNELS: 2
RATE: 48000
PERIOD_TIME: [1000 2730667)
PERIOD_SIZE: [48 131072]
PERIOD_BYTES: [192 524288]
PERIODS: [2 1024]
BUFFER_TIME: [2000 5461334)
BUFFER_SIZE: [96 262144]
BUFFER_BYTES: [384 1048576]
TICK_TIME: ALL
--------------------
arecord: set_params:1299: Sample format non available
Available formats:
- S16_LE
 
So far, I am only able to get silence. I used gstreamer pipelines on both sides. It has a built in tone generator. Both pipelines appear to be running fine, etc. but no sound comes out.

I had set the bit depth to 32 bits on the Pi. AM now trying 16 bits.

OK, that doesn't produce sound either. Hmmmm.
 
Last edited:
I wonder why you go the gstreamer route when there is a windows soundcard driver with RTP support available: GitHub - duncanthrax/scream: Virtual network sound card for Microsoft Windows

Using pulseaudio with an RTP sink on the RPi side would simplify the whole setup even more... just my 2ct.

You can't use something you don't know about...

Thanks for the tip! I will check it (scream) out.

OTOH, I will stick with Gstreamer on the Pi. That does both RX of the stream, implements all the LADSPA I need, and sends the audio out via ALSA. I tend to avoid Pulseaudio...

EDIT: I looked at scream. It's basically doing the same thing. I would definitely not multicast. That doesn't work over Wifi anyway from what I recall. I can do the same thing with Gstreamer, which I already have in place.

I was never trying to say that Gstreamer was the ONLY way to push audio over the g_ether connection, it's just a platform that I know pretty well and I knew it could work in this scenario.
 
Last edited:
So far, I am only able to get silence.

OK, please let's proceed systematically to avoid any misunderstanding.

Did you succeed in disabling the capture side? Did the rate setup work?

On host:
aplay -l must list the soundcard

arecord -l must NOT list the soundcard

Please let's use the simpliest possible playback and capture tools - aplay, arecord. Gstreamer is in my eyes too complicated to rely upon when troubleshooting the underlaying problems.

aplay --dump-hw-params on host side must list correct samplerate, channel count, bitsize. The same for arecord --dump-hw-params on gadget side.
 
You can't use something you don't know about...

Thanks for the tip! I will check it (scream) out.

OTOH, I will stick with Gstreamer on the Pi. That does both RX of the stream, implements all the LADSPA I need, and sends the audio out via ALSA. I tend to avoid Pulseaudio...

EDIT: I looked at scream. It's basically doing the same thing. I would definitely not multicast. That doesn't work over Wifi anyway from what I recall. I can do the same thing with Gstreamer, which I already have in place.

I was never trying to say that Gstreamer was the ONLY way to push audio over the g_ether connection, it's just a platform that I know pretty well and I knew it could work in this scenario.

Just meant that it would probably be easier for other people to set it up on the windows side. If gstreamer works for you, that's of course fine. If you're writing a howto you might include the link as an alternative, up to you.

Btw. you can also use RTP with unicast addresses. And you should also be able to replace the fixed IP address with 0.0.0.0 (listen on any ip address) on the receiver side and with a host name (how it's resolved doesn't really matter, zeroconf, DNS, whatever) on the sender side.
 
OK, please let's proceed systematically to avoid any misunderstanding.

Did you succeed in disabling the capture side? Did the rate setup work?

On host:
aplay -l must list the soundcard

arecord -l must NOT list the soundcard

Please let's use the simpliest possible playback and capture tools - aplay, arecord. Gstreamer is in my eyes too complicated to rely upon when troubleshooting the underlaying problems.

aplay --dump-hw-params on host side must list correct samplerate, channel count, bitsize. The same for arecord --dump-hw-params on gadget side.

dump hw params all looks good.
no sound.
Sorry, I am out of time for today...
 
UPDATE:

After doing some sleuthing of the system (the Pi machine) I found that I had somehow broken the onboard audio including the HDMI output and the jack on the Pi. So I decided to start over with a fresh install. Then I went about modifying the bcm2835-pcm.c file to get the HDMI working in 24bit format to make sure that didn't break anything. All is good.

I also set up the USB audio gadget and tested it out using a connection between another computer (the "host", a CI329 running Xubuntu) and the Pi (running Raspbian). This is a Linux to Linux connection, and that is known to work with the stock USB audio gadget driver. Sure enough, it does work. I set up the format specifier on the Pi for the gadget as 96k, 32bit. I could send, receive, and listen to audio from the host on the Pi using headphones connected to the HDMI HAT. On both machines, when I dump-hw-params from aplay I see the correct audio rate and format.

At this point I can move on to modifying the driver for the USB audio gadget with the help of phofman.
 
And if you are ambitious there is a set of proposed patches to add multiple rate support here: [3/3] usb: gadget: f_uac*: Support multiple sampling rates - Patchwork might require some fixes for the latest kernels.

The conversations I saw about that proposed change indicated that it would mess up a bunch of other changes that another developer was implementing. While multiple sample rates would be great, at this point I don't want to make any more changes that I have to...
 
phofman: below is the output from lsusb -v on the host, only for the audio gadget

Code:
Bus 001 Device 019: ID 1d6b:0101 Linux Foundation Audio Gadget
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass          239 Miscellaneous Device
  bDeviceSubClass         2 ?
  bDeviceProtocol         1 Interface Association
  bMaxPacketSize0        64
  idVendor           0x1d6b Linux Foundation
  idProduct          0x0101 Audio Gadget
  bcdDevice            4.19
  iManufacturer           1 Linux 4.19.67-v7l+ with fe980000.usb
  iProduct                2 Linux USB Audio Gadget
  iSerial                 0 
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength          219
    bNumInterfaces          3
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0xc0
      Self Powered
    MaxPower                2mA
    Interface Association:
      bLength                 8
      bDescriptorType        11
      bFirstInterface         0
      bInterfaceCount         3
      bFunctionClass          1 Audio
      bFunctionSubClass       0 
      bFunctionProtocol      32 
      iFunction               4 Source/Sink
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           0
      bInterfaceClass         1 Audio
      bInterfaceSubClass      1 Control Device
      bInterfaceProtocol     32 
      iInterface              5 Topology Control
      AudioControl Interface Descriptor:
        bLength                 9
        bDescriptorType        36
        bDescriptorSubtype      1 (HEADER)
        bcdADC               2.00
        bCategory               8
        wTotalLength           83
        bmControl            0x00
      AudioControl Interface Descriptor:
        bLength                 8
        bDescriptorType        36
        bDescriptorSubtype     10 (CLOCK_SOURCE)
        bClockID                6
        bmAttributes         0x01 Internal fixed Clock 
        bmControls           0x01
          Clock Frequency Control (read-only)
        bAssocTerminal          0
        iClockSource            6 48000Hz
      AudioControl Interface Descriptor:
        bLength                 8
        bDescriptorType        36
        bDescriptorSubtype     10 (CLOCK_SOURCE)
        bClockID                5
        bmAttributes         0x01 Internal fixed Clock 
        bmControls           0x01
          Clock Frequency Control (read-only)
        bAssocTerminal          0
        iClockSource            7 96000Hz
      AudioControl Interface Descriptor:
        bLength                17
        bDescriptorType        36
        bDescriptorSubtype      2 (INPUT_TERMINAL)
        bTerminalID             1
        wTerminalType      0x0101 USB Streaming
        bAssocTerminal          0
        bCSourceID              5
        bNrChannels             2
        bmChannelConfig   0x00000003
          Front Left (FL)
          Front Right (FR)
        bmControls    0x0003
          Copy Protect Control (read/write)
        iChannelNames           0 
        iTerminal               8 USBH Out
      AudioControl Interface Descriptor:
        bLength                17
        bDescriptorType        36
        bDescriptorSubtype      2 (INPUT_TERMINAL)
        bTerminalID             2
        wTerminalType      0x0200 Input Undefined
        bAssocTerminal          0
        bCSourceID              6
        bNrChannels             2
        bmChannelConfig   0x00000003
          Front Left (FL)
          Front Right (FR)
        bmControls    0x0003
          Copy Protect Control (read/write)
        iChannelNames           0 
        iTerminal               9 USBD Out
      AudioControl Interface Descriptor:
        bLength                12
        bDescriptorType        36
        bDescriptorSubtype      3 (OUTPUT_TERMINAL)
        bTerminalID             4
        wTerminalType      0x0101 USB Streaming
        bAssocTerminal          0
        bSourceID               2
        bCSourceID              6
        bmControls         0x0003
          Copy Protect Control (read/write)
        iTerminal              10 USBH In
      AudioControl Interface Descriptor:
        bLength                12
        bDescriptorType        36
        bDescriptorSubtype      3 (OUTPUT_TERMINAL)
        bTerminalID             3
        wTerminalType      0x0300 Output Undefined
        bAssocTerminal          0
        bSourceID               1
        bCSourceID              5
        bmControls         0x0003
          Copy Protect Control (read/write)
        iTerminal              11 USBD In
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        1
      bAlternateSetting       0
      bNumEndpoints           0
      bInterfaceClass         1 Audio
      bInterfaceSubClass      2 Streaming
      bInterfaceProtocol     32 
      iInterface             12 Playback Inactive
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        1
      bAlternateSetting       1
      bNumEndpoints           1
      bInterfaceClass         1 Audio
      bInterfaceSubClass      2 Streaming
      bInterfaceProtocol     32 
      iInterface             13 Playback Active
      AudioStreaming Interface Descriptor:
        bLength                16
        bDescriptorType        36
        bDescriptorSubtype      1 (AS_GENERAL)
        bTerminalLink           1
        bmControls           0x00
        bFormatType             1
        bmFormats         0x00000001
          PCM
        bNrChannels             2
        bmChannelConfig   0x00000003
          Front Left (FL)
          Front Right (FR)
        iChannelNames           0 
      AudioStreaming Interface Descriptor:
        bLength                 6
        bDescriptorType        36
        bDescriptorSubtype      2 (FORMAT_TYPE)
        bFormatType             1 (FORMAT_TYPE_I)
        bSubslotSize            4
        bBitResolution         32
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x01  EP 1 OUT
        bmAttributes            9
          Transfer Type            Isochronous
          Synch Type               Adaptive
          Usage Type               Data
        wMaxPacketSize     0x0300  1x 768 bytes
        bInterval               4
        AudioControl Endpoint Descriptor:
          bLength                 8
          bDescriptorType        37
          bDescriptorSubtype      1 (EP_GENERAL)
          bmAttributes         0x00
          bmControls           0x00
          bLockDelayUnits         1 Milliseconds
          wLockDelay              1
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        2
      bAlternateSetting       0
      bNumEndpoints           0
      bInterfaceClass         1 Audio
      bInterfaceSubClass      2 Streaming
      bInterfaceProtocol     32 
      iInterface             14 Capture Inactive
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        2
      bAlternateSetting       1
      bNumEndpoints           1
      bInterfaceClass         1 Audio
      bInterfaceSubClass      2 Streaming
      bInterfaceProtocol     32 
      iInterface             15 Capture Active
      AudioStreaming Interface Descriptor:
        bLength                16
        bDescriptorType        36
        bDescriptorSubtype      1 (AS_GENERAL)
        bTerminalLink           4
        bmControls           0x00
        bFormatType             1
        bmFormats         0x00000001
          PCM
        bNrChannels             2
        bmChannelConfig   0x00000003
          Front Left (FL)
          Front Right (FR)
        iChannelNames           0 
      AudioStreaming Interface Descriptor:
        bLength                 6
        bDescriptorType        36
        bDescriptorSubtype      2 (FORMAT_TYPE)
        bFormatType             1 (FORMAT_TYPE_I)
        bSubslotSize            2
        bBitResolution         16
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            5
          Transfer Type            Isochronous
          Synch Type               Asynchronous
          Usage Type               Data
        wMaxPacketSize     0x00c0  1x 192 bytes
        bInterval               4
        AudioControl Endpoint Descriptor:
          bLength                 8
          bDescriptorType        37
          bDescriptorSubtype      1 (EP_GENERAL)
          bmAttributes         0x00
          bmControls           0x00
          bLockDelayUnits         0 Undefined
          wLockDelay              0
Device Qualifier (for other device speed):
  bLength                10
  bDescriptorType         6
  bcdUSB               2.00
  bDeviceClass          239 Miscellaneous Device
  bDeviceSubClass         2 ?
  bDeviceProtocol         1 Interface Association
  bMaxPacketSize0        64
  bNumConfigurations      1
Device Status:     0x0000
  (Bus Powered)
 
Last edited:
phofman: here is lsusb -v output on the Pi, for the audio gadget:

Code:
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass            9 Hub
  bDeviceSubClass         0 
  bDeviceProtocol         1 Single TT
  bMaxPacketSize0        64
  idVendor           0x1d6b Linux Foundation
  idProduct          0x0002 2.0 root hub
  bcdDevice            4.19
  iManufacturer           3 Linux 4.19.67-v7l+ dwc2_hsotg
  iProduct                2 DWC OTG Controller
  iSerial                 1 fe980000.usb
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength       0x0019
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0xe0
      Self Powered
      Remote Wakeup
    MaxPower                0mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         9 Hub
      bInterfaceSubClass      0 
      bInterfaceProtocol      0 Full speed (or root) hub
      iInterface              0 
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0004  1x 4 bytes
        bInterval              12
Hub Descriptor:
  bLength               9
  bDescriptorType      41
  nNbrPorts             1
  wHubCharacteristic 0x0008
    Ganged power switching
    Per-port overcurrent protection
    TT think time 8 FS bits
  bPwrOn2PwrGood        1 * 2 milli seconds
  bHubContrCurrent      0 milli Ampere
  DeviceRemovable    0x00
  PortPwrCtrlMask    0xff
 Hub Port Status:
   Port 1: 0000.0000
can't get device qualifier: Resource temporarily unavailable
can't get debug descriptor: Resource temporarily unavailable
Device Status:     0x0001
  Self Powered
 
@phofman: see output you requested below

Code:
pi@Pi4gadget:/proc/asound/UAC2Gadget/pcm0c/sub0 $ lsusb -t
/:  [B][COLOR="Blue"]Bus 03.Port 1: Dev 1, Class=root_hub, Driver=dwc2/1p, 480M[/COLOR][/B]
/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/4p, 5000M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/1p, 480M
    |__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/4p, 480M
Code:
pi@Pi4gadget:/proc/asound/UAC2Gadget/pcm0c/sub0 $ sudo lsusb -v

[B][COLOR="Blue"]Bus 003 Device 001:[/COLOR][/B] ID 1d6b:0002 Linux Foundation 2.0 root hub
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               2.00
  bDeviceClass            9 Hub
  bDeviceSubClass         0 
  bDeviceProtocol         1 Single TT
  bMaxPacketSize0        64
  idVendor           0x1d6b Linux Foundation
  idProduct          0x0002 2.0 root hub
  bcdDevice            4.19
  iManufacturer           3 Linux 4.19.67-v7l+ dwc2_hsotg
  iProduct                2 DWC OTG Controller
  iSerial                 1 fe980000.usb
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength       0x0019
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0xe0
      Self Powered
      Remote Wakeup
    MaxPower                0mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         9 Hub
      bInterfaceSubClass      0 
      bInterfaceProtocol      0 Full speed (or root) hub
      iInterface              0 
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0004  1x 4 bytes
        bInterval              12
Hub Descriptor:
  bLength               9
  bDescriptorType      41
  nNbrPorts             1
  wHubCharacteristic 0x0008
    Ganged power switching
    Per-port overcurrent protection
    TT think time 8 FS bits
  bPwrOn2PwrGood        1 * 2 milli seconds
  bHubContrCurrent      0 milli Ampere
  DeviceRemovable    0x00
  PortPwrCtrlMask    0xff
 Hub Port Status:
   Port 1: 0000.0000
can't get device qualifier: Resource temporarily unavailable
can't get debug descriptor: Resource temporarily unavailable
Device Status:     0x0001
  Self Powered

Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               3.00
  bDeviceClass            9 Hub
  bDeviceSubClass         0 
  bDeviceProtocol         3 
  bMaxPacketSize0         9
  idVendor           0x1d6b Linux Foundation
  idProduct          0x0003 3.0 root hub
  bcdDevice            4.19
  iManufacturer           3 Linux 4.19.67-v7l+ xhci-hcd
  iProduct                2 xHCI Host Controller
  iSerial                 1 0000:01:00.0
  bNumConfigurations      1
  Configuration Descriptor:
    bLength                 9
    bDescriptorType         2
    wTotalLength       0x001f
    bNumInterfaces          1
    bConfigurationValue     1
    iConfiguration          0 
    bmAttributes         0xe0
      Self Powered
      Remote Wakeup
    MaxPower                0mA
    Interface Descriptor:
      bLength                 9
      bDescriptorType         4
      bInterfaceNumber        0
      bAlternateSetting       0
      bNumEndpoints           1
      bInterfaceClass         9 Hub
      bInterfaceSubClass      0 
      bInterfaceProtocol      0 Full speed (or root) hub
      iInterface              0 
      Endpoint Descriptor:
        bLength                 7
        bDescriptorType         5
        bEndpointAddress     0x81  EP 1 IN
        bmAttributes            3
          Transfer Type            Interrupt
          Synch Type               None
          Usage Type               Data
        wMaxPacketSize     0x0004  1x 4 bytes
        bInterval              12
        bMaxBurst               0
Hub Descriptor:
  bLength              12
  bDescriptorType      42
  nNbrPorts             4
  wHubCharacteristic 0x0009
    Per-port power switching
    Per-port overcurrent protection
  bPwrOn2PwrGood       10 * 2 milli seconds
  bHubContrCurrent      0 milli Ampere
  bHubDecLat          0.0 micro seconds
  wHubDelay             0 nano seconds
  DeviceRemovable    0x00
 Hub Port Status:
   Port 1: 0000.02a0 5Gbps power Rx.Detect
   Port 2: 0000.02a0 5Gbps power Rx.Detect
   Port 3: 0000.02a0 5Gbps power Rx.Detect
   Port 4: 0000.02a0 5Gbps power Rx.Detect
Binary Object Store Descriptor:
  bLength                 5
  bDescriptorType        15
  wTotalLength       0x000f
  bNumDeviceCaps          1
  SuperSpeed USB Device Capability:
    bLength                10
    bDescriptorType        16
    bDevCapabilityType      3
    bmAttributes         0x02
      Latency Tolerance Messages (LTM) Supported
    wSpeedsSupported   0x0008
      Device can operate at SuperSpeed (5Gbps)
    bFunctionalitySupport   3
      Lowest fully-functional device speed is SuperSpeed (5Gbps)
    bU1DevExitLat           4 micro seconds
    bU2DevExitLat         231 micro seconds
can't get debug descriptor: Resource temporarily unavailable
Device Status:     0x0001
  Self Powered
 
Status
This old topic is closed. If you want to reopen this topic, contact a moderator using the "Report Post" button.