Está disponible la versión 0.19 del proyecto TinyUSB, que desarrolla una pila USB multiplataforma para sistemas integrados. Se proporcionan componentes de la pila USB para hosts USB (USB Host) y para dispositivos conectados (USB Device). El código del proyecto está escrito en C y se distribuye bajo la licencia MIT.
Para aumentar la seguridad, TinyUSB no utiliza operaciones de asignación dinámica de memoria. Se admite su uso en aplicaciones multihilo. Para un funcionamiento seguro en múltiples hilos, todos los eventos relacionados con la ocurrencia de interrupciones no se procesan inmediatamente al recibir la ISR (Interrupción de Servicio), sino que se colocan en una cola que se procesa en el contexto de ejecución de la aplicación, y no en el controlador de interrupciones. Al acceder a recursos compartidos, como FIFO CDC (Clase de Dispositivos de Comunicación), se utilizan semáforos y mutexes.
La pila está abstraída del sistema operativo y puede utilizarse como un componente independiente, no vinculado a la funcionalidad de sistemas operativos. No obstante, hay módulos disponibles para integrar TinyUSB con FreeRTOS, RT-Thread y Apache Mynewt. Se admiten características de reducción de consumo de energía, como el modo de suspensión y el despertador con la aparición de actividad. Hay una implementación inicial del protocolo PD 3.0 (Power Delivery) para gestionar la transferencia de energía a través de USB Type-C.

TinyUSB permite añadir soporte para clases de dispositivos USB y hosts personalizados sin modificar la pila USB. Entre las clases de dispositivos ya admitidas en TinyUSB se encuentran:
- UAC2 — Clase de Audio 2.0;
- BTH HCI — Interfaz de Controlador de Host Bluetooth;
- CDC — Clase de Dispositivos de Comunicación;
- DFU — Actualización de Firmware del Dispositivo;
- HID — Dispositivo de Interfaz Humana (teclado, ratón, gamepad);
- MSC — Clase de Almacenamiento Masivo (incluidos los dispositivos con múltiples dispositivos lógicos);
- MIDI — Interfaz Digital de Instrumentos Musicales;
- MTP/PTP — Protocolo de Transferencia de Medios;
- RNDIS, ECM (Modelo de Control de Ethernet) y NCM (Modelo de Control de Red) — interacción de red a través de USB;
- USBTMC — Clase de Prueba y Medida;
- UVC — clase de Video 1.5;
- WebUSB.
Clases de USB-host admitidas:
- HID — Dispositivo de Interfaz Humana;
- MSC — Clase de Almacenamiento Masivo;
- CDC-ACM — Clase de Dispositivos de Comunicación;
- FTDI, CP210x, CH34x, PL2303 — mediante el paso de puerto serie a través de USB;
- Hub USB.
En la nueva versión, se ha ampliado la API para dispositivos y hosts. En la implementación del USB-host se ha añadido soporte para dispositivos con múltiples configuraciones. Se ha añadido soporte para microcontroladores y placas:
- ESP32-H4, ESP32-C5, ESP32-C61;
- STM32U0, STM32WBA, STM32N6;
- AT32F405, AT32F403A, AT32F415, AT32F423;
- CH32V305 y CH32V20x (host USB);
- SDK MCXA156 2.16 y FRDM-MCXA156.
Fuente: opennet.ru
