面向嵌入式设备的实时操作系统,符合 POSIX 标准,覆盖 8 位到 64 位微控制器。
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
获取源码并阅读入门指南
- 2
在 examples 目录中构建 cdc_msc 示例
- 3
按照入门指南将 TinyUSB 添加到你的项目中
使用前须知
- 面向嵌入式微控制器,不是适用于桌面或移动系统的通用 USB 库。
- 不同 MCU 系列的支持程度不同,请查看支持的 CPU 表格以确认主机模式和高速支持情况。
- Power Delivery 协议栈处于非常早期阶段,仅用于测试,且只支持 STM32 G4。
收录于专题
标签
常见问题
- 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 数据每日更新。
相关项目
面向资源受限设备与物联网场景的可扩展实时操作系统(RTOS),支持多种硬件架构。
面向微控制器等资源受限设备的精简 Python 3 实现,并提供硬件外设访问模块。
乐鑫官方的 ESP32 等 SoC 嵌入式开发框架,支持 Windows、Linux 和 macOS。
跨平台的嵌入式开发命令行工具与构建系统,涵盖库管理、多种开发板与框架、调试和单元测试。
一个用 Zig 语言构建嵌入式应用的工具箱,提供硬件抽象层与芯片、板级支持。