在 ESP32-S3 启动时切换 USB 控制器

  • 作者及发布时间Drew于 2024 年 4 月 13 日发布,正在基于 ESP32-S3 MCU 构建数字合成器并打算开个开发博客,苦于不知首篇写啥,决定先聊 USB。
  • 合成器的连接考虑:合成器有硬件 MIDI,利用 ESP32-S3 的原生 USB 增加 USB-MIDI 支持,但该 USB 端口还用于编程和调试(且计划让用户能上传固件更新)。默认 ESP32-S3 USB 端口暴露CDC-ACM 设备,方便上传和调试,只需将内部 PHY 引脚的两根数据引脚(以及电源和地)连接到 USB 连接器即可直接上传。作者不想失去此功能,还想添加默认模式使合成器作为 USB-MIDI 设备出现。
  • 解决方法:遵循USB 堆栈文档USB-MIDI 示例,在app_main函数中有初始化和安装 TinyUSB 驱动的过程(tinyusb_driver_install),调用此函数可将内部 USB PHY 端口从 CDC-ACM 串行控制器切换到 TinyUSB 堆栈运行的 USB-OTG 控制器。最初尝试通过按“调试”按钮来条件性调用tinyusb_driver_install,但会导致电脑先将设备枚举为串行设备,再枚举为 USB-MIDI 设备,不太好。解决方案在技术参考手册中有详细说明,先烧录USB_PHY_SELeFuse 让 ROM 将内部 USB PHY 连接到 USB-OTG 控制器,然后可正常启动并调用tinyusb_driver_install作为 USB-MIDI 设备,或在启动时通过运行特定代码进入 USB 串行/JTAG 控制器模式。作者计划通过NVS变量保存模式以便轻松处于调试模式,未来计划允许用户在运行时切换两种模式,而非仅在启动时切换,且最终产品可能不会以“上传”模式暴露低级 USB 串行/JTAG 控制器,而是基于 DFU 模式实现实际的用户更新过程。
阅读 24
0 条评论