hathach/tinyusb

GitHub: hathach/tinyusb

一个为嵌入式系统设计的开源跨平台USB Host和Device协议栈,强调线程安全、内存安全和高移植性。

Stars: 6561 | Forks: 1370

# TinyUSB |构建状态| |CircleCI 状态| |文档状态| |静态分析| |模糊测试状态| |Membrowse| |许可证| ## 概述 .. figure:: docs/assets/logo.svg :alt: TinyUSB :align: left .. raw:: html
TinyUSB 是一个用于嵌入式系统的开源跨平台 USB Host/Device 协议栈。它专为内存安全(无动态分配)和线程安全(所有中断都延迟到非 ISR 任务函数)而设计。该协议栈强调跨 50 多个 MCU 系列的可移植性、小内存占用和实时性能。 ## 关键特性 * **线程安全:** USB 中断延迟到任务上下文处理 * **内存安全:** 无动态分配,所有缓冲区均为静态 * **可移植:** 支持 50 多个 MCU 系列 * **全面:** 包含 CDC、HID、MSC、Audio 和 Host 支持 * **RTOS 友好:** 支持裸机、FreeRTOS、RT-Thread 和 Mynewt .. figure:: docs/assets/stack.svg :width: 500px :align: left :alt: stackup .. raw:: html
:: ``` . ├── docs # Documentation ├── examples # Examples with make and cmake build system ├── hw │ ├── bsp # Supported boards source files │ └── mcu # Low level mcu core & peripheral drivers ├── lib # Sources from 3rd party such as FreeRTOS, FatFs ... ├── src # All sources files for TinyUSB stack itself. ├── test # Tests: unit test, fuzzing, hardware test └── tools # Files used internally ``` ## 快速入门 请参阅 `在线文档 `_ 以获取有关使用 TinyUSB 及其实现方式的信息。 查看 `入门指南`_ 以将 TinyUSB 添加到您的项目或构建示例。如果您是 TinyUSB 的新手,我们建议从 ``cdc_msc`` 示例开始。有一些 `支持的开发板`_ 应该可以直接开箱即用。 我们使用 `GitHub Discussions `_ 作为我们的论坛。这是一个向社区提问、寻求建议或讨论基于 TinyUSB 项目的好地方。 对于 Bug 和功能请求,请 `提出 issue `_ 并遵循那里的模板。 请参阅 `移植`_ 指南以添加对新 MCU 和开发板的支持。 ## Device 协议栈 支持通过动态更改 USB 描述符来实现多设备配置,以及挂起、恢复和远程唤醒等低功耗功能。支持以下设备类: - Audio Class 2.0 (UAC2) - 蓝牙主机控制器接口 (BTH HCI) - 通信设备类 (CDC) - 设备固件升级 (DFU):DFU 模式(WIP)和 Runtime - 人机接口设备 (HID):Generic (In & Out)、键盘、鼠标、游戏手柄等... - 打印机类 - 大容量存储类 (MSC):支持多个 LUN - 音乐设备数字接口 (MIDI) - 媒体传输协议 (MTP/PTP) - 网络:RNDIS、以太网控制模型 (ECM)、网络控制模型 (NCM) - 测试与测量类 (USBTMC) - Video 类 1.5 (UVC):开发中 - 带有通用 In & Out 端点的供应商特定类支持。可与 MS OS 2.0 兼容描述符一起使用,以在没有 INF 文件的情况下加载 winUSB 驱动程序。 - 带有供应商特定类的 `WebUSB `__ 如果您有特殊需求,可以使用 ``usbd_app_driver_get_cb()`` 编写自己的类驱动程序,而无需修改协议栈。以下是 RPi 团队添加其重置接口的方法 `raspberrypi/pico-sdk#197 `_ ## Host 协议栈 - 通信设备类:CDC-ACM - USB 供应商串口:FTDI、CP210x、CH34x、PL2303 - 人机接口设备 (HID):键盘、鼠标、Generic - 大容量存储类 (MSC) - 音乐设备数字接口 (MIDI) - 支持多级的 Hub 与 Device 协议栈类似,如果您有特殊需求,可以使用 ``usbh_app_driver_get_cb()`` 编写自己的类驱动程序,而无需修改协议栈。 ## Power Delivery 协议栈 - 支持 USB Type-C 的 Power Delivery 3.0 (PD3.0) (WIP) - 处于超级早期阶段,仅用于测试 - 仅支持 STM32 G4 ## OS 抽象层 TinyUSB 通过将所有中断服务请求 (ISR) 事件推送到中央队列,然后在非 ISR 上下文任务函数中稍后处理,从而实现完全线程安全。它还使用信号量/互斥锁来访问共享资源,例如通信设备类 (CDC) FIFO。因此,该协议栈需要使用一些操作系统的基本 API。以下操作系统已经开箱即用支持。 - **No OS** - **FreeRTOS** - `RT-Thread `_: `仓库 `_ - **Mynewt** 由于 newt 包构建系统,Mynewt 示例最好放在其 `自己的仓库 `_ 中 ## 支持的 CPU +--------------+-----------------------------+--------+------+-----------+------------------------+--------------------+ | Manufacturer | Family | Device | Host | Highspeed | Driver | Note | +==============+=============================+========+======+===========+========================+====================+ | Allwinner | F1C100s/F1C200s | ✔ | | ✔ | sunxi | musb variant | +--------------+-----------------------------+--------+------+-----------+------------------------+--------------------+ | Analog | MAX3421E | | ✔ | ✖ | max3421 | via SPI | | +-----------------------------+--------+------+-----------+------------------------+--------------------+ | | MAX32 650, 666, 690, | ✔ | | ✔ | musb | 1-dir ep | | | MAX78002 | | | | | | +--------------+-----------------------------+--------+------+-----------+------------------------+--------------------+ | Artery AT32 | F403a_407, F413 | ✔ | | | fsdev | 512 USB RAM | | +-----------------------------+--------+------+-----------+------------------------+--------------------+ | | F415, F435_437, F423, | ✔ | ✔ | | dwc2 | | | | F425, F45x | | | | | | | +-----------------------------+--------+------+-----------+------------------------+--------------------+ | | F402_F405 | ✔ | ✔ | ✔ | dwc2 | F405 is HS | +--------------+-----------------------------+--------+------+-----------+------------------------+--------------------+ | Bridgetek | FT90x | ✔ | | ✔ | ft9xx | 1-dir ep | +--------------+-----------------------------+--------+------+-----------+------------------------+--------------------+ | Broadcom | BCM2711, BCM2837 | ✔ | | ✔ | dwc2 | | +--------------+-----------------------------+--------+------+-----------+------------------------+--------------------+ | Dialog | DA1469x | ✔ | ✖ | ✖ | da146xx | | +--------------+-----------------------------+--------+------+-----------+------------------------+--------------------+ | Espressif | S2, S3 | ✔ | ✔ | ✖ | dwc2 | | | ESP32 +-----------------------------+--------+------+-----------+------------------------+--------------------+ | | P4 | ✔ | ✔ | ✔ | dwc2 | | | +-----------------------------+--------+------+-----------+------------------------+--------------------+ | | H4 | ✔ | ✔ | ✖ | dwc2 | | +--------------+-----------------------------+--------+------+-----------+------------------------+--------------------+ | GigaDevice | GD32VF103 | ✔ | | ✖ | dwc2 | | +--------------+-----------------------------+--------+------+-----------+------------------------+--------------------+ | HPMicro | HPM6750 | ✔ | ✔ | ✔ | ci_hs, ehci | | +--------------+-----------------------------+--------+------+-----------+------------------------+--------------------+ | Infineon | XMC4500 | ✔ | ✔ | ✖ | dwc2 | | +--------------+-----+-----------------------+--------+------+-----------+------------------------+--------------------+ | MicroChip | SAM | D11, D21, L21, L22 | ✔ | | ✖ | samd | | | | +-----------------------+--------+------+-----------+------------------------+--------------------+ | | | D51, E5x | ✔ | | ✖ | samd | | | | +-----------------------+--------+------+-----------+------------------------+--------------------+ | | | G55 | ✔ | | ✖ | samg | 1-dir ep | | | +-----------------------+--------+------+-----------+------------------------+--------------------+ | | | E70,S70,V70,V71 | ✔ | | ✔ | samx7x | 1-dir ep | | +-----+-----------------------+--------+------+-----------+------------------------+--------------------+ | | PIC | 24 | ✔ | | | pic | ci_fs variant | | | +-----------------------+--------+------+-----------+------------------------+--------------------+ | | | 32 mm, mk, mx | ✔ | | | pic | ci_fs variant | | | +-----------------------+--------+------+-----------+------------------------+--------------------+ | | | dsPIC33 | ✔ | | | pic | ci_fs variant | | | +-----------------------+--------+------+-----------+------------------------+--------------------+ | | | 32mz | ✔ | | | pic32mz | musb variant | +--------------+-----+-----------------------+--------+------+-----------+------------------------+--------------------+ | MindMotion | mm32 | ✔ | | ✖ | mm32f327x_otg | ci_fs variant | +--------------+-----+-----------------------+--------+------+-----------+------------------------+--------------------+ | NordicSemi | nRF 52833, 52840, 5340 | ✔ | ✖ | ✖ | nrf5x | only ep8 is ISO | +--------------+-----------------------------+--------+------+-----------+------------------------+--------------------+ | Nuvoton | NUC120 | ✔ | ✖ | ✖ | nuc120 | | | +-----------------------------+--------+------+-----------+------------------------+--------------------+ | | NUC121/NUC125, NUC126 | ✔ | ✖ | ✖ | nuc121 | | | +-----------------------------+--------+------+-----------+------------------------+--------------------+ | | NUC505 | ✔ | | ✔ | nuc505 | | +--------------+---------+-------------------+--------+------+-----------+------------------------+--------------------+ | NXP | iMXRT | RT 10xx, 11xx | ✔ | ✔ | ✔ | ci_hs, ehci | | | +---------+-------------------+--------+------+-----------+------------------------+--------------------+ | | Kinetis | KL | ✔ | ⚠ | ✖ | ci_fs, khci | | | | +-------------------+--------+------+-----------+------------------------+--------------------+ | | | K32L2 | ✔ | | ✖ | khci | ci_fs variant | | +---------+-------------------+--------+------+-----------+------------------------+--------------------+ | | LPC | 11u, 13, 15 | ✔ | ✖ | ✖ | lpc_ip3511 | | | | +-------------------+--------+------+-----------+------------------------+--------------------+ | | | 17, 40 | ✔ | ⚠ | ✖ | lpc17_40, ohci | | | | +-------------------+--------+------+-----------+------------------------+--------------------+ | | | 18, 43 | ✔ | ✔ | ✔ | ci_hs, ehci | | | | +-------------------+--------+------+-----------+------------------------+--------------------+ | | | 51u | ✔ | ✖ | ✖ | lpc_ip3511 | | | | +-------------------+--------+------+-----------+------------------------+--------------------+ | | | 54, 55 | ✔ | | ✔ | lpc_ip3511 | | | +---------+-------------------+--------+------+-----------+------------------------+--------------------+ | | MCX | N9 | ✔ | | ✔ | ci_fs, ci_hs, ehci | | | | +-------------------+--------+------+-----------+------------------------+--------------------+ | | | A15 | ✔ | | | ci_fs | | | +---------+-------------------+--------+------+-----------+------------------------+--------------------+ | | RW61x | ✔ | ✔ | ✔ | ci_hs, ehci | | +--------------+-----------------------------+--------+------+-----------+------------------------+--------------------+ | Raspberry Pi | RP2040, RP2350 | ✔ | ✔ | ✖ | rp2040, pio_usb | | +--------------+-----+-----------------------+--------+------+-----------+------------------------+--------------------+ | Renesas | RX | 63N, 65N, 72N | ✔ | ✔ | ✖ | rusb2 | | | +-----+-----------------------+--------+------+-----------+------------------------+--------------------+ | | RA | 4M1, 4M3, 6M1 | ✔ | ✔ | ✖ | rusb2 | | | | +-----------------------+--------+------+-----------+------------------------+--------------------+ | | | 6M5 | ✔ | ✔ | ✔ | rusb2 | | +--------------+-----+-----------------------+--------+------+-----------+------------------------+--------------------+ | Silabs | EFM32GG12 | ✔ | | ✖ | dwc2 | | +--------------+-----------------------------+--------+------+-----------+------------------------+--------------------+ | Sony | CXD56 | ✔ | ✖ | ✔ | cxd56 | | +--------------+-----------------------------+--------+------+-----------+------------------------+--------------------+ | ST STM32 | F0, F3, L0, L1, L5, WBx5 | ✔ | ✖ | ✖ | stm32_fsdev | | | +----+------------------------+--------+------+-----------+------------------------+--------------------+ | | F1 | 102, 103 | ✔ | ✖ | ✖ | stm32_fsdev | 512 USB RAM | | | +------------------------+--------+------+-----------+------------------------+--------------------+ | | | 105, 107 | ✔ | ✔ | ✖ | dwc2 | | | +----+------------------------+--------+------+-----------+------------------------+--------------------+ | | F2, F4, F7, H7, H7RS | ✔ | ✔ | ✔ | dwc2 | | | +-----------------------------+--------+------+-----------+------------------------+--------------------+ | | C0, G0, H5, U3 | ✔ | ✔ | ✖ | stm32_fsdev | 2KB USB RAM | | +-----------------------------+--------+------+-----------+------------------------+--------------------+ | | G4 | ✔ | ✖ | ✖ | stm32_fsdev | 1KB USB RAM | | +----+------------------------+--------+------+-----------+------------------------+--------------------+ | | L4 | 4x2, 4x3 | ✔ | ✖ | ✖ | stm32_fsdev | 1KB USB RAM | | | +------------------------+--------+------+-----------+------------------------+--------------------+ | | | 4x5, 4x6, 4+ | ✔ | ✔ | ✖ | dwc2 | | | +----+------------------------+--------+------+-----------+------------------------+--------------------+ | | N6 | ✔ | ✔ | ✔ | dwc2 | | | +-----------------------------+--------+------+-----------+------------------------+--------------------+ | | U0 | ✔ | ✖ | ✖ | stm32_fsdev | 1KB USB RAM | | +----+------------------------+--------+------+-----------+------------------------+--------------------+ | | U5 | 535, 545 | ✔ | ✔ | ✖ | stm32_fsdev | 2KB USB RAM | | | +------------------------+--------+------+-----------+------------------------+--------------------+ | | | 575, 585 | ✔ | ✔ | ✖ | dwc2 | | | | +------------------------+--------+------+-----------+------------------------+--------------------+ | | | 59x,5Ax,5Fx,5Gx | ✔ | ✔ | ✔ | dwc2 | | +--------------+----+------------------------+--------+------+-----------+------------------------+--------------------+ | TI | MSP430 | ✔ | ✖ | ✖ | msp430x5xx | | | +-----------------------------+--------+------+-----------+------------------------+--------------------+ | | MSP432E4, TM4C123 | ✔ | | ✖ | musb | | +--------------+-----------------------------+--------+------+-----------+------------------------+--------------------+ | ValentyUSB | eptri | ✔ | ✖ | ✖ | eptri | | +--------------+-----------------------------+--------+------+-----------+------------------------+--------------------+ | WCH | CH32F20x | ✔ | | ✔ | ch32_usbhs | | | +-----------------------------+--------+------+-----------+------------------------+--------------------+ | | CH32V20x | ✔ | | ✖ | stm32_fsdev/ch32_usbfs | | | +-----------------------------+--------+------+-----------+------------------------+--------------------+ | | CH32V305, CH32V307 | ✔ | | ✔ | ch32_usbfs/hs | | +--------------+-----------------------------+--------+------+-----------+------------------------+--------------------+ ## 表格图例 ========= ========================= ✔ 支持 ⚠ 部分支持 ✖ 硬件不支持 \[空\] 未知 ========= ========================= ## 开发工具 以下工具免费提供以支持 TinyUSB 项目的开发: - `IAR Build Tools (CX) `_ 用于嵌入式开发的专业 IDE 和编译器。 - `JetBrains CLion `_ 用于 C 和 C++ 开发的跨平台 IDE。 - `PVS-Studio `_ 用于 C、C++、C# 和 Java 代码的静态分析器。 .. |Build Status| image:: https://github.com/hathach/tinyusb/actions/workflows/build.yml/badge.svg :target: https://github.com/hathach/tinyusb/actions/workflows/build.yml .. |CircleCI Status| image:: https://dl.circleci.com/status-badge/img/circleci/4AYHvUhFxdnY4rA7LEsdqW/QmrpoL2AjGqetvFQNqtWyq/tree/master.svg?style=svg :target: https://dl.circleci.com/status-badge/redirect/circleci/4AYHvUhFxdnY4rA7LEsdqW/QmrpoL2AjGqetvFQNqtWyq/tree/master .. |Documentation Status| image:: https://readthedocs.org/projects/tinyusb/badge/?version=latest :target: https://docs.tinyusb.org/en/latest/?badge=latest .. |Static Analysis| image:: https://github.com/hathach/tinyusb/actions/workflows/static_analysis.yml/badge.svg :target: https://github.com/hathach/tinyusb/actions/workflows/static_analysis.yml .. |Fuzzing Status| image:: https://oss-fuzz-build-logs.storage.googleapis.com/badges/tinyusb.svg :target: https://oss-fuzz-build-logs.storage.googleapis.com/index.html#tinyusb .. |Membrowse| image:: https://membrowse.com/badge.svg :target: https://membrowse.com/public/hathach/tinyusb .. |License| image:: https://img.shields.io/badge/license-MIT-brightgreen.svg :target: https://opensource.org/licenses/MIT .. _Changelog: docs/info/changelog.rst .. _Contributors: CONTRIBUTORS.rst .. _Getting Started: docs/getting_started.rst .. _Supported Boards: docs/reference/boards.rst .. _Dependencies: docs/reference/dependencies.rst .. _Concurrency: docs/reference/concurrency.rst .. _Code of Conduct: CODE_OF_CONDUCT.rst .. _Porting: docs/porting.rst
标签:CDC, DNS解析, FreeRTOS, HID, MCU, MSC, RTOS, RT-Thread, TinyUSB, USB Device, USB Host, USB协议栈, 内存安全, 单片机编程, 固件库, 实时性能, 客户端加密, 客户端加密, 嵌入式开发, 嵌入式系统, 嵌入式软件, 开源硬件, 开源项目, 无动态分配, 物联网, 物联网开发, 硬件抽象层, 线程安全, 网络安全监控, 音频类, 驱动开发