ESP32 系列 USB 外设综述:USB-OTG、USB-Serial-JTAG 与 PHY 架构及实战指南
2026/9/19 9:58:20 网站建设 项目流程

ESP32 系列 USB 外设综述:USB-OTG、USB-Serial-JTAG 与 PHY 架构及实战指南

【免费下载链接】esp-iot-solutionEspressif IoT Library. IoT Device Drivers, Documentations and Solutions.项目地址: https://gitcode.com/GitHub_Trending/es/esp-iot-solution

本文基于 esp-iot-solution 仓库的 USB 外设综述文档 及其同目录下的系列指南,系统梳理 ESP32-S2/S3/C3/C6/P4 等芯片内置的 USB 控制器、PHY、电气特性与各芯片支持矩阵,并结合仓库源码与示例给出固件下载、日志打印、Host/Device 开发、VBUS 检测等实战方法。读完本文,你将能够准确选型芯片、正确接线、配置 USB PHY 切换,并快速上手 USB Host 与 USB Device 应用开发。

一、USB 与 USB-IF 标准背景

USB(Universal Serial Bus)是一种通用的总线标准,用于连接主机(Host)和外设(Device)。USB 主机可以通过 USB 接口与 USB 设备连接,实现数据传输、电源供给等功能。

USB IF(USB Implementers Forum)是 USB 标准的制定者,它制定了包括 USB 1.1、USB 2.0、USB 3.0 等在内的 USB 标准,定义了 USB 接口的物理层、数据链路层、传输层、会话层、表示层等协议,以及 USB 设备类(Device Class)标准。常见的设备类包括:

  • HID(Human Interface Device,人机接口设备):键盘、鼠标等
  • MSC(Mass Storage Class,大容量存储设备):U 盘、读卡器等
  • CDC(Communication Device Class,通信设备):虚拟串口、Modem 等
  • Audio:USB 声卡、麦克风、扬声器
  • Video:USB 摄像头

乐鑫 ESP32-S2/S3/C3/P4 等芯片均已内置 USB-OTG 或 USB-Serial-JTAG 外设,支持各种各样的 USB 应用,包括 USB 多媒体类应用、USB 通信类应用、USB 存储类应用、USB 人机交互类应用等。

二、USB 电气属性

Type-A 接口的 USB 电气属性如下表所示:

PinNameCable colorDescription
1VBUSRed+5V
2D-WhiteData-(0 或 3.3V)
3D+GreenData+(0 或 3.3V)
4GNDBlackGround

两个关键的工程注意点:

  1. 自供电设备必须检测 VBUS:对于自供电设备,需要使用 1 个额外 IO 检测 VBUS 电压,用于检测设备是否拔出,从而实现热插拔。
  2. D- / D+ 接反不会损坏硬件,但主机将无法识别,因此 PCB 走线与连接器封装设计时需要格外核对这两根差分线。

三、USB 控制器家族:OTG Full-speed、OTG High-speed 与 USB-Serial-JTAG

3.1 USB-OTG Full-speed 控制器

USB OTG Full-speed 控制器是指同时具有 USB-OTG、USB Host 和 USB Device 模式的控制器,支持模式的协商和切换。它支持 Full-speed(12Mbps)和 Low-speed(1.5Mbps)两种速率,支持 USB 1.1 和 USB 2.0 协议。

ESP-IDF 从 v4.4 开始已经包含 USB Host 和 USB Device 协议栈和各种设备类驱动,支持用户二次开发。关于传输速率、内置功能与动态切换的详细说明,见 USB-OTG 外设介绍。

3.2 USB-OTG High-speed 控制器

USB OTG High-speed 控制器同样同时具有 USB-OTG、USB Host 和 USB Device 模式,支持模式的协商和切换。它支持 High-speed(480Mbps)、Full-speed(12Mbps)和 Low-speed(1.5Mbps)三种速率,支持 USB 2.0 协议。

需要留意版本演进:ESP-IDF 从 v5.5 开始,ESP32-P4 原本独立的 USB PHY 实现已合并至与 S2/S3 共用的 PHY 模块,统一驱动结构,简化维护。

3.3 USB-Serial-JTAG 控制器

