GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — GitHub - micropython/tinyusb: An open source cross-platform USB stack for embedded system

BranchesTags
Open more actions menu
 
 

Latest commit

 

History

11,087 Commits
11,087 Commits

Folders and files

NameName
Last commit message
Last commit date
.PVS-Studio
.PVS-Studio
 
 
.circleci
.circleci
 
 
.claude
.claude
 
 
.github
.github
 
 
.idea
.idea
 
 
LICENSES
LICENSES
 
 
docs
docs
 
 
examples
examples
 
 
hw
hw
 
 
lib
lib
 
 
src
src
 
 
test
test
 
 
tools
tools
 
 
.clang-format
.clang-format
 
 
.codespellrc
.codespellrc
 
 
.gitattributes
.gitattributes
 
 
.gitignore
.gitignore
 
 
.pre-commit-config.yaml
.pre-commit-config.yaml
 
 
.readthedocs.yaml
.readthedocs.yaml
 
 
AGENTS.md
AGENTS.md
 
 
CLAUDE.md
CLAUDE.md
 
 
CODE_OF_CONDUCT.rst
CODE_OF_CONDUCT.rst
 
 
LICENSE
LICENSE
 
 
MAINTAINERS.rst
MAINTAINERS.rst
 
 
README.rst
README.rst
 
 
SConscript
SConscript
 
 
library.json
library.json
 
 
pkg.yml
pkg.yml
 
 
repository.yml
repository.yml
 
 
sonar-project.properties
sonar-project.properties
 
 
version.yml
version.yml
 
 

Repository files navigation

TinyUSB

Sponsor Build Status CircleCI Status Documentation Status Static Analysis Fuzzing Status Membrowse License

Overview

TinyUSB

TinyUSB is an open-source cross-platform USB Host/Device stack for embedded systems. It’s designed for memory safety (no dynamic allocation) and thread safety (all interrupts deferred to non-ISR task functions). The stack emphasizes portability, small footprint, and real-time performance across 50+ MCU families.

Sponsors

TinyUSB's continued development is made possible by its sponsors. If TinyUSB helps your products or projects, consider funding its development on GitHub Sponsors.

Platinum

Adafruit has backed TinyUSB since day one as its founding and sole Platinum sponsor. Buying their products directly funds the project's development.

Adafruit Logo

Sponsors (QWORD)

No QWORD sponsors yet — be the first!

Backers (DWORD)

No backers yet — be the first!

Supporters (Word)

No supporters yet — be the first!

Thanks (Byte)

No names listed yet — be the first!

Key Features

  • Thread-safe: USB interrupts deferred to task context
  • Memory-safe: No dynamic allocation, all buffers static
  • Portable: Supports 50+ MCU families
  • Comprehensive: Includes CDC, HID, MSC, Audio, and Host support
  • RTOS-friendly: Works with bare metal, FreeRTOS, RT-Thread, and Mynewt
stackup
.
├── docs            # Documentation
├── examples        # Examples with make and cmake build system
├── hw
│   ├── bsp         # Supported boards source files
│   └── mcu         # Low level mcu core & peripheral drivers
├── lib             # Sources from 3rd party such as FreeRTOS, FatFs ...
├── src             # All sources files for TinyUSB stack itself.
├── test            # Tests: unit test, fuzzing, hardware test
└── tools           # Files used internally

Getting started

See the online documentation for information about using TinyUSB and how it is implemented.

Check out Getting Started guide for adding TinyUSB to your project or building the examples. If you are new to TinyUSB, we recommend starting with the cdc_msc example. There is a handful of Supported Boards that should work out of the box.

We use GitHub Discussions as our forum. It is a great place to ask questions and advice from the community or to discuss your TinyUSB-based projects.

For bugs and feature requests, please raise an issue and follow the templates there.

See Porting guide for adding support for new MCUs and boards.

Device Stack

