Interfejsy MCU

Układ automatycznego resetu i rozruchu ESP32 (DTR/RTS)

Dwutranzystorowy układ z płytek rozwojowych Espressif, dzięki któremu esptool, Arduino IDE i PlatformIO resetują ESP32 i uruchamiają jego szeregowy bootloader liniami DTR i RTS mostka USB-UART, bez wciskania przycisków.

Roboczy poziom logiczny
3,3 V (VDD33 na DevKitC V4)
Komponenty
8
Wzory
3
Pułapki
4
Otwórz w Web CAD
Zweryfikowane Źródło

Obszar roboczy schematu

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

Przegląd układu

Roboczy poziom logiczny
3,3 V (VDD33 na DevKitC V4)
Komponenty
8
Wzory
3
Pułapki
4

Kliknij dowolny element na schemacie powyżej, aby zobaczyć jego parametry elektryczne i rolę w układzie.

Przegląd układu

To blok „auto program” ze schematu Espressif ESP32-DevKitC V4, przerysowany razem z obwodem opóźniającym na EN oraz przyciskami BOOT i EN. ESP32 uruchamia szeregowy bootloader, jeśli w chwili wyjścia z resetu na IO0 jest stan niski. Mostek USB-UART, taki jak CP2102N na DevKitC albo CH340G, ma dwa wolne wyjścia sterowania modemem, DTR i RTS, a narzędzia do wgrywania firmware przełączają je, aby sterować EN i IO0. Dwa tranzystory NPN są połączone krzyżowo, więc każdy przewodzi tylko wtedy, gdy jego dwie linie sterujące mają różne stany: gdy DTR i RTS są obie wysokie albo obie niskie, nic się nie dzieje, dlatego program terminalowy ustawiający obie linie jednocześnie nie resetuje układu. Płytka referencyjna ma tranzystory SS8050; narysowany tu tranzystor ogólnego przeznaczenia 2N3904 spełnia to samo zadanie przy tych prądach. Rezystor podciągający i kondensator na EN mają wartości 10 kΩ i 1 µF zalecane przez Espressif; na DevKitC V4 zastosowano 0,1 µF. GPIO0 ma wewnętrzny słaby rezystor podciągający, więc układ nie potrzebuje rezystora na IO0.

Kluczowe parametry techniczne

Roboczy poziom logiczny3,3 V (VDD33 na DevKitC V4)
Tabela prawdy sterowania (stany na pinach)DTR 1, RTS 0 → EN 0; DTR 0, RTS 1 → IO0 0; jednakowe stany → EN 1, IO0 1 (schemat DevKitC V4)
Warunek resetuCHIP_PU poniżej 0,6 V przez co najmniej 50 µs (Espressif Hardware Design Guidelines)
Obwód opóźniający EN10 kΩ i 1 µF zalecane przez Espressif, τ = 10 ms (obliczone); na DevKitC V4 zastosowano 0,1 µF
Warunek uruchomienia bootloaderaIO0 niski w chwili wyjścia z resetu; GPIO2 niski lub niepodłączony (dokumentacja esptool)
TranzystorySS8050 na DevKitC V4; tutaj narysowano 2N3904
Prąd bazy≈ 0,26 mA na tranzystor przy rezystorach bazowych 10 kΩ (obliczone, przyjęto VBE ≈ 0,7 V)

Zasada działania i analiza teoretyczna

01

DTR i RTS z mostka USB-UART

DTR i RTS to wyjścia aktywne stanem niskim: gdy oprogramowanie aktywuje linię, pin przechodzi na 0 V; gdy ją zwalnia, wraca do 3,3 V. Wszystko poniżej opisano stanami na pinach, jak w tabeli prawdy wydrukowanej na schemacie DevKitC V4.

02

Tranzystory połączone krzyżowo

Baza Q1 jest połączona z DTR przez R1, a emiter z RTS; kolektor ściąga EN. Q2 jest lustrzanym odbiciem: baza na RTS przez R2, emiter na DTR, kolektor na IO0. Tranzystor przewodzi tylko wtedy, gdy po stronie bazy jest stan wysoki, a po stronie emitera niski:

DTR = 1, RTS = 1: oba tranzystory wyłączone, EN = 1, IO0 = 1.

