forked from micropython/micropython
-
Notifications
You must be signed in to change notification settings - Fork 1.3k
Open
Labels
Milestone
Description
CircuitPython version and board name
Adafruit CircuitPython 9.2.5 on 2025-03-19; Adafruit Feather RP2040 USB Host with rp2040
Code/REPL
import usb.core
import time
time.sleep(5) # needed for USB to settle? I don't think so, but whatev.
print("Looking for midi devices")
while True:
i = 0
for device in usb.core.find(find_all=True):
print("Found a device")
i += 1
print(f"Found {i} devices; going around again...")
time.sleep(1)
Behavior
Adafruit CircuitPython 9.2.5 on 2025-03-19; Adafruit Feather RP2040 USB Host with rp2040
>>>
soft reboot
Auto-reload is on. Simply save files over USB to run them or enter REPL to disable.
code.py output:
Looking for midi devices
Found 0 devices; going around again...
Found 0 devices; going around again...
Found 0 devices; going around again...
Traceback (most recent call last):
File "code.py", line 2, in <module>
File "super_simple_test.py", line 14, in <module>
KeyboardInterrupt:
Description
usb.core.find() does not see the device under CP>=9.2.5, but did under <=9.2.4.
Additional information
The following test code runs correctly with all MIDI keyboards I have tried it on under CP 9.2.4 and earlier, but fails on some MIDI keyboards under CP 9.2.5 and later.
Test code
import usb.core
import time
time.sleep(5) # needed for USB to settle? I don't think so, but whatev.
print("Looking for midi devices")
while True:
i = 0
for device in usb.core.find(find_all=True):
print("Found a device")
i += 1
print(f"Found {i} devices; going around again...")
time.sleep(1)
Testing with Akai MPKMini2 MIDI keyboard
Test run 1 (success)
Adafruit CircuitPython 9.2.4 on 2025-01-28; Adafruit Feather RP2040 USB Host with rp2040
>>>
>>>
soft reboot
Auto-reload is on. Simply save files over USB to run them or enter REPL to disable.
code.py output:
Looking for midi devices
Found a device
Found 1 devices; going around again...
Found a device
Found 1 devices; going around again...
Traceback (most recent call last):
File "code.py", line 2, in <module>
File "super_simple_test.py", line 14, in <module>
KeyboardInterrupt:
...
Test run 2 (failure)
Adafruit CircuitPython 9.2.5 on 2025-03-19; Adafruit Feather RP2040 USB Host with rp2040
>>>
soft reboot
Auto-reload is on. Simply save files over USB to run them or enter REPL to disable.
code.py output:
Looking for midi devices
Found 0 devices; going around again...
Found 0 devices; going around again...
Found 0 devices; going around again...
Test run 3 (failure)
Adafruit CircuitPython 10.0.0-alpha.8 on 2025-07-08; Adafruit Feather RP2040 USB Host with rp2040
>>>
>>>
soft reboot
Auto-reload is off.
code.py output:
Looking for midi device
Found 0 devices; going around again...
Found 0 devices; going around again...
...
Output from lsusb --vvv for Akai MPKMini2
As per suggestion/request of @tannewt here is some info on the device from a Linux box:
rob@ScreamerIVU:~$ sudo lsusb -vvv >mpkmini.lsusb.text
(and then edited to show only the pertinent device)
...
Bus 001 Device 009: ID 2011:0715 AKAI MPKmini2
Negotiated speed: Full Speed (12Mbps)
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0 [unknown]
bDeviceSubClass 0 [unknown]
bDeviceProtocol 0
bMaxPacketSize0 32
idVendor 0x2011 AKAI
idProduct 0x0715 MPKmini2
bcdDevice 0.00
iManufacturer 1 AKAI
iProduct 2 MPKmini2
iSerial 3 0001
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 0x0085
bNumInterfaces 3
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x00
(Missing must-be-set bit!)
(Bus Powered)
MaxPower 500mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 3 Human Interface Device
bInterfaceSubClass 0 [unknown]
bInterfaceProtocol 0
iInterface 0
HID Device Descriptor:
bLength 9
bDescriptorType 33
bcdHID 1.11
bCountryCode 0 Not supported
bNumDescriptors 1
bDescriptorType 34 (null)
wDescriptorLength 52
Report Descriptors:
** UNAVAILABLE **
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 1
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0020 1x 32 bytes
bInterval 1
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 1
bAlternateSetting 0
bNumEndpoints 0
bInterfaceClass 1 Audio
bInterfaceSubClass 1 Control Device
bInterfaceProtocol 0
iInterface 0
AudioControl Interface Descriptor:
bLength 9
bDescriptorType 36
bDescriptorSubtype 1 (HEADER)
bcdADC 1.00
wTotalLength 0x0009
bInCollection 1
baInterfaceNr(0) 2
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 2
bAlternateSetting 0
bNumEndpoints 2
bInterfaceClass 1 Audio
bInterfaceSubClass 3 MIDI Streaming
bInterfaceProtocol 0
iInterface 0
MIDIStreaming Interface Descriptor:
bLength 7
bDescriptorType 36
bDescriptorSubtype 1 (HEADER)
bcdADC 1.00
wTotalLength 0x0041
MIDIStreaming Interface Descriptor:
bLength 6
bDescriptorType 36
bDescriptorSubtype 2 (MIDI_IN_JACK)
bJackType 1 Embedded
bJackID 1
iJack 0
MIDIStreaming Interface Descriptor:
bLength 6
bDescriptorType 36
bDescriptorSubtype 2 (MIDI_IN_JACK)
bJackType 2 External
bJackID 2
iJack 0
MIDIStreaming Interface Descriptor:
bLength 9
bDescriptorType 36
bDescriptorSubtype 3 (MIDI_OUT_JACK)
bJackType 1 Embedded
bJackID 3
bNrInputPins 1
baSourceID( 0) 2
BaSourcePin( 0) 1
iJack 0
MIDIStreaming Interface Descriptor:
bLength 9
bDescriptorType 36
bDescriptorSubtype 3 (MIDI_OUT_JACK)
bJackType 2 External
bJackID 4
bNrInputPins 1
baSourceID( 0) 1
BaSourcePin( 0) 1
iJack 0
Endpoint Descriptor:
bLength 9
bDescriptorType 5
bEndpointAddress 0x03 EP 3 OUT
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
bRefresh 0
bSynchAddress 0
MIDIStreaming Endpoint Descriptor:
bLength 5
bDescriptorType 37
bDescriptorSubtype 1 (Invalid)
bNumEmbMIDIJack 1
baAssocJackID( 0) 1
Endpoint Descriptor:
bLength 9
bDescriptorType 5
bEndpointAddress 0x84 EP 4 IN
bmAttributes 2
Transfer Type Bulk
Synch Type None
Usage Type Data
wMaxPacketSize 0x0040 1x 64 bytes
bInterval 0
bRefresh 0
bSynchAddress 0
MIDIStreaming Endpoint Descriptor:
bLength 5
bDescriptorType 37
bDescriptorSubtype 1 (Invalid)
bNumEmbMIDIJack 1
baAssocJackID( 0) 3
...