USB-Serial-JTAG Controller是同时具有 USB Serial 和 USB JTAG 功能的专用 USB 控制器,支持通过 USB 接口下载固件、打印 log、CDC 传输和 JTAG 调试。与 USB-OTG 不同,它不支持修改 USB 功能、修改描述符等二次开发,即它不是一个可编程的通用 USB 控制器,而是面向调试与下载场景的固定功能外设。

3.4 USB Full-speed PHY

USB Full-speed PHY(也称 USB Full-speed Transceiver)用于 USB Controller 数字信号到 USB 总线信号电平的转换,提供总线驱动能力等。内部 USB Full-speed PHY 连接到外部固定 IO 引脚。PHY 的具体功能、内部/外部 PHY 的使用方式与 GPIO 对应关系,见 USB PHY/Transceiver 介绍。

四、ESP32-S/P/C 系列 USB 外设支持矩阵

下表汇总了 ESP32-S2/S3/C6/C3/C2/ESP32/ESP8266 各芯片对 USB 外设的支持情况(√:Supported;X:Not Supported):

USB OTG High-speedUSB OTG Full-speedUSB-Serial-JTAGFull-speed PHYHigh-speed PHY
ESP32-P4
ESP32-S3XX
ESP32-S2XXX
ESP32-C6XXX
ESP32-C3XXX
ESP32-C2XXXXX
ESP32XXXXX
ESP8266XXXXX

从矩阵可以得出清晰的选型结论:

  • 需要 USB Host / Device 二次开发(TinyUSB、USB Host Driver):选择 ESP32-S2、ESP32-S3 或 ESP32-P4;
  • 仅需调试下载(USB 串口 + JTAG):ESP32-C3、ESP32-C6 即可满足;
  • 需要最高 USB 性能(480Mbps High-speed):只有 ESP32-P4 支持。

五、各芯片 USB 功能逐代解析

5.1 ESP32-S2:USB OTG Full-speed + Full-speed PHY

ESP32-S2 内置USB OTG Full-speed ControllerUSB Full-speed PHY,内部结构如下:

ESP32-S2 没有 USB-Serial-JTAG 控制器,因此其调试下载完全依赖 USB-OTG 提供的 ROM CDC(见下文“USB OTG Console”)功能。

5.2 ESP32-C3:USB-Serial-JTAG + Full-speed PHY

ESP32-C3 内置USB-Serial-JTAG ControllerUSB Full-speed PHY,内部结构如下:

5.3 ESP32-S3:双控制器共享一个 PHY

ESP32-S3 内置两个 USB 控制器,分别是USB OTG Full-speed ControllerUSB-Serial-JTAG Controller,内置一个USB Full-speed PHY

关键点在于 PHY 的分配:内部 USB PHY 默认连接到USB-Serial-JTAG控制器,可通过烧写 eFuse 修改默认,或配置寄存器动态切换;也可以通过增加外部 PHY,同时启用两个控制器。内部 USB PHY 的切换详情,参考 USB PHY 切换。

5.4 ESP32-P4:三控制器 + 三 PHY

ESP32-P4 内置了三个 USB 控制器,分别是USB OTG High-speed ControllerUSB OTG Full-speed ControllerUSB-Serial-JTAG Controller,内置一个USB High-speed PHY与两个USB Full-speed PHY

默认情况下,FS_PHY1 连接到 USB 串行/JTAG 控制器,FS_PHY2 连接到 OTG_FS。用户可以通过EFUSE_USB_PHY_SEL更改连接关系:

  • 0:FS_PHY1 连接 USB 串行/JTAG 控制器,FS_PHY2 连接 OTG_FS;
  • 1:FS_PHY2 连接 USB 串行/JTAG 控制器,FS_PHY1 连接 OTG_FS。

六、USB-OTG 传输速率与传输类型

ESP32-S2/S3/P4 的 USB-OTGFull Speed总线传输速率为 12 Mbps,但由于 USB 传输存在校验和同步机制,实际有效传输速率低于 12 Mbps,具体数值与传输类型相关:

传输类型控制中断批量同步
适用场合设备初始化和管理鼠标和键盘打印机和批量存储流式音频和视频
支持低速
校验重传
保证传输速度
使用固定带宽有(10%)有(90%)有(90%)
减少延迟时间
传输的最大尺寸64 字节64 字节64 字节~512 字节
每毫秒传输包数量*1191
理论有效速率*64000 Bytes/s1216000 Bytes/s512000 Bytes/s

