教程:基于RT-Thread运行时切换设备/主机并动态挂载U盘)
TeenyUSB双角色设备(DRD)教程基于RT-Thread运行时切换设备/主机并动态挂载U盘【免费下载链接】TeenyUSBLightweight USB device and host stack for STM32 and other MCUs. Ready for USB 3.0 device.项目地址: https://gitcode.com/gh_mirrors/te/TeenyUSBTeenyUSB 是一个面向 STM32 等单片机的轻量级 USB 设备与主机协议栈支持 USB 2.0 全速主机/设备以及 USB 3.0 超速设备。本教程演示如何在同一颗 MCU 上基于 RT-Thread 实现USB 双角色设备DRD运行时在设备模式与主机模式之间自由切换并在主机模式下动态挂载 U盘、读写文件全程无需重新烧录或重启。1️⃣ 什么是 USB 双角色设备DRD普通单片机的 USB 口通常只能二选一设备模式插到 PC 上表现为 U盘、虚拟串口、HID 等主机模式连接外设读取 U盘、键盘、鼠标等而 DRDDual Role Device方案让同一套 USB 硬件随时换身份插电脑时它是设备插上 U盘时它变主机切换时机完全由你的程序决定。TeenyUSB 原生提供两套完整 API无需额外移植设备栈HID、MSCU盘、CDC 虚拟串口、RNDIS 虚拟网卡、WinUSB核心实现在class/tusbd.c主机栈HUB 多设备级联、HID 键鼠、MSC U盘BOT 协议、CDC核心实现在class/tusbh.c两者统一入口是core/teeny_usb.h同一份核心代码既可tusb_open_device()开设备也可tusb_open_host()开主机——这正是 DRD 能力的架构基础。2️⃣ 运行时角色切换RT-Thread 是切换引擎角色切换逻辑是 DRD 例程的核心。项目中的板级配置如sample/boards/stm32f723e_disco/board_config.h直接#include rtthread.h说明示例工程构建在 RT-Thread 实时系统之上用 RT-Thread 线程把设备处理与主机处理分离各自独立调度角色切换由事件触发按键、串口命令或总线事件先关闭当前角色再打开另一角色U盘的动态挂载、卸载则由主机线程通过 MSC 驱动 FatFs 自动完成 关键理解TeenyUSB 驱动全部是中断驱动、无长阻塞的所以切换成本极低典型流程只有几行// 从设备模式切换到主机模式 tusb_close_device(g_dev); tusbh_init(g_host, g_root); tusb_open_host(g_host, TUSB_DEFAULT_DEV_PARAM);官方在 readme 中列出的 RT-Thread 双角色例程正是围绕这两点展开支持运行时切换设备角色、支持动态 mount U盘。3️⃣ 动态挂载 U盘主机模式 MSC FatFs 工作流切换到主机模式后挂载 U盘的完整流程如下初始化主机tusbh_init()tusb_open_host()并给根 Hub 上电可参考主机示例sample/host/simple_host.c枚举设备U盘插入时根 Hub 上报连接事件MSC 类驱动自动完成枚举与识别挂载文件系统基于 FatFs源码位于third_part/fatfs/初始化并挂载 U盘正常读写之后即可用标准文件接口读写拔出 U盘时触发卸载回调协议栈自动处理异常4️⃣ 设备模式如何把自己描述成 U盘/串口给 PC切回设备模式后MCU 通过 USB 描述符向 PC自我介绍。描述符无需手写——项目自带TeenyDTTeenyDT/目录基于 Lua 的描述符生成工具在图形界面里配置设备名称、接口类型HID / CDC / MSC / WinUSB即可一键生成 C 代码。生成的teeny_usb_desc.c/h放入示例工程可参考sample/composite/的组织方式再配合class/tusbd_msc.c等类驱动MCU 就会被 PC 识别为 U盘或复合设备。5️⃣ 快速上手环境搭建与编译步骤⚙️一键编译指南安装交叉编译工具链arm-none-eabi-gcc克隆仓库并更新子模块MCU 驱动库git clone https://gitcode.com/gh_mirrors/te/TeenyUSB cd TeenyUSB git submodule update --init cd sample make all -j8编译产物可直接烧录到官方验证过的开发板STM32F072 / F103 / F107 / F303 / F407 / F723 / F767 / H743以及支持 USB 3.0 的 CH565WOTG_SS各板支持代码集中在sample/boards/目录 资源提示主机协议栈比纯设备模式占用更多 RAM主机示例约 28KB text 28KB bss小内存型号建议先跑设备模式熟悉 API 后再上主机模式。6️⃣ 进阶扩展复合设备、虚拟网卡与 USB 3.0掌握 DRD 基础流程后推荐按以下路线扩展复合设备一根 USB 连接同时提供 HID CDC WinUSB MSC 多个接口参考sample/composite/composite_device.cRNDIS 虚拟网卡让 MCU 直接当网卡使用示例在sample/rndis/USB 3.0 超速设备基于 CH565W 平台参考sample/winusb30/与driver_ch56x/驱动PC 端联调仓库附带 Windows 测试程序pc_test_tool/可在 PC 上模拟 CDC/HID/WinUSB 对端设备做联调小结TeenyUSB 用一套轻量协议栈同时覆盖了设备与主机两个世界配合 RT-Thread 的事件驱动机制DRD 角色切换与 U盘动态挂载的实现非常直观。建议从sample/host/主机示例入手跑通枚举流程再结合 RT-Thread 例程加入切换逻辑即可得到一台随插随用的双角色 USB 设备。【免费下载链接】TeenyUSBLightweight USB device and host stack for STM32 and other MCUs. Ready for USB 3.0 device.项目地址: https://gitcode.com/gh_mirrors/te/TeenyUSB创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考