Skip to content

Commit

Permalink
Implement EPx-only RP2040 USB Host
Browse files Browse the repository at this point in the history
This commit fixes issue hathach#2776
hathach#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
rppicomidi/usb_midi_host#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 project).
  • Loading branch information
rppicomidi committed Sep 23, 2024
1 parent f4dd176 commit 170cfeb
Show file tree
Hide file tree
Showing 3 changed files with 585 additions and 118 deletions.
Loading

0 comments on commit 170cfeb

Please sign in to comment.