对于 ESP32-P4 USB-OTGHigh Speed,总线传输速率为 480 Mbps,与 Full Speed 相比,在传输的最大尺寸、每毫秒传输包数量与理论有效速率上有所不同:

传输类型控制中断批量同步
传输的最大尺寸64 字节1024 字节512 字节1024 字节
每微帧传输包数量*6137
理论有效速率*49152000 Bytes/s53248000 Bytes/s57344000 Bytes/s

补充说明:

  • 传输速率计算公式:传输速率 (Bytes/s) = 传输的最大尺寸 × 每微帧传输包数量 × 8000;
  • 控制传输用于传输设备控制信息,包含多个阶段,有效传输速率需要按照协议栈的实现来计算;
  • 若追求有效吞吐,批量传输(Bulk)是 Full-speed 下的最优选择;若追求低延迟、固定带宽,则应使用同步/中断传输。

七、USB-OTG 外设内置功能实战

7.1 使用 USB OTG Console 下载固件和打印 LOG

ESP32-S2/S3 等内置 USB-OTG 外设的芯片,ROM Code 中内置了 USB 通信设备类(CDC)功能,该功能可用于替代 UART 接口,实现 Log、Console 和固件下载功能。

由于 USB OTG Console 默认为关闭状态,首次下载固件需要按以下步骤操作:

  1. menuconfig中先使能 USB OTG Console 功能,然后编译固件;
  2. 手动将芯片的 Boot 控制引脚拉低,然后将芯片通过 USB 线连接到 PC,进入下载模式。PC 会发现新的串口设备——Windows 为COM*,Linux 为/dev/ttyACM*,MacOS 为/dev/cu*
  3. 使用 esptool 工具(或直接使用idf.py flash)配置设备对应的串口号下载固件。

初次下载完成以后,USB OTG Console 功能将自动使能:

  • 直接通过 USB 线连接 PC,PC 会发现新的串口设备,LOG 数据将从该虚拟串口打印;
  • 用户无需再手动拉低 Boot 控制引脚,使用 esptool(或idf.py flash)即可下载固件——下载期间,esptool 通过 USB 控制协议自动将设备 Reset 并切换到下载模式。

7.2 使用 USB OTG DFU 下载固件

ESP32-S2/S3/P4 等芯片的 ROM Code 中还内置了 USB DFU(Device Firmware Upgrade)功能,可实现标准的 DFU 下载模式:

  1. 使用 DFU 下载固件时,用户每次都需要手动进入下载模式:将芯片的 Boot 控制引脚拉低,然后通过 USB 线连接到 PC;
  2. 在工程目录下运行idf.py dfu生成 DFU 固件,然后使用idf.py dfu-flash下载固件;
  3. 如果存在多个 DFU 设备,使用idf.py dfu-list查看设备列表,再使用idf.py dfu-flash --path <path>指定下载端口。

警告:对于 ESP32-P4 v3.1 及以上的版本,DFU 下载功能存在缺陷,可能会导致 DFU 下载失败,建议使用 USB Serial/JTAG 下载方式进行固件下载。

7.3 使用 USB-OTG 外设进行 USB Host 开发

USB-OTG 外设支持 USB Host 功能,用户可以通过 USB 接口直接连接外部 USB 设备。ESP-IDF 从 v4.4 版本开始已支持 USB Host Driver,可在此基础上开发 USB Class Driver。此外乐鑫已官方支持 USB Host HID、USB Host MSC、USB Host CDC、USB Host UVC 等设备类驱动,可直接用于应用开发。

USB Host 方案详情见 USB Host 方案。

7.4 使用 USB-OTG 外设进行 USB Device 开发

USB-OTG 外设支持 USB Device 功能,乐鑫已官方适配 TinyUSB 协议栈,用户可以直接使用基于 TinyUSB 开源协议栈开发的 USB 标准设备或自定义设备,例如 HID、MSC、CDC、ECM、UAC 等。

USB Device 方案详情见 USB Device 方案。

7.5 动态切换 USB-OTG 外设模式

USB-OTG 外设支持动态切换模式,用户可以通过动态注册 USB Host Driver 或 USB Device Driver,实现 USB-OTG 外设的动态切换。仓库中提供了完整示例:examples/usb/otg/usb_host_device_mode_manual_switch,演示了 Host / Device 模式的手动切换流程。