Supports multiple device configurations by dynamically changing USB descriptors, low power functions such like suspend, resume, and remote wakeup. The following device classes are supported:

  • Audio Class 1.0/2.0 (UAC1/UAC2)
  • Bluetooth Host Controller Interface (BTH HCI)
  • Communication Device Class (CDC)
  • Device Firmware Update (DFU): DFU mode (WIP) and Runtime
  • Human Interface Device (HID): Generic (In & Out), Keyboard, Mouse, Gamepad etc ...
  • Printer class
  • Mass Storage Class (MSC): with multiple LUNs
  • Musical Instrument Digital Interface (MIDI)
  • Media Transfer Protocol (MTP/PTP)
  • Network with RNDIS, Ethernet Control Model (ECM), Network Control Model (NCM)
  • Test and Measurement Class (USBTMC)
  • Video class 1.5 (UVC): work in progress
  • Vendor-specific class support with generic In & Out endpoints. Can be used with MS OS 2.0 compatible descriptor to load winUSB driver without INF file.
  • WebUSB with vendor-specific class

If you have a special requirement, usbd_app_driver_get_cb() can be used to write your own class driver without modifying the stack. Here is how the RPi team added their reset interface raspberrypi/pico-sdk#197

Host Stack

  • Communication Device Class: CDC-ACM
  • Vendor serial over USB: FTDI, CP210x, CH34x, PL2303
  • Human Interface Device (HID): Keyboard, Mouse, Generic
  • Mass Storage Class (MSC)
  • Musical Instrument Digital Interface (MIDI)
  • Hub with multiple-level support

Similar to the Device Stack, if you have a special requirement, usbh_app_driver_get_cb() can be used to write your own class driver without modifying the stack.

Power Delivery Stack

  • Power Delivery 3.0 (PD3.0) with USB Type-C support (WIP)
  • Super early stage, only for testing purpose
  • Only support STM32 G4

OS Abstraction layer

TinyUSB is completely thread-safe by pushing all Interrupt Service Request (ISR) events into a central queue, then processing them later in the non-ISR context task function. It also uses semaphore/mutex to access shared resources such as Communication Device Class (CDC) FIFO. Therefore the stack needs to use some of the OS's basic APIs. Following OSes are already supported out of the box.

  • No OS
  • FreeRTOS
  • RT-Thread: repo
  • Mynewt Due to the newt package build system, Mynewt examples are better to be on its own repo

Supported CPUs

