Interfaces MCU

Circuito de reinicio automático y arranque del ESP32 (DTR/RTS)

El circuito de dos transistores de las placas de desarrollo de Espressif con el que esptool, Arduino IDE y PlatformIO reinician un ESP32 y arrancan su bootloader serie a través de las líneas DTR y RTS de un puente USB-UART, sin pulsar botones.

Nivel lógico de funcionamiento
3,3 V (VDD33 en la DevKitC V4)
Componentes
8
Fórmulas
3
Trampas
4
Abrir en Web CAD
Fuente verificada

Mesa de trabajo del esquema

ESP32 Auto-Reset and Boot CircuitExported from CircuitBaseR110kΩR210kΩQ12N3904Q22N3904R310kΩC11µFSW2ENSW1BOOTDTRRTS+3.3VGNDGNDENGNDIO0

Resumen del circuito

Nivel lógico de funcionamiento
3,3 V (VDD33 en la DevKitC V4)
Componentes
8
Fórmulas
3
Trampas
4

Haz clic en cualquier componente del esquema para ver sus especificaciones eléctricas y función.

Resumen del circuito

Es el bloque «auto program» del esquema de la Espressif ESP32-DevKitC V4, redibujado con su red de retardo en EN y los botones BOOT y EN. El ESP32 arranca su bootloader serie si IO0 está a nivel bajo en el momento en que sale del reinicio. Un puente USB-UART, como el CP2102N de la DevKitC o un CH340G, tiene dos salidas de control de módem libres, DTR y RTS, y las herramientas de grabación de firmware las conmutan para controlar EN e IO0. Los dos transistores NPN están acoplados en cruz, de modo que cada uno conduce solo cuando sus dos líneas de control difieren: si DTR y RTS están ambas a nivel alto o ambas a nivel bajo no ocurre nada, así que un programa de terminal que activa las dos líneas a la vez no reinicia el chip. La placa de referencia usa transistores SS8050; el 2N3904 de uso general dibujado aquí hace el mismo trabajo con estas corrientes. La resistencia de pull-up y el condensador de EN siguen los 10 kΩ y 1 µF que recomienda Espressif; la DevKitC V4 monta 0,1 µF. GPIO0 tiene un pull-up interno débil, por lo que el circuito no necesita resistencia en IO0.

Especificaciones técnicas clave

Nivel lógico de funcionamiento3,3 V (VDD33 en la DevKitC V4)
Tabla de verdad del control (niveles de pin)DTR 1, RTS 0 → EN 0; DTR 0, RTS 1 → IO0 0; niveles iguales → EN 1, IO0 1 (esquema de la DevKitC V4)
Condición de reinicioCHIP_PU por debajo de 0,6 V durante al menos 50 µs (Espressif Hardware Design Guidelines)
Red de retardo de EN10 kΩ y 1 µF recomendados por Espressif, τ = 10 ms (calculado); la DevKitC V4 monta 0,1 µF
Condición de arranque del bootloaderIO0 a nivel bajo al salir del reinicio; GPIO2 a nivel bajo o sin conectar (documentación de esptool)
TransistoresSS8050 en la DevKitC V4; aquí se dibuja el 2N3904
Corriente de base≈ 0,26 mA por transistor con resistencias de base de 10 kΩ (calculado, suponiendo VBE ≈ 0,7 V)

Principio de funcionamiento y análisis teórico

01

DTR y RTS desde el puente USB-UART

DTR y RTS son salidas activas a nivel bajo: cuando el software activa una línea, el pin pasa a 0 V; cuando la libera, vuelve a 3,3 V. Todo lo que sigue se describe en niveles de pin, como en la tabla de verdad impresa en el esquema de la DevKitC V4.

02

Transistores acoplados en cruz

Q1 tiene la base en DTR a través de R1 y el emisor en RTS; su colector tira de EN. Q2 es su imagen especular: base en RTS a través de R2, emisor en DTR y colector en IO0. Un transistor conduce solo cuando el lado de su base está a nivel alto y el de su emisor a nivel bajo:

DTR = 1, RTS = 1: ambos transistores en corte, EN = 1, IO0 = 1.