7.6 主动断开与主机的连接

可以通过将 USB OTGVBUSVALID信号拉低,主动断开与主机的连接,实现 USB OTG 外设的断开。注意:如果需要重新挂载设备,需要至少等待 10ms。详细实现请参考 USB 自供电设备解决方案。

八、USB PHY 使用指南

USB PHY/Transceiver 的功能是将 USB 控制器的数字信号转换为 USB 总线信号电平,提供总线驱动能力、检测接收错误等。ESP32-S2/S3/P4 芯片已内置 USB PHY,用户可直接使用芯片指定的 USB D+/D- 与外部 USB 系统通信;ESP32-P4 还额外内置 USB High-Speed PHY。此外,ESP32-S2/S3 还保留了外部 PHY 的扩展接口。

8.1 使用内部 PHY:固定 GPIO 一览

ESP32-S2/S3/C3 内部集成了 USB PHY,无需外接 PHY 芯片即可直接与外部 USB 主机或设备通过 D+/D- 连接。但对于集成两个 USB 控制器的芯片(如 ESP32-S3 内置 USB-OTG 和 USB-Serial-JTAG),两者共用一个内部 PHY,同一时间只能有一个工作

内部 USB PHY 对应固定的 GPIO:

D+D-
ESP32-S22019
ESP32-S32019
ESP32-C31918
ESP32-C61312

对于 ESP32-P4,内部集成了两个 USB Full-speed PHY 与一个 USB High-speed PHY,GPIO 对应关系如下:

D+D-
ESP32-P4 FS_PHY12524
ESP32-P4 FS_PHY22726
ESP32-P4 HS_PHYpin 50pin 49

默认情况下,FS_PHY1 连接到 USB 串行/JTAG 控制器,FS_PHY2 连接到 OTG_FS,可通过EFUSE_USB_PHY_SEL更改连接关系。

8.2 使用外部 PHY(ESP32-S2/S3)

通过增加一个外部 PHY,可以实现 USB-OTG 和 USB-Serial-JTAG 两个外设同时工作。ESP32-S2/S3 支持 SP5301 或同等功能的 USB PHY,其典型电路图如下:

注意:使用外部 USB PHY 将占用至少 6 个 GPIO。

8.3 USB PHY 默认配置与修改方法

默认配置

  1. 对于同时具有 USB-OTG 和 USB-Serial-JTAG 两个外设的芯片,默认情况下 USB-Serial-JTAG 与内部 USB-PHY 连接,用户可直接通过 USB 接口进行下载或调试,无需额外配置;
  2. 如需使用 USB Host Driver 或 TinyUSB 协议栈开发 USB-OTG 应用,在协议栈初始化时,USB-PHY 连接会自动切换为 USB-OTG,用户不必再进行配置。在 USB-OTG 模式下,如需使用 USB-Serial-JTAG 的下载功能,需要手动 Boot 到下载模式。

修改默认配置的方法

  • 方法 1(寄存器切换):USB Host Driver 或 TinyUSB 协议栈内部通过配置 USB PHY 寄存器,将内部 USB-PHY 连接切换为 USB-OTG。相关 API 位于 ESP-IDF 的components/esp_hw_support/include/esp_private/usb_phy.h(该路径可在本地 ESP-IDF 安装目录中找到);
  • 方法 2(烧写 eFuse):烧写efuse_usb_phy_sel位为 1,将 USB-PHY 默认连接切换为 USB-OTG。注意:
    • 仅当需要在Boot 模式下使用 USB-OTG 功能时,才需要烧写此 eFuse 位。烧写完成后,芯片进入 Boot 模式后将使用 USB-OTG 提供的下载功能(例如 USB DFU);
    • 烧写 eFuse 为 1 后不可恢复为 0。当 USB-PHY 默认连接切换为 USB-OTG 后,USB-Serial-JTAG 功能将无法使用;
    • 风险提示:对于 DateCode 2219 生产的 ESP32-S3 模组和开发板(PW No. 早于 PW-2022-06-XXXX),由于EFUSE_DIS_USB_OTG_DOWNLOAD_MODE(BLK0 B19[7])已被烧录为 1(USB OTG 下载被禁用),如果再烧写efuse_usb_phy_sel为 1,将导致芯片进入 Boot 模式后,USB-Serial-JTAG 和 USB-OTG 下载功能均无法使用。

