ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

ESP-IDF 如何配置 USB OTG CDC 串口控制台以省去 USB-UART 桥接芯片?

ESP-IDF 如何配置 USB OTG CDC 串口控制台以省去 USB-UART 桥接芯片? ESP-IDF 如何配置 USB OTG CDC 串口控制台以省去 USB-UART 桥接芯片【免费下载链接】esp-idfEspressif IoT Development Framework. Official development framework for Espressif SoCs.项目地址: https://gitcode.com/GitHub_Trending/es/esp-idf如果你使用的 ESP 芯片集成了 USB 外设就不需要像普通 UART 控制台那样外接 USB-UART 桥接芯片芯片 ROM 中自带一套 USB CDCCommunication Device Class实现可以直接把它当作双向串口控制台使用。配置完成后idf.py monitor可以直接监控串口日志esptool/idf.py flash可以直接通过 USB 烧录还支持通过dfu-util/idf.py dfu的 DFU 接口烧录。该功能由 ESP32-S2 和 ESP32-S3 的 ROM 提供CONFIG_ESP_CONSOLE_USB_CDC选项依赖SOC_USB_OTG_CONSOLE_SUPPORTED目前仅在这两颗芯片的 soc_caps.h 中定义为 1并且与 TinyUSB 栈不兼容——如果应用要使用 TinyUSB只能由 TinyUSB 自己提供 CDC 实现。完整说明见 USB OTG Console 文档。接线把 USB OTG 连到主机按文档给出的接法把芯片连到主机的 USB 口芯片 GPIOUSB 线20D绿色19D-白色GNDGND黑色—5V红色如果你的开发板已经为片内 USB 外设引出了一个 USB 接口则不需要额外接线。ESP32-S3 有一个重要前提默认情况下USB_SERIAL_JTAG模块占用了内部 PHYUSB OTG 外设必须连接外部 USB PHY才能使用因此 CDC 控制台在这种默认配置下无法通过内部 PHY 使用。可以通过烧写USB_PHY_SELeFuse 把内部 PHY 永久切换给 USB OTG 外设细节见 ESP32-S3 技术参考手册但注意这是不可逆操作而且 USB Serial/JTAG 本身也能提供 CDC 串口所以想要 CDC 控制台本身不足以作为切换的理由。更多对比见 USB Serial/JTAG Controller Console 文档。启用 CONFIG_ESP_CONSOLE_USB_CDC在idf.py menuconfig中按以下路径选择控制台通道ESP-STDIO └── Channel for console output ──▶ USB CDC即选中CONFIG_ESP_CONSOLE_USB_CDC。这个选项把 stdout/stderr 重定向到 CDC 口并且直接使用芯片 ROM 里的 CDC 驱动见 esp_stdio/Kconfig。菜单中该选项只有在不使用 TinyUSBdepends on SOC_USB_OTG_CONSOLE_SUPPORTED !TINY_USB时才可见。与 USB CDC 相关的两个可选配置默认值保持即可按需调整CONFIG_ESP_CONSOLE_USB_CDC_RX_BUF_SIZEUSB CDC 接收缓冲大小默认 64范围 416384。文档建议如果应用经常通过 USB CDC 接收数据就调大它。CONFIG_ESP_CONSOLE_USB_CDC_SUPPORT_ETS_PRINTF默认关闭。默认情况下使用 USB CDC 时esp_rom_printf和ESP_EARLY_LOG被禁用打开该选项可以让它们也走 USB CDC代价是 IRAM 占用增加关闭它可省约 1kB RAM且经 USB CDC 输出这类日志的成本明显高于 UART不太适合在printf 调试尤其是中断处理程序里大量使用。配置完成后按正常流程构建项目即可无需其他改动。首次烧录先通过某条通道把程序写进去USB CDC 控制台生效的前提是芯片里已经跑着启用了该选项的程序。如果目标芯片上还没有烧入这样的程序需要先做一次初始上传文档给出三条可选路径路径一主路径ROM 下载模式经 USB CDC 烧录让芯片进入下载模式按住 GPIO0 拉低的同时触发复位。很多开发板的 Boot 按钮就接在 GPIO0 上可以按住 Boot 再按 Reset。系统中会出现一个串行端口。Windows 8 及以上、Linux、macOS 一般无需安装驱动Linux 下用ls /dev/ttyACM*查看macOS 下用ls /dev/cu*查看Windows 下在设备管理器中查看。执行烧录PORT替换为第 2 步查到的端口名idf.py flash -p PORT路径二可选ROM 下载模式经 USB DFU 烧录同样按住 GPIO0 拉低并触发复位进入下载模式后执行idf.py dfu-flash路径三可选经 UART 烧录如果开发板上有 USB-UART 桥接芯片也可以直接通过桥接芯片提供的串口口烧录idf.py flash -p PORT其中PORT是桥接芯片对应的串口名。验证确认 CDC 串口出现并监控初始上传完成后应用启动系统中会出现一个 USB CDC 端口此时控制台即配置成功。注意两点初始上传后端口名可能会变运行idf.py monitor前重新查一次端口列表。之后就可以照常使用idf.py flash idf.py monitoridf.py monitor应能通过 CDC 口看到启动日志并且支持双向交互文档明确该控制台是双向的可用于 IDF Monitor 或其他串口监控工具。使用限制文档列出的限制都与USB CDC 由 ROM 中软件栈实现、比 UART 更脆弱这一事实相关配置前需要心里有数崩溃时的输出没有 UART 可靠如果 CDC 驱动使用的内存被破坏或存在其他系统级问题panic handler 的输出可能送不出去如果应用在进入 USB CDC 驱动启动之前就进了 boot loop则完全没有控制台输出。误改 USB 引脚后设备会消失如果应用不小心重配了 USB 外设引脚或禁用了 USB 外设USB CDC 设备会从系统中消失修好代码后需要重新走一遍上面的初始上传流程。休眠会让设备消失应用进入 Light-sleep包括自动 Light-sleep或 Deep-sleep 时USB CDC 设备都会从系统中消失。资源占用USB CDC 驱动会预留一部分 RAM 并增大应用代码体积做内存优化时要计入。TinyUSB 应用不可用该功能依赖 ROM 里的另一套 USB CDC 栈与 TinyUSB 的 USB 描述符和使用方式冲突开发中使用 USB 外设的阶段用 UART 控制台烧录和监控体验更好。JTAG 调试时可能断连CPU 停在断点时USB 外设中断得不到及时服务主机在几百毫秒到几秒取决于操作系统和驱动收不到有效响应后会判定设备断开。如果以上限制都能接受且目标芯片是 ESP32-S2 或 ESP32-S3那么按接线 → menuconfig 选 USB CDC → 首次烧录 → monitor 验证这条路径完成后USB-UART 桥接芯片就可以从你的开发硬件清单里去掉。【免费下载链接】esp-idfEspressif IoT Development Framework. Official development framework for Espressif SoCs.项目地址: https://gitcode.com/GitHub_Trending/es/esp-idf创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进