Skip to content

USB descriptor reads fail on RP2350 USB host with composite/dynamic devices (usb.core.USBError) #10760

@i-am-me0-0

Description

@i-am-me0-0

CircuitPython version and board name

Adafruit CircuitPython 10.0.3 on 2025-10-17; Raspberry Pi Pico 2 with rp2350a

Raspberry Pi Pico 2 - https://www.waveshare.com/wiki/RP2350-USB-A

Code/REPL

import usb_host
import board

usb_host.Port(board.GP12, board.GP13)


# SPDX-License-Identifier: Unlicense

import usb.core


from relic_usb_host_descriptor_parser import DeviceDescriptor


for i, device in enumerate(usb.core.find(find_all=True)):

    device_descriptor = DeviceDescriptor(device)

    print(f"Device {i+1}: {device_descriptor}")

    for j, configuration in enumerate(device_descriptor.configurations):

        print(f"- Configuration {j+1}: {configuration}")

        for k, interface in enumerate(configuration.interfaces):

            print(f"  - Interface {k+1}: {interface}")

            for l, endpoint in enumerate(interface.endpoints):

                print(f"    - Endpoints {l+1}: {endpoint}")

    print()

Behavior

Traceback (most recent call last):
  File "<stdin>", line 17, in <module>
  File "relic_usb_host_descriptor_parser.py", line 285, in __init__
  File "adafruit_usb_host_descriptors.py", line 87, in get_device_descriptor
  File "adafruit_usb_host_descriptors.py", line 75, in get_descriptor
usb.core.USBError: 

that is the error message and is is related to descriptors specifically, this code does work which is only the PID and VID

import usb_host
import board

usb_host.Port(board.GP12, board.GP13)
import usb.core

for device in usb.core.find(find_all=True):
    print(device.idVendor, device.idProduct)

which results in
1118 654
in repl

Description

On RP2350-based boards acting as a USB host, attempting to read USB device descriptors using usb.core raises usb.core.USBError for certain devices that enumerate dynamically or expose multiple interfaces (e.g. 8BitDo USB Wireless Adapter 2).

Additional information

I have done a bunch of testing and debugging
Most importantly it seems to always come back to an error in the adafruit_usb_host_descriptors.py library

Further in the adafruit discord (help-with-circuitpython) there is an entire conversation history of everything I have tried and suggestions of others
I feel that is too large to add here but any questions i will answer.

Also this is my first time writing a GitHub issue, how did i do?

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions