Está disponível a versão 0.19 do projeto TinyUSB, que desenvolve uma pilha USB multiplataforma para sistemas embarcados. Os componentes da pilha USB são fornecidos para hosts USB (USB Host) e para dispositivos conectados (USB Device). O código do projeto é escrito em linguagem C e é distribuído sob a licença MIT.
Para aumentar a segurança, o TinyUSB não utiliza operações de alocação dinâmica de memória. É suportado o uso em aplicações multithread. Para uma operação segura em ambientes multithread, todos os eventos relacionados a interrupções não são processados imediatamente quando chega uma ISR (Interrupt Service Request), mas são colocados em uma fila que é analisada e processada no contexto da execução do aplicativo, não na do manipulador de interrupções. No acesso a recursos compartilhados, como FIFO CDC (Communication Device Class), são utilizados semáforos e mutexes.
A pilha é abstraída do sistema operacional e pode ser usada como um componente autossuficiente, independente da funcionalidade dos sistemas operacionais. Ao mesmo tempo, estão disponíveis módulos para integrar o TinyUSB com os sistemas operacionais FreeRTOS, RT-Thread e Apache Mynewt. Recursos para redução do consumo de energia são suportados, como a transição para o modo de espera e o despertador ao receber atividade. Há uma implementação inicial do protocolo PD 3.0 (Power Delivery) para controlar a transmissão de energia através do USB Type-C.

O TinyUSB permite adicionar suporte a classes de dispositivos USB e hosts personalizados sem modificar a pilha USB. Entre as classes de dispositivos já suportadas pelo TinyUSB estão:
- UAC2 — Classe de Áudio 2.0;
- BTH HCI — Interface do Controlador Host Bluetooth;
- CDC — Classe de Dispositivo de Comunicação;
- DFU — Atualização de Firmware do Dispositivo;
- HID — Dispositivo de Interface Humana (teclado, mouse, controle);
- MSC — Classe de Armazenamento em Massa (incluindo dispositivos com múltiplas unidades lógicas);
- MIDI — Interface Digital para Instrumentos Musicais;
- MTP/PTP — Protocolo de Transferência de Mídia;
- RNDIS, ECM (Modelo de Controle Ethernet) e NCM (Modelo de Controle de Rede) — comunicação de rede via USB;
- USBTMC — Classe de Teste e Medição;
- UVC — classe de vídeo 1.5;
- WebUSB.
Classes de hosts USB suportadas:
- HID — Dispositivo de Interface Humana;
- MSC — Classe de Armazenamento em Massa;
- CDC-ACM — Classe de Dispositivo de Comunicação;
- FTDI, CP210x, CH34x, PL2303 — passthrough de porta serial sobre USB;
- Hub USB.
Na nova versão, a API para dispositivos e hosts foi expandida. Na implementação do host USB, foi adicionada suporte a dispositivos com várias configurações. Suporte a microcontroladores e placas foi incluído:
- 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