DTR = 0, RTS = 0: ambos transistores en corte, EN = 1, IO0 = 1.

DTR = 1, RTS = 0: Q1 conduce, EN = 0 (chip en reinicio), IO0 = 1.

DTR = 0, RTS = 1: Q2 conduce, EN = 1, IO0 = 0.

Como los niveles iguales no conmutan nada, abrir un puerto que activa las dos líneas a la vez no reinicia el chip. Cuando un transistor está en corte con el emisor a nivel alto y la base a nivel bajo, su unión base-emisor queda polarizada en inversa con 3,3 V, muy por debajo de la V(BR)EBO mínima de 6 V del 2N3904.

03

Reinicio

Primero esptool pone DTR = 1, RTS = 0. Q1 se satura, lleva EN a masa y descarga C1. El ESP32 se reinicia cuando CHIP_PU permanece por debajo de 0,6 V durante al menos 50 µs; esptool mantiene este estado 100 ms. Con R1 = 10 kΩ la corriente de base de Q1 es aproximadamente:

FORMULA & CALCULATION
IB = (VDTR - VBE) / (R1) ≈ (3.3 V - 0.7 V) / (10 kΩ) = 0.26 mA

lo que satura el transistor frente a los 0,33 mA que aporta R3.

04

Salida del reinicio con IO0 a nivel bajo

Después esptool pone DTR = 0 y RTS = 1 en dos llamadas seguidas. Entre ellas ambas líneas quedan brevemente a nivel bajo y ambos transistores en corte; C1 ralentiza la subida de EN durante esa pausa, así que el chip sigue en reinicio cuando Q2 conduce y lleva IO0 a nivel bajo. Luego EN sube a través de R3 cargando C1:

FORMULA & CALCULATION
\tau = R3 × C1 = 10 kΩ × 1\,µF = 10 ms

Al salir del reinicio, el chip lee sus pines de strapping. Al encontrar IO0 a nivel bajo, arranca el bootloader serie en lugar del programa de la flash. Para que el bootloader arranque, GPIO2 también debe estar a nivel bajo o sin conectar.

05

Vuelta al reposo

Pasados 50 ms esptool libera DTR, de modo que ambas líneas quedan a nivel alto, ambos transistores en corte e IO0 vuelve a nivel alto mediante su pull-up interno. El bootloader sigue en marcha y la carga continúa por TXD0 y RXD0. Para ejecutar el firmware nuevo, esptool da un pulso solo en RTS (DTR = 1, RTS = 0): un reinicio por hardware normal con IO0 a nivel alto.

Ecuaciones y fórmulas de cálculo de diseño

Constante de tiempo del retardo de EN

τ = R3 · C1

Constante de tiempo de la subida de EN después de que Q1 o SW2 lo liberen.

SímboloParámetroValor típico
R3Resistencia de pull-up de EN10kΩ
C1Condensador de retardo de EN1µF
τConstante de tiempo (calculada)10ms

Tensión de EN durante la liberación

VEN(t) = VDD(1 − e − t/τ)

EN alcanza el 63% de la alimentación tras una constante de tiempo y cerca del 99% tras cinco (50 ms con los valores dibujados).

SímboloParámetroValor típico
VDDTensión de alimentación3.3V
τConstante de tiempo10ms

Corriente de base del transistor

IB = VDD − VBER1

Corriente de base del transistor que conduce cuando su línea de control está a nivel alto y la otra a nivel bajo.

SímboloParámetroValor típico
VDDNivel alto de la línea de control3.3V
VBETensión base-emisor (supuesta)0.7V
R1Resistencia de base10kΩ
IBCorriente de base (calculada)0.26mA

Lista de materiales (BOM)

Todas las piezas necesarias para montar este circuito. Selecciona una referencia para inspeccionarla en el esquema.

Ref.ComponenteValorEncapsuladoFunción en el circuitoReferencia
Transistor NPN de pequeña señal

SS8050-G en la DevKitC V4. Con estas corrientes sirve cualquier conmutador NPN pequeño.

2N3904TO-92Lleva EN a nivel bajoTransistor NPN de pequeña señal: pinout y hoja de datos
Transistor NPN de pequeña señal

