Інтерфейси MCU

Схема автоматичного скидання й завантаження ESP32 (DTR/RTS)

Двотранзисторна схема з плат розробника Espressif, через яку esptool, Arduino IDE і PlatformIO скидають ESP32 і запускають його послідовний завантажувач (bootloader) лініями DTR і RTS моста USB-UART, без натискання кнопок.

Робочий логічний рівень
3,3 V (VDD33 на DevKitC V4)
Компоненти
8
Формули
3
Пастки
4
Відкрити у Web CAD
Перевірене джерело

Робоче поле схеми

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

Огляд схеми

Робочий логічний рівень
3,3 V (VDD33 на DevKitC V4)
Компоненти
8
Формули
3
Пастки
4

Клікніть на будь-який компонент схеми вище, щоб переглянути його параметри, номінал і призначення.

Огляд схеми

Це блок «auto program» зі схеми Espressif ESP32-DevKitC V4, перемальований разом із RC-ланкою затримки на EN і кнопками BOOT та EN. ESP32 запускає послідовний завантажувач, якщо в момент виходу зі скидання на IO0 низький рівень. Міст USB-UART — CP2102N на DevKitC або CH340G — має два вільні виходи керування модемом, DTR і RTS, і програми для прошивки перемикають їх, щоб керувати EN та IO0. Два NPN-транзистори ввімкнено перехресно, тож кожен відкривається лише тоді, коли рівні двох ліній керування різні: якщо DTR і RTS обидві високі або обидві низькі, нічого не відбувається, і термінальна програма, що виставляє обидві лінії разом, не скидає чип. На еталонній платі стоять транзистори SS8050; показаний тут транзистор загального призначення 2N3904 виконує ту саму роботу за цих струмів. Підтягувальний резистор і конденсатор на EN мають значення 10 kΩ і 1 µF, які рекомендує Espressif; на DevKitC V4 стоїть 0,1 µF. GPIO0 має внутрішній слабкий підтягувальний резистор, тож резистор на IO0 схемі не потрібен.

Ключові технічні характеристики

Робочий логічний рівень3,3 V (VDD33 на DevKitC V4)
Таблиця істинності керування (рівні на виводах)DTR 1, RTS 0 → EN 0; DTR 0, RTS 1 → IO0 0; однакові рівні → EN 1, IO0 1 (схема DevKitC V4)
Умова скиданняCHIP_PU нижче 0,6 V щонайменше 50 µs (Espressif Hardware Design Guidelines)
RC-ланка затримки EN10 kΩ і 1 µF за рекомендацією Espressif, τ = 10 ms (розрахунок); на DevKitC V4 стоїть 0,1 µF
Умова запуску завантажувачаIO0 низький у момент виходу зі скидання; GPIO2 низький або непід'єднаний (документація esptool)
ТранзисториSS8050 на DevKitC V4; тут показано 2N3904
Струм бази≈ 0,26 mA на транзистор з базовими резисторами 10 kΩ (розрахунок, прийнято VBE ≈ 0,7 V)

Принцип роботи та фізичні процеси

01

DTR і RTS від моста USB-UART

DTR і RTS — виходи з активним низьким рівнем: коли програма активує лінію, вивід переходить на 0 V; коли відпускає — повертається до 3,3 V. Далі все описано рівнями на виводах, як у таблиці істинності, надрукованій на схемі DevKitC V4.

02

Перехресно ввімкнені транзистори

База Q1 під'єднана до DTR через R1, емітер — до RTS; колектор тягне EN. Q2 — дзеркальне відображення: база на RTS через R2, емітер на DTR, колектор на IO0. Транзистор відкривається лише тоді, коли на боці бази високий рівень, а на боці емітера — низький:

DTR = 1, RTS = 1: обидва транзистори закриті, EN = 1, IO0 = 1.

DTR = 0, RTS = 0: обидва транзистори закриті, EN = 1, IO0 = 1.

DTR = 1, RTS = 0: Q1 відкритий, EN = 0 (чип у скиданні), IO0 = 1.

DTR = 0, RTS = 1: Q2 відкритий, EN = 1, IO0 = 0.

Оскільки однакові рівні нічого не перемикають, відкриття порту, яке активує обидві лінії разом, не скидає чип. Коли транзистор закритий, а його емітер має високий рівень і база низький, перехід база-емітер зміщений у зворотному напрямку на 3,3 V — із великим запасом до мінімальної V(BR)EBO 6 V транзистора 2N3904.

03

Скидання

Спочатку esptool виставляє DTR = 1, RTS = 0. Q1 входить у насичення, тягне EN до землі й розряджає C1. ESP32 скидається, коли CHIP_PU тримається нижче 0,6 V щонайменше 50 µs; esptool утримує цей стан 100 ms. З R1 = 10 kΩ струм бази Q1 приблизно дорівнює:

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

що насичує транзистор проти 0,33 mA, які подає R3.

04

Вихід зі скидання з низьким рівнем на IO0

Далі esptool двома послідовними викликами виставляє DTR = 0 і RTS = 1. Між ними обидві лінії ненадовго низькі, а обидва транзистори закриті; C1 сповільнює наростання EN протягом цієї паузи, тож чип ще утримується у скиданні, коли Q2 відкривається й тягне IO0 до низького рівня. Потім EN зростає через R3, заряджаючи C1:

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

Виходячи зі скидання, чип зчитує свої конфігураційні (strapping) піни. Знайшовши низький рівень на IO0, він запускає послідовний завантажувач замість програми у flash-пам'яті. Щоб завантажувач запустився, GPIO2 також має бути в низькому рівні або непід'єднаним.

05

Повернення до спокою

