Опубликован открытый USB-стек TinyUSB 0.19

Доступен выпуск проекта TinyUSB 0.19, развивающего кроссплатформенный USB-стек для встраиваемых систем. Предоставляются компоненты USB-стека для USB-хостов (USB Host) и для подключаемых устройств (USB Device). Код проекта написан на языке Си и распространяется под лицензией MIT.

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

Стек абстрагирован от операционной системы и может использоваться как самодостаточный компонент, не привязанных к функциональности операционных систем. При этом доступны модули для интеграции 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.

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

  • HID – Human Interface Device;
  • MSC – Mass Storage Class;
  • CDC-ACM – Communication Device Class;
  • FTDI, CP210x, CH34x, PL2303 – проброс последовательного порт поверх USB;
  • USB Hub.

В новом выпуске расширен 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.

Release. Ссылка here.