Skip to content

0.21.0

Latest

Choose a tag to compare

@hathach hathach released this 30 Jun 15:29
dae3f9a

0.21.0

June 29, 2026

General

New MCUs and Boards

  • Add HPMicro HPM6xxx support with HPM6750EVK2 board
  • Add NXP RW61x (RW612, ChipIdea high-speed) support
  • Add Artery AT32F45x series support
  • Add STM32C5 series support
  • Add Espressif ESP32-S31 (high-speed) support
  • Add WCH CH582/CH583 (USBFS) support
  • Add CH32V103 USB device support (combined-control USBFS) with CH32V103C8T6 Bluepill board
  • Add FreeRTOS support for RP2040/RP2350
  • New boards: nRF54LM20-DK, WeAct STM32H743, EK-TM4C1294XL, STM32H747-DISCO, NUCLEO-H533RE
  • Migrate i.MX RT to the new mcux-devices-rt SDK package

Code Quality and Build

  • Major refactor of dedicated hardware-FIFO (HWFIFO) handling: omit per-endpoint RAM buffers on ports with a dedicated hardware FIFO, add stride-aware FIFO access, and store raw bytes in tusb_fifo
  • Reduce code size via control/descriptor and stream refactors, and remove snprintf usage
  • Remove IAR toolchain support from the Make build; add IAR warning flags and resolve warnings in CMake
  • Fix Zephyr build with nrfx v4, C++/-Werror=extra builds, and various -Wconversion warnings
  • Update FatFS to R0.16
  • Fix the fuzzing harness
  • Various BSP fixes (STM32H5 UID read with ICACHE, STM32F411 Black Pill HSE, RT1011 data cache, Teensy)

Documentation

  • Add a README for every example and build-doc tooling
  • Add Sponsors section and FUNDING configuration
  • Various README/doc fixes (FTDI host, STM32C071 Nucleo URL, Supported CPUs table)

API Changes

  • Add is_isr parameter to dcd_edpt_xfer, dcd_edpt_xfer_fifo, usbd_edpt_xfer and usbd_edpt_xfer_fifo
  • Remove the no-FIFO mode from the endpoint stream API
  • Add tud_vendor_write_clear() to forcefully clear the TX buffer
  • Add tud_midi_n_demux_stream_read() cable-aware MIDI stream read
  • Add CFG_TUH_HID_SET_PROTOCOL_ON_ENUM host HID option
  • Add CFG_TUSB_DEBUG_BREAKPOINT hook for TU_BREAKPOINT
  • Add ThreadX OSAL support
  • tud_task_ext() / tuh_task_ext() now limit the number of events processed per call
  • Replace CFG_TUD_NET_ENDPOINT_SIZE with the descriptor-based endpoint size

Device Stack

USBD Core

  • Refactor and validate device descriptor handling; move control transfer handling into usbd.c
  • Use the EP0 buffer directly when large enough; clamp EP0 OUT data copy to the control buffer
  • Fix stream write logic/racing without FIFO; fix zero wLength control request
  • Fix ISO OUT endpoint failure on alt-setting MPS change

Audio

  • Fix audiod_open with MIDI interfaces
  • Fix big-endian bitfield guards for audio structs and endian-safe wValue/wIndex extraction in UAC2 examples

CDC

  • Remove tud_cdc_configure
  • Fix CDC echo test issue on i.MX RT and fast MCUs

HID

  • Bound item size to remaining length in the report-descriptor parser
  • Remove host enumeration assumption; add CFG_TUH_HID_SET_PROTOCOL_ON_ENUM

MIDI

  • Add USB-MIDI 2.0 device and host class drivers
  • Add cable-aware stream read tud_midi_n_demux_stream_read()
  • Fix MIDI host issue

MSC

  • Skip the command stage if the OUT endpoint is stalled
  • Cap tud_msc_scsi_cb buffer size to the endpoint buffer size

MTP

  • Fix transfer completion detection for exact-length packets; queue ZLP when needed
  • Fix premature phase change after a short OUT transfer; fixes in add_string

Network (NCM)

  • Fix NCM state on restart
  • Support SetEthernetPacketFilter and SetNtbInputSize requests
  • Add a weak callback for the initial link state

Video (UVC)

  • Fix VC interface parsing when bNumEndpoints != 0
  • Assert the usbd_edpt_iso_activate() result

DFU

  • Fix the DFU functional descriptor version (1.0.1 → 1.1.0)

Printer

  • Add the USB Printer device class driver

