tinyusb
tinyusb copied to clipboard
Implement EPx-only RP2040 USB Host
This commit fixes issue #2776 https://github.com/hathach/tinyusb/issues/2776. The HCD now routes all USB transfers through the EPx endpoint. It no longer uses the "interrupt" endpoint hardware to handle INTERRUPT and BULK endpoints. The fix avoids the data sequence error handling bug in the RP2040 USB IP's "interrupt" endpoint hardware and allows the host to correctly drop the IN packet with the error without locking up. That fixes https://github.com/rppicomidi/usb_midi_host/issues/14
This fix requires the CPU to handle the SOF interrupt (every ms). That might be an issue for some systems.
A benefit of this fix is that BULK transfers are more than 2x faster. There is an opportunity to speed them up further by forcing BULK transfer to begin immediately instead of waiting for the next SOF interrupt.
This code has been tested with MSC flash drives, HID devices, and USB Hubs. It works with full speed and low speed HID devices connected at the same time through a hub. With the usb_midi_host application host driver, 4 MIDI devices plugged to a hub can send messages to each other (see the [midi2usbhub](https://github.com/rppicomidi/midi2usbhub project).
Describe the PR See description, above
Additional context https://github.com/rppicomidi/usb_midi_host/issues/14 https://github.com/raspberrypi/pico-feedback/issues/394