ht32 usb assertion fixes#3
Open
lactide wants to merge 4 commits into
Open
Conversation
Otherwise the first request after a reset was stalled. dmesg messages that are gone now: FreeBSD (after `usbconfig power_off/power_on`) "usb_alloc_device: set address 5 failed (USB_ERR_STALLED, ignored)" Linux (during boot) "device descriptor read/64, error -32"
Otherwise different assertions are triggered in the ChibiOS usb state machine like "EP0 state machine error" or "usbStartTransmit: already transmitting"
94b7541 to
af1995d
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Without those changes i got some usb assertions when running with an AHB clock frequncy of 24MHz on my main development machine.
It seems like endpoint events should be ignored if there was also a reset event, otherwise the next "real" endpoint event will lead to an "already transmitting/receiving" assertion.
Except for the setup packet handling, the ep0 endpoint is identical, so i moved the setup handling also to the handling for all endpoints.
The late address set mode worked better for me, otherwise i did get one dmesg line on FreeBSD or Linux.
By handling the usb in interrupts first, some usb assertions (wrong ep0 state) were gone as well.