È disponibile la versione 0.19 del progetto TinyUSB, che sviluppa uno stack USB multipiattaforma per sistemi embedded. Vengono forniti componenti dello stack USB per host USB (USB Host) e per dispositivi connessi (USB Device). Il codice del progetto è scritto in linguaggio C e distribuito sotto licenza MIT.
Per aumentare la sicurezza, in TinyUSB non vengono utilizzate operazioni di allocazione dinamica della memoria. È supportato l'uso in applicazioni multithread. Per un funzionamento multithread sicuro, tutti gli eventi legati alla generazione di interruzioni non vengono gestiti immediatamente all'arrivo della ISR (Interrupt Service Request), ma vengono messi in una coda, che viene elaborata nel contesto di esecuzione dell'applicazione, e non del gestore delle interruzioni. Durante l'accesso a risorse condivise, come FIFO CDC (Communication Device Class), vengono utilizzati semafori e mutex.
Lo stack è astratto dal sistema operativo e può essere utilizzato come componente autonomo, non legato alle funzionalità dei sistemi operativi. Sono disponibili moduli per integrare TinyUSB con i sistemi operativi FreeRTOS, RT-Thread e Apache Mynewt. Sono supportate funzionalità di riduzione del consumo energetico, come la modalità sleep e il risveglio al rilevamento di attività. È stata implementata una versione iniziale del protocollo PD 3.0 (Power Delivery) per gestire la trasmissione di energia tramite USB Type-C.

TinyUSB consente di aggiungere supporto per classi USB di dispositivi e host personalizzati senza modificare lo stack USB. Tra le classi di dispositivi già supportate in TinyUSB ci sono:
- UAC2 — Audio Class 2.0;
- BTH HCI — Bluetooth Host Controller Interface;
- CDC — Communication Device Class;
- DFU — Device Firmware Update;
- HID — Human Interface Device (tastiera, mouse, gamepad);
- MSC — Mass Storage Class (inclusi dispositivi con più unità logiche);
- MIDI — Musical Instrument Digital Interface;
- MTP/PTP — Media Transfer Protocol;
- RNDIS, ECM (Ethernet Control Model) e NCM (Network Control Model) — interazione di rete tramite USB;
- USBTMC — Test and Measurement Class;
- UVC — Video Class 1.5;
- WebUSB.
Classi di host USB supportate:
- HID — Human Interface Device;
- MSC — Mass Storage Class;
- CDC-ACM — Communication Device Class;
- FTDI, CP210x, CH34x, PL2303 — trasferimento di porta seriale su USB;
- USB Hub.
Nella nuova versione, l'API per dispositivi e host è stata ampliata. Nell'implementazione dell'host USB è stato aggiunto il supporto per dispositivi con più configurazioni. È stato aggiunto il supporto per microcontrollori e schede:
- ESP32-H4, ESP32-C5, ESP32-C61;
- STM32U0, STM32WBA, STM32N6;
- AT32F405, AT32F403A, AT32F415, AT32F423;
- CH32V305 e CH32V20x (host USB);
- MCXA156 SDK 2.16 e FRDM-MCXA156.
Fonte: opennet.ru
