开始前适用开发板:ESP32-S3 Korvo · 开发框架:ESP-IDF
适用开发板:Korvo S3 · 工程
02.beginner.usb_cdc· targetesp32s3
学习时长:约 20 分钟 · 难度:★★☆☆☆
学习目标
完成本节后,你将能够:
- 理解 USB CDC(Communication Device Class)虚拟串口的概念
- 区分 USB CDC 虚拟串口与硬件 UART 串口的异同
- 掌握 ESP32-S3 USB 原生功能创建 CDC 设备的方法
- 了解 CDC 在数据传输、调试中的应用场景
1. 这个例子在干嘛
将 ESP32-S3 的 USB 口模拟成一个 虚拟串口(COM 口)。电脑无需额外驱动即可识别为 COM 端口,用串口助手收发数据。
生活类比:USB-TTL 转换器——把 USB 变成串口。但这次不需要额外芯片,ESP32 自己就能做。
┌──────────┐ USB D+/D- ┌──────────┐ 虚拟 COM ┌──────────────┐
│ ESP32-S3 │────────────→│ 电脑 │───────────→│ 串口助手 │
│ USB CDC │ CDC ACM │ 识别为 │ COM3 │ 115200 │
│ Device │ │ COM 口 │ │ 收发数据 │
└──────────┘ └──────────┘ └──────────────┘
USB CDC vs 硬件 UART
| 对比 | USB CDC 虚拟串口 | 硬件 UART |
|---|---|---|
| 物理接口 | USB | TX/RX 排针 |
| 需要转换芯片 | 不需要 | 需要 CH340/CP2102 |
| 速率 | USB Full Speed 12Mbps | 通常 115200~921600 bps |
| 免驱 | Windows/Mac/Linux 免驱 | 部分需装驱动 |
| 可与 HID 共存 | 可做复合设备 | 独立外设 |
2. 编译烧录
cd Korvo_Firmware\02.beginner.usb_cdc
idf.py set-target esp32s3
idf.py build flash monitor
用 USB 口(非 UART 口)连接电脑。
3. 使用步骤
- USB 连接电脑
- 设备管理器出现新 COM 口(如 COM3)
- 打开串口助手(如 SSCOM、Putty)
- 选择对应 COM 口,波特率任意(CDC 忽略波特率设置)
- 发送数据 → 板子收到 → 回显(Echo)
4. 运行现象
| 阶段 | 屏幕 | 串口助手 |
|---|---|---|
| 启动 | USB CDC Ready | 新 COM 口出现 |
| 发送 | — | 输入数据 |
| 回显 | RX: <数据> | 收到回显 |
5. 常见问题与排查
| 现象 | 可能原因 | 解决方案 |
|---|---|---|
| 无 COM 口 | 连错口 | 确认 USB 口(非 UART) |
| 无 COM 口 | Windows 驱动 | 通常免驱,重启电脑试试 |
| 收不到回显 | 串口助手配置 | 波特率无所谓但要选对 COM |
| 断开重连 | USB 枚举问题 | 重新插拔 |
6. 动手改造建议
- AT 命令解析:收到
AT+XXX格式 → 解析执行(如控制 GPIO、读取传感器) - CDC + HID 复合:同时提供虚拟串口 + HID 键盘
- 文件传输:通过 CDC 传输二进制文件到 SPIFFS
- 数据透传:CDC ↔ BLE SPP 双向桥接(有线转无线)
7. 知识延伸
- CDC ACM:Abstract Control Model,是 USB CDC 的一个子类,模拟传统 RS-232 串口
- USB 枚举过程:插入 → 获取设备描述符 → 获取配置 → 设置地址 → 加载类驱动
- TinyUSB vs CherryUSB:两个常用的 USB 协议栈。IDF 内置 TinyUSB,Korvo 部分例程用 CherryUSB
- USB OTG:ESP32-S3 支持 USB OTG,既可做 Device(本例)也可做 Host(如 USB 摄像头例程)
8. 下一步
| 方向 | 推荐例程 | 说明 |
|---|---|---|
| USB 键盘 | USB HID Keyboard | HID 设备 |
| USB 鼠标 | USB HID Mouse | 另一种 HID |
| BLE 串口 | BLE SPP | 无线透传 |
| P4C5 版 | P4C5 USB CDC | 同原理 |
酷世DIY · Kevincoooool