Repolode
hathach

hathach/tinyusb

面向嵌入式系统的开源跨平台 USB 主机与设备协议栈,支持 50 多种 MCU 系列。

Star
7,262
Fork
1,577
未关闭 Issue
417
最近提交
19小时前

这是什么?

TinyUSB 是一个用 C 语言编写的 USB 协议栈,同时支持设备端(Device)和主机端(Host),面向需要在小型单片机上实现 USB 连接的嵌入式开发者。协议栈不使用动态内存分配,所有缓冲区均为静态分配;中断处理被推迟到非中断上下文的任务函数中执行,便于与 RTOS 安全协同工作。

设备端支持 CDC 串口、HID(键盘、鼠标、游戏手柄等)、多 LUN 的大容量存储、MIDI、音频(UAC1/UAC2)、打印机、网络(RNDIS、ECM、NCM)以及 WebUSB 等类驱动。主机端支持 CDC-ACM、多种 USB 转串口芯片、HID、MSC、MIDI 和 Hub。开发者还可以通过回调接口编写自定义类驱动,无需修改协议栈本身。

仓库提供基于 make 和 CMake 的示例工程以及板级支持代码,并列出各 MCU 系列在设备、主机和高速模式下的支持情况。该项目可运行于裸机、FreeRTOS、RT-Thread 和 Mynewt 等环境。

核心功能

  • 01设备端与主机端协议栈位于同一代码库中,支持动态切换 USB 描述符。
  • 02全程静态内存分配,运行时不使用动态内存。
  • 03中断事件交由任务上下文处理,便于在 RTOS 下保证线程安全。
  • 04设备端支持 CDC、HID、MSC、MIDI、音频和网络等多种类驱动。
  • 05主机端支持 CDC-ACM、HID、MSC、MIDI 以及多级 Hub。
  • 06可移植到 50 多种 MCU 系列,支持裸机、FreeRTOS 和 RT-Thread。

适用场景

  • 为单片机产品增加 USB 串口或 CDC 通信端口。
  • 用小型 MCU 制作 USB 键盘、鼠标或游戏手柄。
  • 将 SD 卡或 Flash 存储以 U 盘形式提供给电脑使用。
  • 在嵌入式硬件上实现 USB MIDI 控制器或音频设备。

快速上手

  1. 1

    获取源码并阅读入门指南

  2. 2

    在 examples 目录中构建 cdc_msc 示例

  3. 3

    按照入门指南将 TinyUSB 添加到你的项目中

使用前须知

  • 面向嵌入式微控制器,不是适用于桌面或移动系统的通用 USB 库。
  • 不同 MCU 系列的支持程度不同,请查看支持的 CPU 表格以确认主机模式和高速支持情况。
  • Power Delivery 协议栈处于非常早期阶段,仅用于测试,且只支持 STM32 G4。

收录于专题

标签

#usb#embedded#microcontroller#usb-device#usb-host#rtos#firmware#midi#msc#tinyusb

常见问题

tinyusb 是什么?
面向嵌入式系统的开源跨平台 USB 主机与设备协议栈,支持 50 多种 MCU 系列。 TinyUSB 是一个用 C 语言编写的 USB 协议栈,同时支持设备端(Device)和主机端(Host),面向需要在小型单片机上实现 USB 连接的嵌入式开发者。协议栈不使用动态内存分配,所有缓冲区均为静态分配;中断处理被推迟到非中断上下文的任务函数中执行,便于与 RTOS 安全协同工作。
tinyusb 可以免费使用吗?用的什么许可证?
tinyusb 以 MIT 许可证开源。用于商业产品前,请先确认许可证条款。
tinyusb 还在维护吗?
活跃维护中。tinyusb 最近一次提交是在 2026年11月6日。
tinyusb 适合用来做什么?
为单片机产品增加 USB 串口或 CDC 通信端口。 用小型 MCU 制作 USB 键盘、鼠标或游戏手柄。 将 SD 卡或 Flash 存储以 U 盘形式提供给电脑使用。 在嵌入式硬件上实现 USB MIDI 控制器或音频设备。
tinyusb 怎么安装和运行?
获取源码并阅读入门指南 在 examples 目录中构建 cdc_msc 示例 按照入门指南将 TinyUSB 添加到你的项目中
在哪里获取 tinyusb?
源代码和安装说明在 GitHub 上:https://github.com/hathach/tinyusb

概要由 AI 根据项目 README 生成;GitHub 数据每日更新。

相关项目