0.20.0
November 19, 2025
General
-
New MCUs and Boards:
- Add STM32U3 device support (adjusted from STM32U0)
- Add nRF54H20 support with initial board configuration
- Rename board names: pca10056→nrf52840dk, pca10059→nrf52840dongle, pca10095→nrf5340dk
- Improve CMake: Move startup and linker files from board target to executable. Enhance target warning flags and fix various build warnings
-
Code Quality and Static Analysis:
- Add PVS-Studio static analysis to CI
- Add SonarQube scan support
- Add IAR C-Stat analysis capability
- Add
.clang-formatfor consistent code formatting - Fix numerous alerts and warnings found by static analysis tools
-
Documentation:
- Improve Getting Started documentation structure and flow
- Add naming conventions and buffer handling documentation
Controller Driver (DCD & HCD)
-
DWC2
- Fix incorrect handling of Zero-Length Packets (ZLP) in the DWC2 driver when receiving data (OUT transfers)
- Improve EP0 multi-packet logic
- Support EP0 with max packet size = 8
- For IN endpoint, write initial packet directly to FIFO and only use TXFE interrupt for subsequent packets
- Fix ISO with bInterval > 2 using incomplete IN interrupt handling.
- Fix compile issues when enabling both host and device
- Clear pending suspend interrupt after USB reset (enum end)
- Improve host closing endpoint and channel handling when device is unplugged
-
FSDEV (STM32)
- Fix AT32 USB interrupt remapping in
dcd_int_enable()
- Fix AT32 USB interrupt remapping in
-
OHCI
- Add initial LPC55 OHCI support
- Improve data cache support
Device Stack
-
USBD Core
- Support configurable EP0 buffer size CFG_TUD_ENDPOINT0_BUFSIZE
- Make dcd_edpt_iso_alloc/activate as default API for ISO endpoint
-
Audio
- Add UAC1 support
- Implement RX FIFO threshold adjustment with
tud_audio_get/set_ep_in_fifo_threshold()
-
CDC
- Migrate to endpoint stream API
-
HID
- Fix HID stylus descriptor
-
MIDI
- Migrate to endpoint stream API
- Add
tud_midi_n_packet_write_n()andtud_midi_n_packet_read_n()
-
MTP
- Fix incorrect MTP xact_len calculation
-
Video
- Add bufferless operation callback for dynamic frame generation with tud_video_prepare_payload_cb()
Host Stack
No changes
What's Changed
- remove dcd_esp32sx which is replaced by dwc2 by @hathach in #3282
- Fix HID stylus descriptor and hid_composite example by @HiFiPhile in #3280
- fix typo by @hathach in #3283
- fix incorrect MTP xact_len calculation by @RigoLigoRLC in #3284
- stm32h7rs: fix typo in makefile by @HiFiPhile in #3288
- added AGENTS.md by @hathach in #3289
- docs: fix .rst links to use Sphinx :doc: role for proper HTML generation by @Copilot in #3290
- dcd/dwc2: fix enumeration when EP0 size=8 by @HiFiPhile in #3279
- at32_fsdev: Fix dcd_int_enable when remapping the USB interrupt by @tangpipi in #3292
- increase timeout for mtp hil test by @hathach in #3297
- ESP32-S3 bulk transfer issues #3154 by @poornadharshan13-rgb in #3293
- Added stm32l496nucleo board support by @adam-embedded in #3220
- Add qodana CI checks by @qodana-cloud[bot] in #3300
- Revert "Add qodana CI checks" by @hathach in #3302
- add tools that provided freely to develop project by @hathach in #3304
- Initial nrf54h20 support by @hathach in #3299
- Refactor buildsystem and bsp by @hathach in #3306
- More cmake refactor by @hathach in #3316
- Static analysis by @hathach in #3318
- dcd/dwc2: fix suspend interrupt indefinitely disabled on AT32F405 by @peppapighs in #3319
- fix warnings by @hathach in #3320
- examples/device/*_freertos: expand stack size when needed by @karlp in #3271
- try to enable ohci for lpc55 but not working, probably clock issue by @hathach in #3294
- audio: Add UAC1.0 support by @HiFiPhile in #3270
- ohci: Implement support for d-cache operations by @ArcaneNibble in #3248
- Fix code alerts by @hathach in #3326
- fix compile issue with enabled both device and host stack for dwc2 by @hathach in #3333
- Add STM32U3 Device by @tswan22 in #3325
- audio: Implement support for variable EP in flow control fifo level by @gabChouin in #3321
- Fix more code alerts by @hathach in #3334
- Documentation improvements by @c1570 in #3278
- migrate midi_device to use edpt stream API by @hathach in #3337
- migrate cdc device to edpt stream API by @hathach in #3339
- Prevent tu_edpt_number() from returning an invalid endpoint number by @ldube in #3335
- Bufferless (on the fly) video data generation for the video device class by @embedded-ideas in #3322
- make dcd_edpt_iso_alloc/activate as default API for ISO endpoint by @hathach in #3345
- Fix link to Getting Started documentation by @ToonVanEyck in #3347
- dcd/dwc2: fix EP0 multi-packet transfer logic by @HiFiPhile in #3295
- dcd/dwc2: support ISO IN transfer when bInterval > 1 by @HiFiPhile in #3275
- osal/none: add nested count to spin lock by @HiFiPhile in #3151
- host/dwc2: cleanup transfer on device close by @HiFiPhile in #3076
- fix more alerts by @hathach in #3348
- release 0.20.0 by @hathach in #3349
- update changelog.rst by @hathach in #3350
New Contributors
- @RigoLigoRLC made their first contribution in #3284
- @tangpipi made their first contribution in #3292
- @poornadharshan13-rgb made their first contribution in #3293
- @adam-embedded made their first contribution in #3220
- @qodana-cloud[bot] made their first contribution in #3300
- @ArcaneNibble made their first contribution in #3248
- @tswan22 made their first contribution in #3325
- @c1570 made their first contribution in #3278
- @ldube made their first contribution in #3335
- @embedded-ideas made their first contribution in #3322
- @ToonVanEyck made their first contribution in #3347
Full Changelog: 0.19.0...0.20.0