Через 50 ms esptool відпускає DTR, тож обидві лінії високі, обидва транзистори закриті, а IO0 повертається до високого рівня через внутрішній підтягувальний резистор. Завантажувач продовжує працювати, і завантаження йде далі через TXD0 і RXD0. Щоб запустити нову прошивку, esptool подає імпульс лише на RTS (DTR = 1, RTS = 0) — звичайне апаратне скидання з високим рівнем на IO0.

Розрахункові формули та рівняння

Стала часу затримки EN

τ = R3 · C1

Стала часу наростання EN після того, як Q1 або SW2 його відпускає.

СимволПараметрТипове значення
R3Підтягувальний резистор EN10kΩ
C1Конденсатор затримки EN1µF
τСтала часу (розрахунок)10ms

Напруга EN під час виходу зі скидання

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

EN досягає 63% напруги живлення через одну сталу часу і близько 99% через п'ять (50 ms для показаних значень).

СимволПараметрТипове значення
VDDНапруга живлення3.3V
τСтала часу10ms

Струм бази транзистора

IB = VDD − VBER1

Струм бази відкритого транзистора, коли його лінія керування має високий рівень, а інша — низький.

СимволПараметрТипове значення
VDDВисокий рівень лінії керування3.3V
VBEНапруга база-емітер (прийнята)0.7V
R1Базовий резистор10kΩ
IBСтрум бази (розрахунок)0.26mA

Специфікація компонентів (BOM)

Усі деталі, потрібні для складання цієї схеми. Оберіть позиційне позначення, щоб переглянути елемент на схемі.

Позн.КомпонентНоміналКорпусРоль у схеміДовідка
Малосигнальний NPN-транзистор

На DevKitC V4 — SS8050-G. За цих струмів підійде будь-який малопотужний NPN-ключ.

2N3904TO-92Тягне EN до низького рівняМалосигнальний NPN-транзистор: розпіновка та даташит
Малосигнальний NPN-транзистор

На DevKitC V4 — SS8050-G.

2N3904TO-92Тягне IO0 до низького рівняМалосигнальний NPN-транзистор: розпіновка та даташит
Резистор

На DevKitC V4 — R21.

10kΩ0603 / 0805 / axialБазовий резистор Q1—
Резистор

На DevKitC V4 — R22.

10kΩ0603 / 0805 / axialБазовий резистор Q2—
Резистор

На DevKitC V4 — R11.

10kΩ0603 / 0805 / axialПідтягування EN—
Керамічний конденсатор

Значення за рекомендацією Espressif. На DevKitC V4 стоїть 0,1 µF (C9) і ще 0,1 µF паралельно кнопці EN (C14).

1µF0603 / 0805Затримка EN—
Тактова кнопка

На DevKitC V4 паралельно їй стоїть 0,1 µF (C15).

BOOTSMD / THTРучний низький рівень на IO0—
Тактова кнопкаENSMD / THTРучне скидання—

Практичне застосування та сфери використання

Прошивка через USB-UART на платах розробника ESP32
Власні плати на ESP32, які мають прошиватися з Arduino IDE, PlatformIO чи ESP-IDF без кнопок
Адаптери USB-UART для прошивки модулів ESP32
Тестові стенди, що автоматично перепрошивають плати

Критичні інженерні пастки та типові помилки

Пастки, на які натрапляють під час реального складання, і як їх уникнути.

Критично

Замала ємність на EN

Без конденсатора між EN і GND або з дуже малим конденсатором автоматичне скидання ненадійне, і esptool може не під'єднатися до чипа — найчастіше у Windows.

Як уникнути

Поставте від 1 µF до 10 µF між EN і GND, як рекомендує документація esptool; 1 µF разом із 10 kΩ відповідає рекомендаціям Espressif щодо апаратного проєктування.

Увага

Монітор порту скидає або утримує плату

Деякі термінальні програми й драйвери самі виставляють RTS або DTR під час відкриття порту, а апаратне керування потоком RTS/CTS керує лінією RTS. Залежно від рівнів плата скидається або залишається у скиданні чи в завантажувачі. У Linux неактивний порт може за замовчуванням активувати RTS.

Як уникнути

Вимкніть апаратне керування потоком RTS/CTS у термінальній програмі. У Linux зніміть прапорець HUPCL для порту (stty -F /dev/ttyUSB0 -hupcl), як описано в документації esptool.

Увага

Навантаження на GPIO2 блокує завантажувач

ESP32 переходить у послідовний завантажувач, лише коли, крім низького IO0, GPIO2 теж низький або непід'єднаний. Підтягувальний резистор чи інша схема, що тримає GPIO2 у високому рівні, не дає автоматичному скиданню спрацювати, хоча транзистори перемикаються правильно.

Як уникнути

Залиште GPIO2 непід'єднаним або забезпечте на ньому низький рівень під час скидання; не ставте на нього підтягувальний резистор.

Примітка

Великий конденсатор на IO0

Великий конденсатор на IO0 ще деякий час після ввімкнення живлення тримає вивід у низькому рівні, і чип може запустити завантажувач замість своєї програми.

Як уникнути

Не ставте конденсатори великої ємності на IO0, як попереджають рекомендації Espressif щодо апаратного проєктування; схема покладається лише на внутрішній слабкий підтягувальний резистор.

Первинні джерела

Допоможіть тримати сторінку точною

Зібрали, змоделювали чи переглянули цю схему? Підтвердьте її або повідомте про неправильний компонент, номінал чи з’єднання.

Відкриває публічну форму на GitHub, де цю сторінку вже вказано; потрібен безкоштовний акаунт GitHub. Як працюють звіти й підтвердження

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="Схема автоматичного скидання й завантаження ESP32 (DTR/RTS) — CircuitBase Interactive Schematic"></iframe>