DTR = 0, RTS = 0: oba tranzystory wyłączone, EN = 1, IO0 = 1.

DTR = 1, RTS = 0: Q1 przewodzi, EN = 0 (układ w resecie), IO0 = 1.

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

Ponieważ jednakowe stany niczego nie przełączają, otwarcie portu, które aktywuje obie linie jednocześnie, nie resetuje układu. Gdy tranzystor jest wyłączony, a jego emiter ma stan wysoki i baza niski, złącze baza-emiter jest spolaryzowane zaporowo napięciem 3,3 V — z dużym zapasem względem minimalnego V(BR)EBO 6 V tranzystora 2N3904.

03

Reset

Najpierw esptool ustawia DTR = 1, RTS = 0. Q1 wchodzi w nasycenie, ściąga EN do masy i rozładowuje C1. ESP32 resetuje się, gdy CHIP_PU pozostaje poniżej 0,6 V przez co najmniej 50 µs; esptool utrzymuje ten stan przez 100 ms. Przy R1 = 10 kΩ prąd bazy Q1 wynosi około:

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

co nasyca tranzystor wobec 0,33 mA dostarczanych przez R3.

04

Wyjście z resetu przy niskim IO0

Następnie esptool dwoma kolejnymi wywołaniami ustawia DTR = 0 i RTS = 1. Pomiędzy nimi obie linie są przez chwilę niskie, a oba tranzystory wyłączone; C1 spowalnia narastanie EN w tej przerwie, więc układ jest nadal w resecie, gdy Q2 zaczyna przewodzić i ściąga IO0 w stan niski. Potem EN rośnie przez R3, ładując C1:

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

Wychodząc z resetu, układ odczytuje swoje piny strapping (konfiguracyjne). Gdy zastanie niski stan na IO0, uruchamia szeregowy bootloader zamiast programu z pamięci flash. Aby bootloader się uruchomił, GPIO2 też musi być w stanie niskim albo niepodłączony.

05

Powrót do spoczynku

Po 50 ms esptool zwalnia DTR, więc obie linie są wysokie, oba tranzystory wyłączone, a IO0 wraca do stanu wysokiego przez wewnętrzny rezystor podciągający. Bootloader działa dalej, a wgrywanie trwa przez TXD0 i RXD0. Aby uruchomić nowy firmware, esptool podaje impuls tylko na RTS (DTR = 1, RTS = 0) — zwykły reset sprzętowy przy wysokim IO0.

Wzory i równania obliczeniowe

Stała czasowa opóźnienia EN

τ = R3 · C1

Stała czasowa narastania EN po zwolnieniu go przez Q1 lub SW2.

OznaczenieParametrWartość typowa
R3Rezystor podciągający EN10kΩ
C1Kondensator opóźniający EN1µF
τStała czasowa (obliczona)10ms

Napięcie EN podczas zwalniania

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

EN osiąga 63% napięcia zasilania po jednej stałej czasowej i około 99% po pięciu (50 ms dla narysowanych wartości).

OznaczenieParametrWartość typowa
VDDNapięcie zasilania3.3V
τStała czasowa10ms

Prąd bazy tranzystora

IB = VDD − VBER1

Prąd bazy przewodzącego tranzystora, gdy jego linia sterująca jest w stanie wysokim, a druga w niskim.

OznaczenieParametrWartość typowa
VDDStan wysoki linii sterującej3.3V
VBENapięcie baza-emiter (przyjęte)0.7V
R1Rezystor bazowy10kΩ
IBPrąd bazy (obliczony)0.26mA

Wykaz elementów (BOM)

Wszystkie elementy potrzebne do zbudowania tego układu. Wybierz oznaczenie, aby obejrzeć element na schemacie.

Oznacz.KomponentWartośćObudowaRola w układzieDokumentacja
Małosygnałowy tranzystor NPN

Na DevKitC V4 — SS8050-G. Przy tych prądach wystarczy dowolny mały klucz NPN.

2N3904TO-92Ściąga EN w stan niskiMałosygnałowy tranzystor NPN: pinout i nota katalogowa
Małosygnałowy tranzystor NPN

Na DevKitC V4 — SS8050-G.