Vendor

  • Omit the endpoint buffer for ports with a dedicated hardware FIFO

Host Stack

  • Fully asynchronous host code: remove blocking delays from tuh_task_ext(), respect its timeout_ms, and avoid stalling one device while another enumerates
  • Add an async control-transfer FIFO so queued control transfers are dispatched instead of dropped
  • Hub enumeration reliability improvements; add MTT hub support
  • Support full-speed host with a high-speed PHY (DWC2)
  • Fix FTDI host multi-channel loop
  • CDC host: use a local control buffer; fix cdch_open typo
  • Big-endian host support for SETUP packet handling
  • Use TUSB_ROLE_HOST in host stack initialization

Controller Driver (DCD & HCD)

DWC2

  • Add dcd_configure for FIFO config and DWC2 deinit support
  • Support full-speed host operation on a high-speed PHY
  • Vbus sensing enhancement; do not modify FS PHY registers on HS PHY (ESP32-P4)
  • Fix HCD TX FIFO full check, ISO IN endpoint disabled after incomplete transfer, and EP0 status completion before SETUP
  • Submit SETUP on SETUP_DONE and handle v3.10a spurious RX_COMPLETE (STM32L476)
  • HCD: correct HFIR for low-speed devices via internal FS PHY; fix split-IN NAK storm and UART starvation (STM32F723)

FSDEV (STM32 / CH32)

  • Add FSDEV host (HCD) driver
  • Refactor FSDEV; share the PMA errata delay helper between DCD/HCD with overridable timing
  • Fix single-buffered isochronous endpoint cases, STM32U0 data stride, and PMA pointer advance on ring-buffer wrap
  • Fix CH32V20x enumeration by enabling the D+ pull-up; work around CH32 EP0 premature OUT ACK
  • Do not enable the unused USB wakeup EXTI IRQ (F1/F3/G4/L1)

MUSB

  • Enhance driver: double packet, EP0 refactor, fix DATAEND race with EP0
  • Fix ZLP IN transfer, RXRDY clearing, and defer EP0 SETUP during the DATA_IN/STATUS race

RP2040 / RP2350

  • Refactor RP2 driver
  • HCD rework: EPX for non-interrupt endpoints and ping-pong double buffering
  • Fix RP2350 hard fault in unaligned memcpy to USB DPRAM
  • Host: fix OUT-data control transfers sending DATA0 instead of DATA1

CH32 USBFS / USBHS (WCH)

  • Fix dropped bulk OUT packets by re-arming the EP_RX_CTRL state (usbfs)
  • Fix endpoint stall length index and clear-stall response (usbhs)
  • Fix CH32V103 hard fault

RUSB2 / SAMx7x

  • Fix RUSB2 FIFO write
  • Refresh dcd_samx7x

New host controllers

  • Add NXP IP3516 HCD (EHCI-like)
  • Add MTT (multi-TT) hub support

nRF5x

  • Request HFCLK in USB_EVT_READY to fix the post-SoftDevice deadlock

Testing

  • Expand Hardware-in-the-Loop (HIL) coverage (MTP, audio, throughput; nanoch32v203, ch32v103, stm32u083nucleo, tm4c123x) and post pass/fail/skip HIL reports as PR comments
  • Add MemBrowse code-size CI integration and size-difference reporting
  • Add automated Claude Code PR review and bug-fix CI workflows
  • Add hil, code-size, pvs, usbmon and build-doc developer skills

Contributors

Thanks to everyone who contributed to this release: @Alex-Schaefer, @alt-0191, @andrewleech, @armusin, @bdolgov, @BrentK-ADI, @ceedriic, @chenzhihong007, @dangfan, @DavidKorczynski, @dinsfire64, @dxbjavid, @embedded-ideas, @felhub, @gab-k, @gabChouin, @HakanL, @hathach, @HiFiPhile, @igi540, @IntegraSources, @kira-live, @LeZerb, @michael-membrowse, @michaelajax, @mickabrig7, @Milek7, @morse-cedricvandenbergh, @nminaylov, @non-bin, @Phozer, @remiberthoz, @renjieah, @rhgndf, @RobertDaleSmith, @roma-jam, @sauloverissimo, @sgrunza-at-BadgerMeter, @sidcha, @StefanOroel, @Tails86, @thamul, @tore-espressif, @UMRnInside, @ValentiWorkLearning, @verylowfreq, @wjklimek1, @YixingShen, @zhiqiang-ch, @zjzhang-cn.