九、USB-Serial-JTAG 外设深入

集成了 USB-Serial-JTAG 外设的 ESP32 系列芯片(如 ESP32-S3、ESP32-C3、ESP32-P4)融合了 USB-to-serial 和 USB-to-JTAG 功能,提供与主机 PC 的直接 USB 连接,支持固件下载、基于 JTAG 的调试和系统控制台输出。详见 USB-Serial-JTAG 外设介绍。

9.1 驱动安装

  • Linux 和 MacOS 系统下,无需手动安装驱动;
  • Windows 10 及以上系统,联网将自动安装驱动;
  • Windows 7/8 系统,需要手动安装驱动(可使用 ESP-IDF Windows Installer 勾选 USB-Serial-JTAG 驱动安装)。若安装失败,可使用 Zadig 工具安装:
    • USB JTAG/serial debug unit (Interface 0)选择usbserUSB Serial (CDC)驱动;
    • USB JTAG/serial debug unit (Interface 2)选择WinUSB驱动。

外设接入 PC 后,设备管理器将新增两个设备(Interface 0 为串口、Interface 2 为 JTAG)。

9.2 下载固件

  • 默认情况下,USB-Serial-JTAG 下载功能处于使能状态,直接使用 USB 线连接 PC,再用 esptool(或idf.py flash)配置对应串口号即可下载固件。下载期间,esptool 通过 USB 控制协议自动将设备 Reset 并切换到下载模式;
  • 如果应用程序将 USB-Serial-JTAG 对应的 USB 引脚用作其它功能(如普通 GPIO 或其它外设 IO),USB-Serial-JTAG 将无法与 USB 主机建立连接,用户必须通过 Boot 控制引脚手动将设备切换到下载模式,再使用 esptool 下载固件;
  • 因此,硬件设计时应引出 Boot 控制引脚,避免应用程序占用 USB 引脚后无法自动进入下载模式;
  • 默认情况下,通过 USB 接口下载不同的芯片,COM 号会递增,可能对量产造成不便,可参考 阻止 Windows 依据 USB 设备序列号递增 COM 编号 解决。

9.3 JTAG 调试与系统 LOG

  • JTAG 调试:仅需 USB 线连接 PC,使用 OpenOCD 工具即可调试代码;
  • 打印系统 LOG:通过menuconfig → Component config → ESP System Settings → Channel for console secondary output配置 USB-Serial-JTAG LOG 功能的使能状态。使能后使用idf.py monitor或其它串口工具打开对应串口号即可打印系统 LOG。需要注意:
    • USB-Serial-JTAG仅在主机接入后才会打印 LOG,主机未接入时不会被初始化、不会打印 LOG;
    • USB-Serial-JTAG LOG 功能无法在睡眠模式(包括 deep sleep 和 light sleep)下使用,如需要在睡眠模式下打印 LOG,请使用 UART 接口。

9.4 将 USB 引脚用作普通 GPIO

USB D+ 接口默认上拉 USB 电阻,该电阻会导致 USB D+ 引脚常为高电平,因此用作 GPIO 时需将其禁用:

  • ESP-IDF v4.4 及以后版本的 GPIO 驱动默认会禁用 USB D+ 上拉电阻,使用 GPIO 驱动时无需额外配置;
  • 也可手动修改寄存器USB_SERIAL_JTAG.conf0.dp_pullup = 0;禁用上拉。

上电时序注意:USB D+ 引脚的上拉电阻在上电时刻即存在,软件禁用之前 D+ 已被拉高,因此 D+ 作为 GPIO 时初始阶段为高电平。如果应用需要上电后 D+ 立即为低电平,需要在硬件设计时将 D+ 引脚通过外部电路拉低。

若希望再次恢复 USB-Serial-JTAG 功能,可参考如下代码(重新配置 PHY 与 D+ 上下拉):

#include "soc/soc_caps.h" #include "soc/usb_serial_jtag_reg.h" #include "hal/usb_serial_jtag_ll.h" SET_PERI_REG_MASK(USB_SERIAL_JTAG_CONF0_REG, USB_SERIAL_JTAG_PAD_PULL_OVERRIDE); CLEAR_PERI_REG_MASK(USB_SERIAL_JTAG_CONF0_REG, USB_SERIAL_JTAG_DP_PULLUP); SET_PERI_REG_MASK(USB_SERIAL_JTAG_CONF0_REG, USB_SERIAL_JTAG_DP_PULLDOWN); vTaskDelay(pdMS_TO_TICKS(10)); #if USB_SERIAL_JTAG_LL_EXT_PHY_SUPPORTED usb_serial_jtag_ll_phy_enable_external(false); // Use internal PHY usb_serial_jtag_ll_phy_enable_pad(true); // Enable USB PHY pads #else usb_serial_jtag_ll_phy_set_defaults(); // External PHY not supported. Set default values. #endif CLEAR_PERI_REG_MASK(USB_SERIAL_JTAG_CONF0_REG, USB_SERIAL_JTAG_DP_PULLDOWN); SET_PERI_REG_MASK(USB_SERIAL_JTAG_CONF0_REG, USB_SERIAL_JTAG_DP_PULLUP); CLEAR_PERI_REG_MASK(USB_SERIAL_JTAG_CONF0_REG, USB_SERIAL_JTAG_PAD_PULL_OVERRIDE);

十、自供电设备的 VBUS 检测

按照 USB 协议要求,USB 自供电设备必须通过检测 5V VBUS 电压来判断设备是否拔出,进而实现热插拔。对于主机供电设备,由于主机 VBUS 断电后设备直接掉电关机,无需实现该逻辑。

由于 ESP32-S2/S3/P4 内部 USB PHY 不支持硬件检测逻辑,该功能需要借助 ADC/GPIO 由软件实现,其中使用 GPIO 检测最为简便。实现方法见 USB 自供电设备解决方案,要点如下:

  • 硬件上需要额外占用一个 IO(任意指定,特殊引脚除外),通过两个电阻分压(例如两个 100KΩ)与芯片相连(ESP32-S2/S3 IO 最大可输入电压为 3.3V);
  • ESP-IDF 4.4 及更早版本:在tinyusb_driver_install之后调用usbd_vbus_detect_gpio_enable函数使能 VBUS 检测,该函数将 VBUS 检测 GPIO 分别连接到USB_OTG_VBUSVALID_IN_IDXUSB_SRP_BVALID_IN_IDXUSB_SRP_SESSEND_IN_IDX三个内部信号;
  • ESP-IDF 5.0 及以上版本:将检测 IO 初始化为 GPIO 输入模式,然后直接配置到tinyusb_config_t中:
#define VBUS_MONITORING_GPIO_NUM GPIO_NUM_4 const tinyusb_config_t tusb_cfg = { .device_descriptor = &descriptor_config, .string_descriptor = string_desc_arr, .string_descriptor_count = sizeof(string_desc_arr) / sizeof(string_desc_arr[0]), .external_phy = false, .configuration_descriptor = desc_configuration, .self_powered = true, .vbus_monitor_io = VBUS_MONITORING_GPIO_NUM, }; ESP_ERROR_CHECK(tinyusb_driver_install(&tusb_cfg));

若使用原生 TinyUSB 开发,则需要在 Phy 初始化阶段进行配置:

const usb_phy_otg_io_conf_t otg_io_conf = USB_PHY_SELF_POWERED_DEVICE(VBUS_MONITORING_GPIO_NUM); phy_conf.otg_io_conf = &otg_io_conf; usb_new_phy(&phy_conf, &s_phy_hdl);

十一、基于 USB-OTG 的 Host / Device 解决方案

11.1 USB Host 方案概览