2N3904TO-92Ściąga IO0 w stan niskiMałosygnałowy tranzystor NPN: pinout i nota katalogowa
Rezystor

Na DevKitC V4 — R21.

10kΩ0603 / 0805 / axialRezystor bazowy Q1—
Rezystor

Na DevKitC V4 — R22.

10kΩ0603 / 0805 / axialRezystor bazowy Q2—
Rezystor

Na DevKitC V4 — R11.

10kΩ0603 / 0805 / axialPodciąganie EN—
Kondensator ceramiczny

Wartość zalecana przez Espressif. Na DevKitC V4 zastosowano 0,1 µF (C9) oraz dodatkowe 0,1 µF równolegle do przycisku EN (C14).

1µF0603 / 0805Opóźnienie EN—
Przycisk taktowy

Na DevKitC V4 równolegle do niego jest 0,1 µF (C15).

BOOTSMD / THTRęczny stan niski na IO0—
Przycisk taktowyENSMD / THTRęczny reset—

Praktyczne zastosowania i przykłady

Wgrywanie firmware przez USB-UART na płytkach rozwojowych ESP32
Własne płytki z ESP32, które mają się programować z Arduino IDE, PlatformIO lub ESP-IDF bez przycisków
Adaptery USB-UART do programowania modułów ESP32
Stanowiska testowe automatycznie przeprogramowujące płytki

Krytyczne pułapki projektowe i błędy inżynierskie

Pułapki spotykane przy prawdziwym montażu wraz z rozwiązaniem każdej z nich.

Krytyczne

Za mała pojemność na EN

Bez kondensatora między EN a GND albo z bardzo małym kondensatorem automatyczny reset jest zawodny i esptool może nie połączyć się z układem, najczęściej w systemie Windows.

Jak temu zapobiec

Zastosuj od 1 µF do 10 µF między EN a GND, jak zaleca dokumentacja esptool; 1 µF z 10 kΩ odpowiada wytycznym projektowania sprzętu Espressif.

Ostrzeżenie

Monitor portu resetuje lub blokuje płytkę

Niektóre programy terminalowe i sterowniki same ustawiają RTS lub DTR przy otwieraniu portu, a sprzętowa kontrola przepływu RTS/CTS steruje linią RTS. Zależnie od stanów płytka się resetuje albo pozostaje w resecie lub w bootloaderze. W systemie Linux bezczynny port może domyślnie aktywować RTS.

Jak temu zapobiec

Wyłącz sprzętową kontrolę przepływu RTS/CTS w programie terminalowym. W systemie Linux wyczyść flagę HUPCL portu (stty -F /dev/ttyUSB0 -hupcl), jak opisuje dokumentacja esptool.

Ostrzeżenie

Obciążenie GPIO2 blokuje bootloader

ESP32 wchodzi do szeregowego bootloadera tylko wtedy, gdy oprócz niskiego IO0 także GPIO2 jest niski lub niepodłączony. Rezystor podciągający lub inny obwód trzymający GPIO2 w stanie wysokim uniemożliwia automatyczny reset, mimo że tranzystory przełączają się poprawnie.

Jak temu zapobiec

Pozostaw GPIO2 niepodłączony albo zapewnij na nim stan niski podczas resetu; nie dawaj na nim rezystora podciągającego.

Informacja

Duży kondensator na IO0

Duży kondensator na IO0 przez pewien czas po włączeniu zasilania utrzymuje pin w stanie niskim i układ może uruchomić bootloader zamiast swojego programu.

Jak temu zapobiec

Nie dodawaj kondensatorów o dużej pojemności na IO0, przed czym ostrzegają wytyczne projektowania sprzętu Espressif; układ polega wyłącznie na wewnętrznym słabym rezystorze podciągającym.

Źródła pierwotne

Pomóż dbać o poprawność tej strony

Zbudowałeś, zasymulowałeś lub przejrzałeś ten obwód? Potwierdź go albo zgłoś błędną część, wartość lub połączenie.

Otwiera publiczny formularz na GitHubie z już wpisaną tą stroną; potrzebne jest bezpłatne konto GitHub. Jak działają zgłoszenia i potwierdzenia

Kod 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="Układ automatycznego resetu i rozruchu ESP32 (DTR/RTS) — CircuitBase Interactive Schematic"></iframe>