USB-UART y USB-OTG
La placa de desarrollo se puede alimentar, y programar, de la misma manera que lo hace cualquier versión Pi Zero 2W, con dos puertos USB (USB-C en el caso de Orange Pi Zero 2W y Micro USB en el caso de Raspberry Pi Zero 2 W). En el diseño del ESP32-S3 Pi Zero 2 W se utilizan dos USB-C. Son más modernos y más versatiles. Están dispuestos a la misma distancia que los Micro USB de la Raspberry Pi Zero 2 W.


El estandar USB-C describe los conectores como reversibles y pueden existir con un número diferente de PINes, hasta 12+12. Dado que mécanicamente estamos usando dos puertos USB-C que funcionan como USB 2.0, solo necesitamos 4 pines (VBUS con GND y D- con D+) mas los pines CC1 y CC2 (Configuration Channel).
Los puertos están etiquetados como USB-OTG y USB-UART.
El situado a la izquierda (USB-OTG) es directo a los PINes USB_D- y USB_D+ en el ESP32-S3. El situado a la derecha, a través de un chip, CH343K, se puede utilizar como interfaz serie RS-232. Ambos son válidos para programar y alimentar el ESP32-S3 Pi Zero 2 W.
USB-OTG
El puerto USB-OTG es un interfaz USB Serial/JTAG nativo con capacidades OTG (On-The-Go). Esto permite disponer de un interfaz que permite que el ESP32-S3 cambie de rol según lo que necesites, bien sea, Host (Maestro) o Device (Esclavo).
Device (Esclavo)
Es el más común. Puedes conectar la placa al PC, y el ESP32-S3 se puede comportar como se desee:
- HID: Un teclado, un ratón o un gamepad.
- MSC: Una unidad de disco flash (puedes hacer que los 16MB de memoria interna aparezcan como un pendrive en tu PC).
- CDC: Un puerto serie de alta velocidad (más rápido que el CH343K).
- MIDI: Un instrumento musical digital.
Host (Maestro)
En este modo permite conectar periféricos USB al ESP32-S3 a través de cable adaptador OTG, algunos de estos podrían ser:
- Un teclado USB y leer lo que se escribe.
- Una cámara USB (UVC) y capturar imágenes.
- Un pendrive y leer/escribir archivos en él.
No será viable conectar todos los dispositivos USB de está manera, no al menos de una manera simple, generalmente por problemas de alimentación. El USB funciona a 5V y el ESP32-S3 funciona a 3.3V, este no puede alimentar un dispostivo conectado en el puerto USB-C OTG a 5V. Existen soluciones a este asunto pero no están implementadas específicamente en esta placa.
Para poner el ESP32-S3 en modo ROM Bootloader Mode (Download Mode o Boot Mode), el ordenador envía un comando especial a través del protocolo USB (cambiando la velocidad de baudios a 1200 bps, que es el estándar para forzar el ROM Bootloader Mode). El chip ESP32-S3 entra en modo programación en ese momento, y es posible subir el nuevo firmware al chip.
USB-UART
El puerto USB-UART es un interfaz RS-232 (U0RXD, U0TXD, RTS y CTS/DTR), a través de un chip CH343K que se puede utilizar para programar el ESP32-S3, con funciones de auto reseto para no tener que pulsar la secuencia RESET/BOOT en el ESP32-S3. También como consola serie para depurar el programa.
El interfaz USB-UART puede ser más lento que USB-OTG pero dado que en un reseteo inesperado del ESP32-S3 este interfaz no desaparece del PC puede resultar más conveniente utilizarlo.
Para poner el ESP32-S3 en modo ROM Bootloader Mode (Download Mode o Boot Mode) existen dos alternativas.
Download Mode manual
Se puede establecer el modo programación manualmente siguiendo este procedimiento:
- Se mantiene pulsado el botón BOOT, indicando al micro que se prepare para Boot Mode.
- Se pulsa el botón RESET una vez, forzando un reseteo que leerá el estado Boot Mode.
- Se puede soltar el botón BOOT.
- El micro debería estar en Boot Mode.
Download Mode Automático
El proceso para establecer el modo programación automáticamente, se basa en utilizar los PINes, DTR (Data Terminal Ready) y RTS (Request To Send) del puerto RS-232 que originalmente servían para controlar módems de una forma particular.
Cuando el software de programación (esptool) quiere subir el código, manipula estas líneas DTR/RTS de forma precisa y en orden, a través del puerto USB-UART y el chip CH343K. Usando dos transitores, es posible replicar los pasos que se realizan en el modo Download Mode manual. Un esquema de como están conectados DTR y RTS es el siguiente:

1 2 3 4 5 | (lib_symbols (symbol "Transistor_BJT:UMH3N" (pin_names (hide yes) ) |
En el proximo articulo veremos como son los esquemáticos de los puertos USB-OTG y USB-UART.