ESP32-S2/S3/P4 等芯片基于 ESP-IDF 的 USB 主机协议栈和各种主机类驱动,可连接多种 USB 设备,仓库文档 USB Host 方案 总结了以下成熟方案:

  • ESP USB Camera 视频方案:连接摄像头模组实现 MJPEG 视频流,最高支持 480×800@15fps(Full-Speed,ESP32-S2/S3)与 1080×1920@60fps(High-Speed,ESP32-P4),适用于猫眼门铃、智能门锁、内窥镜、倒车影像等场景。对应示例:usb/host/usb_camera_mic_spk(USB 摄像头 + WiFi 图传)、usb/host/usb_camera_lcd_display(USB 摄像头 + LCD 本地刷屏);ESP32-P4 请使用usb_host_uvc组件,支持 MJPEG、YUY2、H264 与 H265 格式;
  • ESP USB Audio 音频方案:连接 USB 音频设备实现 PCM 音频流,支持多路 48KHz 16bit 扬声器和麦克风、音量与静音控制、动态修改采样率,可与 USB Camera 同时工作,适用于音频播放器、门铃对讲等场景。对应示例:usb/host/usb_audio_player(MP3 音乐播放器 + USB 耳机);
  • ESP USB 4G 联网方案:连接 4G Cat.1/Cat.4 模组,实现 PPP 拨号上网,支持 4G 转 Wi-Fi 热点、NAPT、电源管理、网络自动恢复、卡检测与信号质量检测,适用于物联网网关、MiFi、智慧储能等场景。对应示例:usb/host/usb_cdc_4g_moduleusb/host/usb_rndis_4g_moduleusb/host/usb_ecm_4g_module
  • ESP USB 存储方案:连接标准 U 盘(兼容 USB3.1/3.0/2.0),挂载到 FatFS 文件系统,默认支持最大 32G,支持热插拔、Fat32/exFat 格式、U 盘 OTA,适用于广告灯牌、考勤机、记录仪等场景。U 盘 OTA 组件见components/usb/esp_msc_ota
  • ESP USB Hub 方案:通过 USB Hub 连接多个 USB 设备,实现多设备协同工作(如双摄像头采集、音视频同步处理)。对应示例:usb/host/usb_hub_dual_camera

11.2 USB Device 方案概览

结合 TinyUSB 协议栈和设备类驱动,USB Device 方案 总结了以下成熟方案:

  • USB 音频设备方案(UAC 2.0):作为麦克风或扬声器接入 PC,支持多种音频格式和采样率,芯片支持 ESP32-S2/S3/P4;
  • USB 视频设备方案(UVC 1.5):作为虚拟摄像头设备,支持同步和批量两种传输模式,可应用于 USB 门铃摄像头、USB + Wi-Fi 双模网络摄像头。对应示例:examples/usb/device/usb_webcam
  • USB 存储设备方案(MSC):结合 Wi-Fi 构建无线共享存储设备(USB 无线 U 盘、读卡器等),支持 USB - Wi-Fi 双向访问、多设备接入、模拟 U 盘。对应示例:examples/usb/device/usb_msc_wireless_disk
  • USB HID 设备方案(HID):作为键盘、鼠标、游戏手柄等设备,支持自定义 HID 设备、USB HID 与 BLE HID 双模。对应示例:examples/usb/device/usb_hid_deviceexamples/usb/device/usb_surface_dialexamples/keyboard(客制化键盘);
  • U 盘拖拽升级(esp-tinyuf2):基于 esp-tinyuf2 将设备模拟为虚拟 U 盘,支持拖拽 UF2 固件实现 OTA,并可将 NVS 数据映射为 U 盘文件以便修改。对应示例:examples/usb/device/usb_uf2_otaexamples/usb/device/usb_uf2_nvs
  • USB 扩展屏方案:通过 USB 总线将设备作为扩展副屏,一根 USB 线同时传输音频、触摸信息与视频图像,可应用在电脑屏幕、签字屏等场景。上位机侧采用 Windows IDD(Indirect Display Driver)驱动获取桌面图像,USB 速率受限时驱动会先将图像压缩为 JPEG 等格式,再通过 USB vendor 接口传输,每一帧图像带 16 字节头(宽高、格式、长度、压缩类型等)。对应示例:examples/usb/device/usb_extend_screen

十二、USB VID / PID 与认证

VID 和 PID 是 USB 设备的唯一标识符,一般由 USB-IF 分配,详细说明见 USB VID 和 PID。

免申请 VID/PID 的情况

  • 产品使用 USB Host 模式,无需申请 VID 和 PID;
  • 产品使用 USB Device 模式、使用乐鑫的 VID(0x303A)、并基于 TinyUSB 协议栈开发 USB 标准设备,则无需申请 PID,使用 TinyUSB 默认 PID 即可。

需要申请时

  • 使用 USB-IF 分配的 VID:需注册成为 USB-IF 成员,再按 USB-IF 流程申请 VID 和 PID;
  • 使用乐鑫的 VID:可直接申请 PID(免费)。

