🛠 Dompter le double USB : Serial/JTAG et OTG de front

ESP32-S3 · avance · Schéma : IMG-esp32-s3-avance-3-esp32-s3-dual-usb-jtag-cdc.svg — Carte ESP32-S3 avec deux connecteurs USB : l'un relié au périphérique USB-Serial/JTAG, l'autre au contrôleur OTG GPIO19/GPIO20, l'IDE affichant console série et débogage GDB simultanés.

Objetivos

Aprovechar la particularidad única del ESP32-S3: dos personalidades USB simultáneas. Por un lado, el dispositivo USB-Serial/JTAG (consola serie + depuración de hardware sin puente externo); por otro, el controlador USB-OTG (dispositivo HID/MSC/CDC o host). En las tarjetas que conectan ambos controladores a dos conectores distintos (algunas DevKitC-1, ESP32-S3-Box), se puede flashear y depurar por un puerto mientras se emula un teclado en el otro. Configurarás el modo Hardware CDC+JTAG, iniciarás una sesión de depuración y comprenderás el enrutamiento de los pines.

Material

Código completo

// Mode "Hardware CDC and JTAG" : console + debug sur le port Serial/JTAG,
// le port OTG (GPIO19/20) reste libre pour un peripherique TinyUSB.
// Outils Arduino : USB CDC On Boot = Enabled,
//                  USB Mode = "Hardware CDC and JTAG"
#include "Arduino.h"

// Point d'arret logiciel : si un debogueur JTAG est attache, il s'y connecte ;
// sinon la boucle courte evite toute surprise côté watchdog.
volatile int drapeau_debug = 0;

void setup {
  Serial.begin(115200);            // passe par USB-Serial/JTAG (pas GPIO43/44)
  Serial.println("Boot sur USB-Serial/JTAG");
}

void loop {
  static uint32_t n = 0;
  if (drapeau_debug) {             // breakpoint logiciel : pause pour GDB
    while (drapeau_debug) { asm volatile("nop"); delay(1); }
  }
  if (++n % 50 == 0) Serial.printf("tick %u, heap %u\n", n, ESP.getFreeHeap);
  delay(20);
}

En el lado de ESP-IDF, la consola JTAG se activa mediante idf.py menuconfig → Component config → ESP System → «Channel for console output» → «USB Serial/JTAG», y la depuración mediante idf.py openocd seguido de idf.py gdb (o la configuración de lanzamiento de VS Code «OpenOCD GDB Server»).

Verificación esperada

Conectada al puerto Serial/JTAG, la tarjeta presenta un puerto serie sin ningún chip puente; la consola funciona a la velocidad del enlace USB. En modo de depuración (ESP-IDF), GDB se conecta mediante el mismo cable: puntos de interrupción, ejecución paso a paso y lectura de memoria sin JTAG externo. En una tarjeta con dos conectores, el segundo puerto sigue disponible para un dispositivo TinyUSB: los dos mundos coexisten realmente.

Errores frecuentes

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales