프로젝트 소개

TinyUSB는 임베디드 시스템용 오픈소스 크로스 플랫폼 USB 호스트/디바이스 스택입니다. 메모리 안전성(동적 할당 없음)과 스레드 안전성(모든 인터럽트를 비-ISR 태스크 함수로 지연)을 위해 설계되었으며, 이식성, 작은 풋프린트, 실시간 성능을 강조하며 50개 이상의 MCU 제품군을 지원합니다. 주요 기능으로는 ISR 이벤트를 위한 중앙 큐를 통한 스레드 안전 작동, 동적 할당 없는 정적 버퍼, 다양한 MCU 제품군에 대한 이식성, CDC, HID, MSC, Audio, 호스트 기능 지원이 있습니다. 베어 메탈, FreeRTOS, RT-Thread, Mynewt와 함께 작동합니다. 저장소 구조에는 문서, make 및 cmake 빌드 시스템을 사용하는 예제, 하드웨어 BSP 및 MCU 드라이버, 서드파티 라이브러리, 스택 소스, 테스트(단위, 퍼징, 하드웨어), 내부 도구가 포함됩니다. 디바이스 스택은 동적 USB 디스크립터를 통한 여러 구성, 일시 중지, 재개, 원격 웨이크업과 같은 저전력 기능, 그리고 Audio 1.0/2.0, BTH HCI, CDC, DFU, HID, 프린터, 다중 LUN을 지원하는 MSC, MIDI, MTP/PTP, RNDIS/ECM/NCM 네트워킹, USBTMC, UVC(작업 중), 벤더별 클래스, WebUSB와 같은 클래스를 지원합니다. 사용자 정의 클래스 드라이버는 usbd_app_driver_get_cb()를 통해 추가할 수 있습니다. 호스트 스택은 CDC-ACM, USB를 통한 벤더 직렬(FTDI, CP210x, CH34x, PL2303), HID, MSC, MIDI, 다중 레벨 허브를 지원합니다. 사용자 정의 호스트 드라이버는 usbh_app_driver_get_cb()를 통해 추가할 수 있습니다. 전력 공급 스택(USB Type-C를 지원하는 PD3.0)은 매우 초기 단계로, 테스트 전용이며 STM32 G4에서만 지원됩니다. OS 추상화 계층은 모든 ISR 이벤트를 비-ISR 컨텍스트에서 처리되는 중앙 큐로 푸시하며, 공유 리소스에 세마포어/뮤텍스를 사용합니다. 지원 OS로는 No OS, FreeRTOS, RT-Thread, Mynewt가 있습니다. 지원 CPU는 Allwinner, Analog, Artery AT32, Bridgetek, Broadcom, Dialog, Espressif, Geehy, GigaDevice, HPMicro, Infineon, MicroChip, MindMotion, NordicSemi, Nuvoton, NXP, Puya, Raspberry Pi, Renesas, Silabs, Sony, ST STM32, TI, ValentyUSB, WCH 등 여러 제조업체에 걸쳐 있으며, 디바이스, 호스트, 고속 모드에 대한 지원 수준이 다릅니다. 무료로 제공되는 개발 도구로는 IAR Build Tools, JetBrains CLion, PVS-Studio 정적 분석기가 있습니다.