注意:使用乐鑫的 VID 和 TinyUSB 的默认 PID,并不代表产品符合 USB 规范,仍需要进行 USB 认证。USB 认证由 USB-IF 管理,是可选过程,但在产品标榜符合 USB 规范并使用官方 USB 标志、或宣传资料中提及 USB 认证时,必须进行认证。此外,USB 信号指令测试的详细步骤与固件请参考 USB 信号质量测试。

十三、USB Type-C 硬件设计要点

针对新一代产品的 USB 接口设计,USB Type-C 硬件设计指南 提供了完整参考,核心要点如下:

引脚与连接器:Type-C 的 USB 2.0 信号在 A6/B6(D+)与 A7/B7(D-);CC1/CC2 用于插拔检测、供电协议信息传输与 Vconn 功能;SBU1/SBU2 仅分配给备用模式使用。连接器有 24Pin(全功能)、16Pin/12Pin(USB 2.0)、6Pin(仅电源)等配置,可按应用需求选择。

角色识别与供电:Type-C 接口的供电角色通过 CC 线检测——供电方加 Rp 上拉,耗电方加 Rd 下拉(通常 5.1KΩ)。不使用 USB PD 时最高支持 5V/3A(15W),Rp 阻值决定载流能力:默认功率 56KΩ(5V 驱动)/ 36KΩ(3.3V 驱动)、1.5A 用 22KΩ/12KΩ、3A 用 10KΩ/4.7KΩ。若功率需求超过 15W、需要 DisplayPort 等替代功能或电源/数据角色不匹配,则需要 USB PD 控制器。

PD 协商:USB PD 通过 CC 线上的 BMC 信号(300kbps±10%)协商电压电流,流程为 Source_Capabilities → Request → Accept/Reject → PS_Rdy。当前 ESP32 系列芯片无法解析 USB PD 协议,需采用外置 PD 控制器(如 IP2721)实现特定电压请求。

USB 2.0 差分线:Type-C 有两组 D+/D-(A6/A7 与 B6/B7),为保证任意插入方向正常传输,需将 A6 与 B6 连在一起作为 D+,A7 与 B7 连在一起作为 D-。SuperSpeed 差分线(TX/RX 对)因当前 ESP32 系列不支持 USB 3.x,建议悬空不连接。

Device/Host 设计:Device 方案中 CC1/CC2 以 5.1KΩ 下拉;Host 与 DRP 方案选用 TI TUSB320LA 等 CC 逻辑与端口控制器,通过 I2C 配置在 DFP/UFP/DRP 角色间切换。量产产品必须考虑过流与过温保护,可选用带可调电流限制阈值的 USB 端口电源开关芯片来简化 Host VBUS 设计。

十四、总结与进一步阅读

ESP32 系列芯片通过 USB-OTG(Full-speed / High-speed)、USB-Serial-JTAG 与内置 PHY 的组合,覆盖了从低成本调试下载(C3/C6)到高性能 USB Host/Device 应用(S2/S3/P4)的完整需求。选型时先依据上文的支持矩阵确定所需控制器类型,再根据 D+/D- 固定 GPIO 设计硬件,并留意 S3 双控制器共用 PHY 与 P4 的 eFuse 切换关系。软件开发层面,USB Host 走 ESP-IDF USB Host Driver + 官方类驱动,USB Device 走 TinyUSB 协议栈,均可参考本文所述方案与仓库示例快速落地。

本系列还包含以下可继续深入阅读的文档(均位于docs/zh_CN/usb/usb_overview/):

  • USB-OTG 外设介绍:传输类型与速率、OTG Console/DFU 下载、Host/Device 开发
  • USB PHY/Transceiver 介绍:内部/外部 PHY、GPIO 对应、eFuse 切换
  • USB-Serial-JTAG 外设介绍:驱动安装、固件下载、JTAG 调试、LOG、GPIO 复用
  • USB 自供电设备解决方案:VBUS 检测与热插拔实现
  • USB Host 方案 与 USB Device 方案:Camera/Audio/4G/存储/HID/U 盘 OTA 等应用
  • USB Type-C 硬件设计指南:Type-C 引脚、角色识别、PD 协商与参考设计
  • USB VID 和 PID:VID/PID 申请与 USB 认证

【免费下载链接】esp-iot-solutionEspressif IoT Library. IoT Device Drivers, Documentations and Solutions.项目地址: https://gitcode.com/GitHub_Trending/es/esp-iot-solution

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询