Представлен выпуск открытого проекта 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.
Источник: habr.com