STM32L433: Make double buffer work for bulk endpoints in ep_write#120
STM32L433: Make double buffer work for bulk endpoints in ep_write#120Solartraveler wants to merge 1 commit intodmitrystu:masterfrom
Conversation
When using double buffering, data can be send in the USB_EP_TX_VALID state too.
|
I hope, it was tested both for single-buffered and double-buffered write. BTW, with linux-serial-test got about 8Mbps for both TX and RX channels (~4Mbps each) on the standard driver / loopback demo code. Need to test with changes. |
|
Thanks for the replay and pointing me to the linux-serial-test program :) Maybe I find time to rewrite the CDC sample to use double buffering and then have a look if the data rate improves there too. Note: callback to know when to queue a next packet, starting with two packets. If you would like to see any additional types of tests, let me know. |
Hello,
thank you very much for the library.
While using the lib for implementing USB mass storage, I failed to get a bulk endpoint to work with USB_EPTYPE_DBLBUF set in usbd_ep_config for endpoint 0x81.
It turns out the endpoint is in the state USB_EP_TX_VALID and not USB_EP_TX_NAK. In both states data can be written.
Without double buffering the transfer rate to the host was limited to ~100KB/s. With double buffering, I can reach ~1100KB/s.
I tested the code with a STM32L452. I guess some of the the other drivers needs a similar fix, if required I could test it with a STM32F042 too.
(Should anyone look through the pull request in order to figure out how to use the lib correctly (as I did), my mass storage implementation can be found here: https://github.com/Solartraveler/UniversalboxArm/tree/main/src/stm32l452/06-usb-mass-storage )
Malte