TinyUSB 0.19, une pile USB multiplateforme pour systèmes embarqués, est désormais disponible. Elle fournit des composants pour les hôtes USB (USB Host) et les périphériques USB (USB Device). Le code du projet est écrit en C et distribué sous licence MIT.
Pour renforcer la sécurité, TinyUSB n'utilise pas d'allocation mémoire dynamique. Les applications multithread sont prises en charge. Pour garantir un fonctionnement multithread sécurisé, tous les événements d'interruption ne sont pas traités immédiatement à la réception d'une demande de service d'interruption (ISR), mais placés dans une file d'attente, analysée et traitée dans le contexte de l'application, et non par le gestionnaire d'interruptions. Des sémaphores et des mutex sont utilisés pour accéder aux ressources partagées, comme la FIFO CDC (Communication Device Class).
La pile est indépendante du système d'exploitation et peut être utilisée comme composant autonome, indépendant des fonctionnalités du système. Des modules sont disponibles pour intégrer TinyUSB à FreeRTOS, RT-Thread et Apache Mynewt. Les fonctionnalités d'économie d'énergie, telles que le mode veille et le réveil automatique, sont prises en charge. Une première implémentation du protocole PD 3.0 (Power Delivery) pour la gestion du transfert d'énergie via USB Type-C est incluse.

TinyUSB vous permet d'ajouter la prise en charge de vos propres périphériques USB et classes hôtes sans modifier la pile USB. Les classes de périphériques déjà prises en charge par TinyUSB incluent :
- UAC2 — Classe audio 2.0 ;
- BTH HCI - Interface de contrôleur hôte Bluetooth ;
- CDC - Classe d'appareils de communication ;
- DFU - Mise à jour du micrologiciel de l'appareil ;
- HID — Dispositif d’interface humaine (clavier, souris, manette de jeu) ;
- MSC — Classe de stockage de masse (y compris les lecteurs avec plusieurs unités logiques) ;
- MIDI - Interface numérique pour instrument de musique ;
- MTP/PTP - Protocole de transfert de média ;
- RNDIS, ECM (Ethernet Control Model) et NCM (Network Control Model) – interaction réseau via USB ;
- USBTMC - Cours de test et de mesure ;
- UVC — Classe vidéo 1.5;
- WebUSB.
Classes d'hôtes USB prises en charge :
- HID - Dispositif d'interface humaine ;
- MSC — Classe de stockage de masse ;
- CDC-ACM - Classe de dispositifs de communication ;
- FTDI, CP210x, CH34x, PL2303 - port série via USB ;
- Concentrateur USB.
La nouvelle version étend l'API aux périphériques et aux hôtes. L'implémentation de l'hôte USB prend désormais en charge les périphériques avec plusieurs configurations. La prise en charge des microcontrôleurs et des cartes a été ajoutée :
- ESP32-H4, ESP32-C5, ESP32-C61;
- STM32U0, STM32WBA, STM32N6;
- AT32F405, AT32F403A, AT32F415, AT32F423;
- CH32V305 et CH32V20x (hôte USB) ;
- Kit de développement logiciel MCXA156 2.16 et FRDM-MCXA156.
Source: opennet.ru
