docs/info/changelog.rst
Changelog
November 19, 2025
New MCUs and Boards:
Code Quality and Static Analysis:
.clang-format for consistent code formattingDocumentation:
DWC2
FSDEV (STM32)
dcd_int_enable()OHCI
USBD Core
Audio
tud_audio_get/set_ep_in_fifo_threshold()CDC
HID
MIDI
tud_midi_n_packet_write_n() and tud_midi_n_packet_read_n()MTP
Video
No changes
New MCUs and Boards:
Core APIs
tusb_deinit() to cleanup stacktusb_time_millis_api() and tusb_time_delay_ms_api()osal_critical APIs for critical section handlingxfer_isr() callback for ISO transfer optimization in device classesDevice APIs
tud_cdc_configure(), tud_cdc_n_notify_uart_state(),
tud_cdc_n_notify_conn_speed_change(), tud_cdc_notify_complete_cb()tud_msc_inquiry2_cb() with bufsize parameter, update tud_msc_async_io_done()
with in_isr parametertud_audio_n_mounted() and various FIFO access functionstud_mtp_mounted(), tud_mtp_data_send(), tud_mtp_data_receive(),
tud_mtp_response_send(), tud_mtp_event_send()Host APIs
tuh_edpt_close(), tuh_address_set(), tuh_descriptor_get_device_local(),
tuh_descriptor_get_string_langid(), tuh_connected(), tuh_bus_info_get()tuh_enum_descriptor_device_cb(),
tuh_enum_descriptor_configuration_cb()tuh_cdc_get_control_line_state_local(), tuh_cdc_get/set_dtr/rts(),
tuh_cdc_connect/disconnect() and sync versions of all control APIstuh_midi_itf_get_info(), tuh_midi_packet_read_n(),
tuh_midi_packet_write_n(), tuh_midi_read_available(), tuh_midi_write_flush(),
tuh_midi_descriptor_cb()DWC2
FSDEV (STM32)
EHCI
Chipidea/NXP
MAX3421E
hcd_edpt_close()RP2040
iso_activate()SAMD
USBD Core
xfer_isr() callback for interrupt-time transfer handlingusbd_edpt_xfer_fifo() stubxfer_isr() defers to xfer_cb()Audio
xfer_isr() for better performanceCDC
CFG_TUD_CDC_NOTIFY, tud_cdc_n_notify_conn_speed_change(), tud_cdc_notify_complete_cb()tud_cdc_configure_fifo() to tud_cdc_configure() and add tx_overwritable_if_not_connected optionHID
MIDI
MSC
tud_msc_async_io_done()tud_msc_inquiry2_cb() with bufsize for full inquiry responseMTP
tud_mtp_event_send()NCM
USBTMC
Vendor
CFG_TUD_VENDOR > 1USBH Core
ENUM_DEBOUNCING_DELAY_MS to 200mstuh_enum_descriptor_device_cb() and tuh_enum_descriptor_configuration_cb() callbackstuh_descriptor_get_string_langid() APIhcd_edpt_open() returns false if endpoint already openedhcd_edpt_close() implementationCDC Serial Host
sync() API with TU_API_SYNC() returning tusb_xfer_result_ttuh_cdc_get_local_line_coding() to tuh_cdc_get_line_coding_local()tuh_cdc_get_control_line_state_local()tuh_cdc_get/set_dtr/rts() as inline functionsMIDI Host
tuh_midi_stream_flush() to tuh_midi_write_flush()tuh_midi_packet_read_n() and tuh_midi_packet_write_n()CFG_TUH_MIDI_STREAM_API to opt out of stream APItuh_midi_get_num_rx/tx_cables() to tuh_midi_get_rx/tx_cable_count()tuh_midi_descriptor_cb() and tuh_midi_itf_get_info()MSC Host
HID Host
New MCUs:
Better support dcache, make sure all usb-transferred buffer are cache line aligned and occupy full cache line
Build ARM IAR with CircleCI
Improve HIL with `dual/host_info_to_device_cdc`` optional for pico/pico2, enable dwc2 dma test
Change signature of tusb_init(rhport, tusb_rhport_init_t*), tusb_init(void) is now deprecated but still available for backward compatibility
Add new tusb_int_handler(rhport, in_isr)
Add time-related APIs: tusb_time_millis_api() and tusb_time_delay_ms_api() for non-RTOS, required for some ports/configuration
New configuration macros:
CFG_TUD/TUH_MEM_DCACHE_ENABLE enable data cache sync for endpoint bufferCFG_TUD/TUH_MEM_DCACHE_LINE_SIZE set cache line sizeCFG_TUD/TUH_DWC2_SLAVE_ENABLE enable dwc2 slave modeCFG_TUD/TUH_DWC2_DMA_ENABLE enable dwc2 dma modeDWC2
RP2: implement dcd_edpt_iso_alloc() and dcd_edpt_iso_activate() for isochronous endpoint
iMXRT1170 support M4 core
tud_network_recv_renew()_audiod_fct.alt_settingdcd_dcache_() return type from void to boolChipidea
DWC2
FSDEV
Rewrite and Generalize driver to support non-stm32 mcu such as wch
Simplify PMA, HW FIFO access and bit manipulation for different access scheme 1x16, 2x16 and 32 bit
Add support for ch32 usbd e.g ch32v203
Add support for STM32G4 and STM32U5 microcontrollers.
Fix h5 (32-bit) errata 2.15.1: Buffer description table update completes after CTR interrupt triggers
ISO EP buffer allocation improvements, implement dcd_edpt_close_all()
Fix ch32v203 race condition and stability issue with
dcd_edpt0_status_complete(), which fixes the race condition with windows where we could miss setup packet (setup bit set, but count = 0)MAX3421E
hcd_deinit() for max3421cpuctl and pinctl to tuh_configure() option for max3421MSP430: support non-bus-powered
MUSB
nRF
dcd_edpt_open() for iso endpointOHCI
RP2040
RUSB2
WCH CH32
Add tud_deinit() and class driver deinit() to deinitialize TinyUSB device stack.
Add support for generic SOF callback.
Add set address recovery time 2ms per USB spec.
Audio
Bluetooth HCI
CDC
tud_cdc_configure_fifo() to make RX/TX buffer persistent (not clear when disconnected)HID
MSC: Added support for SCSI_CMD_PREVENT_ALLOW_MEDIUM_REMOVAL
Net
tud_network_link_state_cb()USBTMC Added notification support
Vendor
write() when neededVideo
tud_video_n_streaming() checkAdded tuh_deinit() to de-initialize TinyUSB host stack.
Added support for new USB mass storage class APIs.
Improved error handling and retry mechanisms for unstable devices.
CDC Serial
CFG_TUH_CDC_FTDI/CP210X/CH32X_VID_PID_LISTHID
tuh_hid_receive_abort()tuh_hid_get_report()Hub
osal_task_delay() in osal_noneAdd new ISO endpoint API: dcd_edpt_iso_alloc() and dcd_edpt_iso_activate()
Remove legacy driver st/synopsys
EHCI
hcd_edpt_abort_xfer()send_setup() not carried out if halted previouslyChipIdea Highspeed
ChipIdea Fullspeed
nrf
Renesas rusb2
rp2040
hcd_frame_number(), hcd_edpt_abort_xfer() for pio-usb hoststm32 fsdev:
dcd_edpt_iso_alloc() and dcd_edpt_iso_activate()OHCI
Add optional hooks tud_event_hook_cb()
Audio (UAC2)
Bluetooth
CDC
MIDI
stream_write() always writes system messages to cable 0USBTMC: Fix tmc488 bit order
Vendor: fix read()/write() race condition
Video (UVC)
USBH
tuh_interface_set(), tuh_task_event_ready(), tuh_edpt_abort_xfer(), tuh_rhport_reset_bus(), tuh_rhport_is_active()hcd_edpt_clear_stall() API signatureusbh_app_driver_get_cb() for application driverstuh_event_hook_cb()CDC
tuh_cdc_itf_get_info() to use tuh_itf_info_t instead of tuh_cdc_info_ttuh_cdc_set_control_line_state(), tuh_cdc_set_line_coding()HID
tuh_hid_send_report(), tuh_hid_itf_get_info(), tuh_hid_receive_ready(), tuh_hid_send_ready(), tuh_hid_set_default_protocol()CFG_TUH_HID is max number of interfaces per device which is rather limited and consume more resources than needed.HUB
MSC
tuh_msc_ready()Add codespell to detect typo
Add support for fuzzing and bagde for oss-fuzz
[osal]
Fix tu_fifo memory overflown when repeatedly write to overwritable fifo (accumulated more than 2 depths)
Better support for IAR (ARM) with ci build check for stm32 mcus.
Fix Windows build for some mingw gnu make situations
Add new port support (WIP) for WCH CH32V307 USB Highspeed
Add new port support (WIP) for PIC32MM/MX & PIC24
[nRF]
[rp2040]
hcd_init() is called multiple times[samd][dcd] Add support for ISO endpoint
[dwc2][dcd] Add support for stm32u5xx
[esp32sx] Fix Isochronous transfers only transmitted on even frame
[lpc_ip3511][dcd] Add isochronous support and fix endpoint accidental write
[ft90x] Improve and enhance support for FT9xx MCU, tested with more examples
[Video]
[MIDI]
[HID]
tud_hid_report_complete_cb() from uint8_t to uint16_t[CDC]
tud_cdc_write() is called repeatedly with large enough data[USBTMC] Fix packet size with highspeed
Retry a few times with transfers in enumeration since device can be unstable when starting up
[MSC] Rework host masstorage API. Add new host/msc_file_explorer example
[CDC]
Improve compiler support for CCRX and IAR
Add timeout to osal_queue_receive()
Add tud_task_ext(timeout, in_isr) as generic version of tud_task(). Same as tuh_task_ext(), tuh_task()
Enable more warnings -Wnull-dereference -Wuninitialized -Wunused -Wredundant-decls -Wconversion
Add new examples
host/bare_api to demonstrate generic (app-level) enumeration and endpoint transferdual/host_hid_to_device_cdc to run both device and host stack concurrently, get HID report from host and print out to device CDC. This example only work with multiple-controller MCUs and rp2040 with the help of pio-usb as added controller.Enhance rhports management to better support dual roles
CFG_TUD_ENABLED/CFG_TUH_ENABLED, CFG_TUD_MAX_SPEED/CFG_TUH_MAX_SPEED can be used to replace CFG_TUSB_RHPORT0_MODE/CFG_TUSB_RHPORT1_MODEtud_init(rphort), tuh_init(rhport) can be used to init stack on specified roothub port (controller) instead of tusb_init(void)Add dcd/hcd port specific defines TUP_ (stand for tinyusb port-specific)
[dwc2]
[EHCI] Fix an issue with EHCI driver
[msp430] Fix for possible bug in msp430-elf-gcc 9.3.0
[nrf5x] Fix DMA access race condition using atomic function
[pic32] Fix PIC32 santiy
[rp2040]
[stm32fsdev] Add support for stm32wb55
[Audio] Add support for feedback endpoint computation
tud_audio_feedback_params_cb(), tud_audio_feedback_interval_isr().TUD_AUDIO_HEADSET_STEREO_DESCRIPTORaudiod_rx_done_cb()[DFU] Fix coexistence with other interfaces BTH, RNDIS
[MSC] Fix inquiry response additional length field
[Venndor] Improve write performance
Add new API tuh_configure(rhport, cfg_id, cfg_param) for dynamnic port specific behavior configuration
[HID] Open OUT endpoint if available
[Hub] hub clear port and device interrupts
[USBH] Major improvement
Rework usbh control transfer with complete callback. New API tuh_control_xfer() though still only carry 1 usbh (no queueing) at a time.
Add generic endpoint transfer with tuh_edpt_open(), tuh_edpt_xfer(). Require CFG_TUH_API_EDPT_XFER=1
Support app-level enumeration with new APIs
tuh_descriptor_get(), tuh_descriptor_get_device(), tuh_descriptor_get_configuration(), tuh_descriptor_get_hid_report()tuh_descriptor_get_string(), tuh_descriptor_get_manufacturer_string(), tuh_descriptor_get_product_string(), tuh_descriptor_get_serial_string()_sync() as sync/blocking version for above APIspeek_n()[DWC2] Generalize synopsys dwc2 with synopsys/dwc2 which support both FS and HS phy (UTMI and ULPI) for various MCUs.
[KL25] Add new HCD for NXP KL25
[MUSB] Add new DCD and HCD for Mentor musb with TI MSP432E4
[F1C100s] Add new DCD for Allwinner F1C100s family
[PIC32MZ] Add new DCD for PIC32MZ
[nRF] Fix/Enhance various race condition with: EASY DMA, request HFXO, EPOUT
[ChipIdea] rename Transdimension to more popular ChipIdea Highspeed,
[RP2040] various update/fix for hcd/dcd
[FT9XX] new DCD port for Bridgetek FT90x and FT93x devices
[DA1469X] Fix resume
[OHCI] Fix device array out of bound
Note: legacy drivers such as st/synopsys, nxp/transdimension are still present in this release but won't receive more update and could be removed in the future.
tud_msc_request_sense_cb() callback, change most default sense error to medium not present (0x02, 0x3A, 0x00)No notable changes
CFG_TUSB_OS_INC_PATH for os include pathdcd_edpt_close_all() for switching configurationdcd_edpt_xfer_fifo() with auto wrap over if fifo buffer is 4K aligned and size is multiple of 4K.net_lwip_webserver to work with NCM (need re-configure example)No notable changes
No notable changes
Synopsys ^^^^^^^^
dcd_synopsys driver integer overflow in HS mode (issue #968)nRF5x ^^^^^
TASKS_EP0RCVOUTRP2040 ^^^^^^
USBD ^^^^
tuh_inited() and tud_inited(), will separate tusb_init/inited() to tud/tuh_init/inited()dcd_attr.h for defining common controller attribute such as max endpointsBluetooth ^^^^^^^^^
DFU ^^^
bwPollTimeoutCFG_TUD_DFU_MODE to simply CFG_TUD_DFUHID ^^^
MIDI ^^^^
UAC2 ^^^^
Vendor ^^^^^^
tud_vendor_n_read_flush()RP2040 ^^^^^^
CFG_TUH_DEVICE_MAX and CFG_TUH_HUB for better management and reduce SRAM usagehcd_pipe_queue_xfer()/hcd_pipe_xfer()hcd_frame_number() instead of micro framexferred_bytes in xfer complete eventedpt_xfer_fifo() APIusbd_edpt_xfer_fifo()CDC
tud_cdc_peek(), tud_vendor_peek() no longer support random offset and dropped position parameter.DFU
HID
Fix keyboard report descriptor template
Add more hid keys constant from 0x6B to 0xA4
[Breaking] rename API
HID_PROTOCOL_NONE/KEYBOARD/MOUSE to HID_ITF_PROTOCOL_NONE/KEYBOARD/MOUSEtud_hid_boot_mode() to tud_hid_get_protocol()tud_hid_boot_mode_cb() to tud_hid_set_protocol_cb()MIDI
Fix MIDI buffer overflow issue
[Breaking] rename API
tud_midi_read() to tud_midi_stream_read()tud_midi_write() to tud_midi_stream_write()tud_midi_receive() to tud_midi_packet_read()tud_midi_send() to tud_midi_packet_write()Device Controller Driver (DCD) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
RP2040
Sony CXD56
NXP Transdimention
USB Device Driver (USBD) ^^^^^^^^^^^^^^^^^^^^^^^^
tud_control_status()) is returned by class driver with SET/CLEAR_FEATURE for endpoint.Device Class Driver ^^^^^^^^^^^^^^^^^^^
DFU Runtime
dfu_rt() to dfu_runtime() for easy readingCDC
tud_cdc_send_break_cb() to support break requesttud_cdc_rx_wanted_cb() is invoked wanted_char may not be the last byte in the fifoHID
[Breaking] Add itf argument to hid API to support multiple instances, follow API has signature changes
tud_hid_descriptor_report_cb()tud_hid_get_report_cb()tud_hid_set_report_cb()tud_hid_boot_mode_cb()tud_hid_set_idle_cb()Add report complete callback tud_hid_report_complete_cb() API
Add DPad/Hat support for HID Gamepad
TUD_HID_REPORT_DESC_GAMEPAD() now support 16 buttons, 2 joysticks, 1 hat/dpadhid_gamepad_report_t along with GAMEPAD_BUTTON_ and GAMEPAD_HAT_ enumhid_composite / hid_composite_freertos exampleMIDI
tud_midi_write24(), make example less ambiguous for cable and channelHost Controller Driver (HCD) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Add rhport to hcd_init()
Improve EHCI/OHCI driver abstraction
hcd_lpc18_43 to hcd_transdimensionhcd_ehci_init(), hcd_ehci_register_addr()Update NXP transdimension hcd_init() to reset controller to host mode
USB Host Driver (USBH) ^^^^^^^^^^^^^^^^^^^^^^
Host Class Driver ^^^^^^^^^^^^^^^^^
MSC
tuh_msc_scsi_inquiry() to tuh_msc_inquiry()tuh_msc_mounted_cb()/tuh_msc_unmounted_cb() to tuh_msc_mount_cb()/tuh_msc_unmount_cb() to match device stack namingtuh_msc_is_busy() to tuh_msc_ready()tuh_msc_read10(), tuh_msc_write10()tuh_msc_get_block_count(), tuh_msc_get_block_size()CFG_TUH_MSC_MAXLUN (default to 4) to hold lun capacitiesmake without prior submodule init for mcu driversNew Boards
Added new device support for Raspberry Pi RP2040
Added new device support for NXP Kinetis KL25ZXX
Use dcd_event_bus_reset() with link speed to replace bus_signal
ESP32-S2:
SAMD21:
STM32 Synopsys:
Sony CXD56
USBD
tusb_init() return true instead of TUSB_ERROR_NONEtud_connected() that return true after device got out of bus reset and received the very first setup packetClass Driver
CDC
HID
CFG_TUD_HID_EP_BUFSIZE from 16 to 64MIDI
MSC
scsi_mode_sense6_t padding, which cause IAR compiler internal error.USBTMC
Example
cmd.exehid_composite & hid_composite_freertos examplesNo noticeable changes to host stack
Added new support for Espressif ESP32-S2
Added new support for Dialog DA1469x
Enhance STM32 Synopsys
Support bus events disconnection/suspend/resume/wakeup
dcd_edpt_close() APIEnhance STM32 fsdev
dcd_edpt_close() APIEnhance NUC 505: enhance set configure behavior
Enhance SAMD
OPT_MCU_SAMD11OPT_MCU_SAME5XFix SAMG control data toggle and stall race condition
Enhance nRF
tud_task() is called within critical section (disabled interrupt)dcd_edpt_close()USBD
Add new class driver for Bluetooth HCI class driver with example can be found in mynewt-tinyusb-example since it needs mynewt OS to run with.
Fix USBD endpoint usage racing condition with usbd_edpt_claim()/usbd_edpt_release()
Added tud_task_event_ready() and osal_queue_empty(). This API is needed to check before enter low power mode with WFI/WFE
Rename USB IRQ Handler to dcd_int_handler(). Application must define IRQ handler in which it calls this API.
Add dcd_connect() and dcd_disconnect() to enable/disable internal pullup on D+/D- on supported MCUs.
Add usbd_edpt_open()
Remove dcd_set_config()
Add OPT_OS_CUMSTOM as hook for application to overwrite and/or add their own OS implementation
Support SET_INTERFACE, GET_INTERFACE request
Add Logging for debug with optional uart/rtt/swo printf retarget or CFG_TUSB_DEBUG_PRINTF hook
Add IAR compiler support
Support multiple configuration descriptors. TUD_CONFIG_DESCRIPTOR() template has extra config_num as 1st argument
Improve USB Highspeed support with actual link speed detection with dcd_event_bus_reset()
Enhance class driver management
usbd_driver_open() add max length argument, and return length of interface (0 for not supported). Return value is used for finding appropriate driverusbd_app_driver_get_cb()Added tud_descriptor_device_qualifier_cb() callback
Optimize tu_fifo bulk write/read transfer
Forward non-std control request to class driver
Let application handle Microsoft OS 1.0 Descriptors (the 0xEE index string)
Fix OSAL FreeRTOS yield from ISR
Class Drivers
USBNET: remove ACM-EEM due to lack of support from host
USBTMC: fix descriptors when INT EP is disabled
CDC:
tud_cdc_tx_complete_cb() callbacktud_cdc_n_write_flush() return number of bytes forced to transfer, and flush when writing enough data to fifoMIDI:
DFU Runtime: fix response to SET_INTERFACE and DFU_GETSTATUS request
Rename some configure macro to make it clear that those are used directly for endpoint transfer
CFG_TUD_HID_BUFSIZE to CFG_TUD_HID_EP_BUFSIZECFG_TUD_CDC_EPSIZE to CFG_TUD_CDC_EP_BUFSIZECFG_TUD_MSC_BUFSIZE to CFG_TUD_MSC_EP_BUFSIZECFG_TUD_MIDI_EPSIZE to CFG_TUD_MIDI_EP_BUFSIZEHID:
Rework USB host stack (still work in progress)
Improve Hub, MSC, HID host driver
Add new hid_composite_freertos
Add new dynamic_configuration to demonstrate how to switch configuration descriptors
Add new hid_multiple_interface
Enhance net_lwip_webserver example
net_lwip_webserverAdded new Audio example: audio_test uac2_headsest
Added CONTRIBUTORS.md to give proper credit for contributors to the stack. Special thanks to Nathan Conrad <https://github.com/pigrew>__ , Peter Lawrence <https://github.com/majbthrd>__ , William D. Jones <https://github.com/cr1901>__ and Sean Cross <https://github.com/xobs>__ and others for spending their precious time to add lots of features and ports for this release.
MCU
Class Driver
tud_descriptor_bos_cb() for BOS descriptor (required for USB 2.1)dcd_edpt0_status_complete() as optional API for DCDExamples
Following examples are added:
board_testcdc_dual_portsdfu_rthid_compositenet_lwip_webserverusbtmcwebusb_serialtud_descriptor_string_cb() to have additional Language ID argumenthal_nrf5x.c into dcd_nrf5x.cdcd_samd21.c and dcd_samd51.c into dcd_samd.cdcd_stm32f4.c to dcd_synopsys.ccdc_msc_hid to cdc_msc (drop hid) due to limited endpoints number of some MCUsusbd/usbd_control with proper handling of zero-length packet (ZLP)cdc_msc_freertos example build for all MCUsFirst release, device stack works great, host stack works but still need improvement.