Manufacturer Family Device Host Highspeed Driver Note
Allwinner F1C100s/F1C200s ✅   ✅ sunxi musb variant
Analog MAX3421E   ✅ ❌ max3421 via SPI
MAX32 650, 666, 690, MAX78002 ✅   ✅ musb 1-dir ep
Artery AT32 F403a_407, F413 ✅     stm32_fsdev 768 USB RAM
F415, F435_437, F423, F425, F45x ✅ ✅   dwc2  
F402_F405 ✅ ✅ ✅ dwc2 F405 is HS
Bridgetek FT90x ✅   ✅ ft9xx 1-dir ep
Broadcom BCM2711, BCM2837 ✅   ✅ dwc2  
Dialog DA1469x ✅ ❌ ❌ da146xx  
Espressif ESP32 S2, S3, H4 ✅ ✅ ❌ dwc2  
P4 ✅ ✅ ✅ dwc2  
S31 ✅ ✅ ✅ dwc2  
Geehy APM32 F072 ✅   ❌ stm32_fsdev 1KB USB RAM
GigaDevice GD32VF103 ✅   ❌ dwc2  
HPMicro HPM6750 ✅ ✅ ✅ ci_hs, ehci  
Infineon XMC4500 ✅ ✅ ❌ dwc2  
MicroChip SAM D11, D21, L21, L22 ✅   ❌ samd  
D51, E5x ✅   ❌ samd  
G55 ✅   ❌ samg 1-dir ep
E70,S70,V70,V71 ✅   ✅ samx7x 1-dir ep
PIC 24 ✅     pic ci_fs variant
32 mm, mk, mx ✅     pic ci_fs variant
dsPIC33 ✅     pic ci_fs variant
32mz ✅     pic32mz musb variant
MindMotion mm32 ✅   ❌ mm32f327x_otg ci_fs variant
NordicSemi nRF52, nRF53 ✅ ❌ ❌ nrf5x only ep8 is ISO
nRF54 ✅ ❌ ✅ dwc2  
Nuvoton NUC120 ✅ ❌ ❌ nuc120  
NUC121/NUC125, NUC126 ✅ ❌ ❌ nuc121  
NUC505 ✅   ✅ nuc505  
NXP iMXRT RT 10xx, 11xx ✅ ✅ ✅ ci_hs, ehci  
Kinetis KL, K32L ✅ 🟡 ❌ ci_fs  
LPC 11u, 13, 15 ✅ ❌ ❌ lpc_ip3511  
17, 40 ✅ 🟡 ❌ lpc17_40, ohci  
18, 43 ✅ ✅ ✅ ci_hs, ehci  
51u ✅ ❌ ❌ lpc_ip3511  
54 🟡 🟡 ✅ lpc_ip3511, lpc_ip3516 NRND [1]
55 ✅ ✅ ✅ lpc_ip3511, lpc_ip3516  
MCX N9 ✅   ✅ ci_fs, ci_hs, ehci  
A15 ✅     ci_fs  
RW61x ✅ ✅ ✅ ci_hs, ehci  
Puya PY32F071, PY32F072 ✅ ❌ ❌ musb 1-dir ep
Raspberry Pi RP2040, RP2350 ✅ ✅ ❌ rp2040, pio_usb  
Renesas RX 63N, 65N, 72N ✅ ✅ ❌ rusb2  
RA 4M1, 4M3, 6M1 ✅ ✅ ❌ rusb2  
6M5 ✅ ✅ ✅ rusb2  
Silabs EFM32GG12 ✅   ❌ dwc2  
Sony CXD56 ✅ ❌ ✅ cxd56  
ST STM32 F0, F3, L0, L1, L5, WBx5 ✅ ❌ ❌ stm32_fsdev  
F1 102, 103 ✅ ❌ ❌ stm32_fsdev 512 USB RAM
105, 107 ✅ ✅ ❌ dwc2  
F2, F4, F7, H7, H7RS ✅ ✅ ✅ dwc2  
C0, C5, G0, H5, U3 ✅ ✅ ❌ stm32_fsdev 2KB USB RAM
G4 ✅ ❌ ❌ stm32_fsdev 1KB USB RAM
L4 4x2, 4x3 ✅ ❌ ❌ stm32_fsdev 1KB USB RAM
4x5, 4x6, 4+ ✅ ✅ ❌ dwc2  
N6 ✅ ✅ ✅ dwc2  
U0 ✅ ❌ ❌ stm32_fsdev 1KB USB RAM
U5 535, 545 ✅ ✅ ❌ stm32_fsdev 2KB USB RAM
575, 585 ✅ ✅ ❌ dwc2  
59x,5Ax,5Fx,5Gx ✅ ✅ ✅ dwc2  
TI MSP430 ✅ ❌ ❌ msp430x5xx  
MSP432E4, TM4C123 ✅   ❌ musb  
ValentyUSB eptri ✅ ❌ ❌ eptri  
WCH CH32F20x 🟡   ✅ ch32_usbhs ISO data loss [2]
CH32V20x 🟡   ❌ stm32_fsdev/ch32_usbfs ISO data loss [2]
CH32V305, CH32V307 🟡   ✅ ch32_usbfs/hs ISO data loss [2]
CH583/2, CH32V103 🟡   ❌ ch32_usbfs ISO data loss [2]

Table Legend

✅ Supported
🟡 Partial support
❌ Not supported by hardware
[empty] Unknown
[1]NRND (Not Recommended for New Design), see NXP LPC54600 issues
[2](1, 2, 3, 4) ISO data loss, see WCH CH32F20x/CH32V20x/CH32V30x issues

Development Tools

The following tools are provided freely to support the development of the TinyUSB project:

  • IAR Build Tools (CX) Professional IDE and compiler for embedded development.
  • JetBrains CLion Cross-platform IDE for C and C++ development.
  • PVS-Studio static analyzer for C, C++, C#, and Java code.

About

An open source cross-platform USB stack for embedded system

www.tinyusb.org

Resources

Readme
License
Activity
Custom properties

Stars

0 stars

Watchers

0 watching

Forks

0 forks
Report repository

Releases

Packages

Contributors

Languages

You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.