SS8050-G en la DevKitC V4.

2N3904TO-92Lleva IO0 a nivel bajoTransistor NPN de pequeña señal: pinout y hoja de datos
Resistencia

R21 en la DevKitC V4.

10kΩ0603 / 0805 / axialResistencia de base de Q1—
Resistencia

R22 en la DevKitC V4.

10kΩ0603 / 0805 / axialResistencia de base de Q2—
Resistencia

R11 en la DevKitC V4.

10kΩ0603 / 0805 / axialPull-up de EN—
Condensador cerámico

Valor recomendado por Espressif. La DevKitC V4 monta 0,1 µF (C9) y otros 0,1 µF en paralelo con el botón EN (C14).

1µF0603 / 0805Retardo de EN—
Pulsador táctil

La DevKitC V4 añade 0,1 µF en paralelo con él (C15).

BOOTSMD / THTIO0 a nivel bajo manualmente—
Pulsador táctilENSMD / THTReinicio manual—

Aplicaciones prácticas y casos de uso

Grabación de firmware por USB-UART en placas de desarrollo ESP32
Placas propias con ESP32 que deben grabarse desde Arduino IDE, PlatformIO o ESP-IDF sin botones
Adaptadores USB-UART para grabar módulos ESP32
Utillajes de prueba que regraban placas automáticamente

Trampas críticas de diseño y precauciones de ingeniería

Trampas encontradas en montajes reales, con la solución de cada una.

Crítico

Capacidad insuficiente en EN

Sin condensador entre EN y GND, o con uno muy pequeño, el reinicio automático no es fiable y esptool puede no conectar con el chip, sobre todo en Windows.

Mitigación

Coloque de 1 µF a 10 µF entre EN y GND, como recomienda la documentación de esptool; 1 µF con 10 kΩ coincide con las guías de diseño de hardware de Espressif.

Advertencia

El monitor serie reinicia o retiene la placa

Algunos programas de terminal y controladores activan RTS o DTR por su cuenta al abrir el puerto, y el control de flujo por hardware RTS/CTS maneja RTS. Según los niveles, la placa se reinicia o se queda en reinicio o en el bootloader. En Linux, un puerto inactivo puede activar RTS por defecto.

Mitigación

Desactive el control de flujo por hardware RTS/CTS en el programa de terminal. En Linux, quite HUPCL del puerto (stty -F /dev/ttyUSB0 -hupcl) como describe la documentación de esptool.

Advertencia

Una carga en GPIO2 bloquea el bootloader

El ESP32 entra en el bootloader serie solo si, además de IO0 a nivel bajo, GPIO2 está a nivel bajo o sin conectar. Una resistencia de pull-up u otro circuito que mantenga GPIO2 a nivel alto impide que funcione el reinicio automático aunque los transistores conmuten correctamente.

Mitigación

Deje GPIO2 sin conectar o asegúrese de que esté a nivel bajo durante el reinicio; no le ponga una resistencia de pull-up.

Nota

Condensador grande en IO0

Un condensador grande en IO0 mantiene el pin a nivel bajo durante un tiempo tras el encendido, y el chip puede arrancar el bootloader en lugar de su programa.

Mitigación

No añada condensadores de alto valor en IO0, como advierten las guías de diseño de hardware de Espressif; el circuito solo depende del pull-up interno débil.

Fuentes primarias

Ayuda a mantener esta página correcta

¿Montaste, simulaste o revisaste este circuito? Confírmalo o informa de una pieza, un valor o una conexión incorrectos.

Abre un formulario público en GitHub con esta página ya indicada; necesitas una cuenta gratuita de GitHub. Cómo funcionan los informes y las confirmaciones

Código HTML

<iframe src="https://circuitbase.tech/embed/schematic/esp32-auto-reset-flashing-circuit?theme=paper" width="100%" height="500" frameborder="0" loading="lazy" style="border: 1px solid #e5e7eb; border-radius: 6px; max-width: 100%;" title="Circuito de reinicio automático y arranque del ESP32 (DTR/RTS) — CircuitBase Interactive Schematic"></iframe>