Представлен выпуск открытого проекта TinyUSB 0.19. В рамках этого решения развивается кроссплатформенный USB-стек для встраиваемых систем. В проекте предоставляются компоненты USB-стека для USB-хостов (USB Host) и для подключаемых устройств (USB Device). Исходный код TinyUSB написан на языке C и опубликован на GitHub под лицензией MIT. Разработка решения ведётся с 2019 года.

По информации OpenNET, для повышения безопасности в TinyUSB не применяются операции динамического выделения памяти. Поддерживается использование в многопоточных приложениях. Для безопасной многопоточной работы все события, связанные с возникновением прерываний, не обрабатываются сразу при поступлении ISR (Interrupt Service Request), а помещаются в очередь, которая разбирается и обрабатывается в контексте выполнения приложения, а не обработчика прерываний. При доступе к совместно используемым ресурсам, таким как FIFO CDC (Communication Device Class), применяются семафоры и мьютексы.

Стек TinyUSB абстрагирован от операционной системы и может использоваться как самодостаточный компонент, не привязанный к функциональности операционных систем. При этом доступны модули для интеграции TinyUSB с ОС FreeRTOS, RT-Thread и Apache Mynewt. Поддерживаются возможности снижения энергопотребления, такие как переход в спящий режим и пробуждение при появлении активности. Имеется начальная реализация протокола PD 3.0 (Power Delivery) для управления передачей электроэнергии через USB Type‑C.

Решение TinyUSB позволяет добавлять поддержку собственных классов USB‑устройств и хостов без модификации USB‑стека. Среди уже поддерживаемых в TinyUSB классов устройств есть такие:

  • UAC2 — Audio Class 2.0;

  • BTH HCI — Bluetooth Host Controller Interface;

  • CDC — Communication Device Class;

  • DFU — Device Firmware Update;

  • HID — Human Interface Device (клавиатура, мышь, геймпад);

  • MSC — Mass Storage Class (включая накопители с несколькими логическими устройствами);

  • MIDI — Musical Instrument Digital Interface;

  • MTP/PTP — Media Transfer Protocol;

  • RNDIS, ECM (Ethernet Control Model) и NCM (Network Control Model) — сетевое взаимодействие через USB;

  • USBTMC — Test and Measurement Class;

  • UVC — Video class 1.5;

  • WebUSB.

Поддерживаемые TinyUSB классы USB‑хостов:

  • HID — Human Interface Device;

  • MSC — Mass Storage Class;

  • CDC‑ACM — Communication Device Class;

  • FTDI, CP210x, CH34x, PL2303 — проброс последовательного порта поверх USB;

  • USB Hub.

В новом выпуске TinyUSB расширен API для устройств и хостов. В реализации USB‑хоста появилась поддержка устройств с несколькими конфигурациями. Также в проекте добавлена поддержка микроконтроллеров и плат:

  • ESP32-H4, ESP32-C5, ESP32-C61;

  • STM32U0, STM32WBA, STM32N6;

  • AT32F405, AT32F403A, AT32F415, AT32F423;

  • CH32V305 и CH32V20x (USB host);

  • MCXA156 SDK 2.16 и FRDM‑MCXA156.