[rtl872x] hal: make USB CDC a bit quicker by scheduling TX from timer callback delayed by 1ms #2672
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.
Problem
USB stack on RTL872x platforms is pretty slow due to processing of interrupts in a task thread and weird scheduling. As a consequence this makes USB CDC (Serial) pretty slow especially on Device->Host path.
Solution
Trigger Device->Host transfers from a high-priority timer thread and delay them by 1ms (RTOS tick), which helps with task scheduling and allows to put more data into TX buffer before the transfer is scheduled. Previously writing 1 character (which is what the wiring APIs do) into an empty TX buffer was immediately triggering TX transaction and due to weird scheduling most of the transfers were just 1 byte.
Steps to Test
wiring/usbserial
Example App
N/A
References
N/A
Completeness