Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[WIP] Isochronous transfer support #29

Open
wants to merge 17 commits into
base: master
Choose a base branch
from

Conversation

dgoodlad
Copy link
Contributor

@dgoodlad dgoodlad commented Aug 3, 2022

Note: this is a WIP but wanted to put it out there for feedback sooner rather than later. Maintainers please feel free to close this PR if you'd prefer not to have it sitting open

Depends on rust-embedded-community/usb-device#60 for upstream support in usb-device.

Significant changes

  1. The core requires that isochronous IN transfers set the even/odd frame bit in DIEPCTL before transmitting.
  2. In the event of an incomplete isochronous IN transfer, indicated by the IISOIXFRM interrupt, we must follow the procedure documented in the reference manual to reset the endpoint.

This has only been tested so far on two devices, F411 and F446. The former was running in FS, the latter in HS. I've only used it for very small transfers to support USB Audio Class 2 feedback channels pumping a single floating point value back to the host each frame. It does work for that use case at least 😄

Remaining work

dgoodlad added a commit to dgoodlad/crabdac that referenced this pull request Aug 9, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant