Вывод обвязки загрузки (strapping pin)
Некоторые выводы микроконтроллера в момент сброса работают не как GPIO, а как перемычки конфигурации: чип считывает их уровни и по ним решает, откуда загружаться и как настроить питание памяти. Схема, подключённая к таким выводам, может помешать запуску.
Обновлено Редакция GAW
Вывод обвязки загрузки (strapping pin) — GPIO, уровень которого микроконтроллер считывает в момент сброса и использует как настройку: откуда загружаться, каким напряжением питать флеш-память, выводить ли сообщения загрузчика. По даташитам Espressif у каждого такого вывода есть защёлка: при сбросе она запоминает уровень и хранит его до выключения питания, а сам вывод после сброса работает как обычный GPIO.
| Чип | Выводы | Что задают |
|---|---|---|
| ESP32-S3 | GPIO0, GPIO46 | режим загрузки: запуск из флеш-памяти или загрузка прошивки |
| ESP32-S3 | GPIO45 | напряжение VDD_SPI: 3,3 или 1,8 В |
| ESP32-S3 | GPIO3 | источник сигналов JTAG, если это разрешено в eFuse |
| ESP32-C3 | GPIO8, GPIO9 | режим загрузки; GPIO8 — ещё и сообщения загрузчика |
| ESP32-C3 | GPIO2 | режим не выбирает, но его советуют подтянуть вверх |
Значения по умолчанию задают встроенные слабые подтяжки: у ESP32-S3 GPIO0 подтянут вверх, GPIO45 и GPIO46 вниз, у ESP32-C3 вверх подтянут GPIO9. Если к выводу ничего не подключено, чип запускает программу из флеш-памяти. Кнопка Boot на отладочных платах прижимает такой вывод к земле — у ESP32-S3-DevKitC-1 это GPIO0, у ESP32-C3-DevKitM-1 — GPIO9.
Время. По даташиту ESP32-C3 уровни должны установиться до включения чипа сигналом CHIP_EN и держаться ещё не меньше 3 мс, пока их считывают.
Что из этого следует при разводке: к выводам обвязки не подключают схемы, которые в момент сброса тянут их в другую сторону, — подтяжки датчиков, светодиоды на землю, входы с собственными подтяжками. Иначе плата то загружается, то нет. Подробно о выводах обвязки ESP32 — в статье «Выводы обвязки загрузки ESP32», о том, что делает загрузчик, — в термине «Загрузчик».
Частые вопросы
Что такое strapping pin у ESP32?
Вывод, уровень которого чип считывает в момент сброса, чтобы выбрать режим загрузки и другие параметры. По даташитам Espressif защёлки запоминают эти уровни до выключения питания, а после сброса выводы работают как обычные GPIO. У ESP32-S3 это GPIO0, GPIO3, GPIO45 и GPIO46, у ESP32-C3 — GPIO2, GPIO8 и GPIO9.
Почему ESP32 не загружается, когда к GPIO0 что-то подключено?
Потому что схема меняет уровень вывода обвязки в момент сброса. Например, у ESP32-S3 низкий уровень на GPIO0 вместе с низким на GPIO46 переводит чип в режим загрузки прошивки вместо запуска программы. Датчик с подтяжкой вниз или нагрузка на таком выводе дают тот же эффект.
Сколько времени должен держаться уровень на выводе обвязки?
По даташиту ESP32-C3 уровни должны установиться до того, как CHIP_EN станет высоким, и держаться не меньше 3 мс после этого — пока чип их считывает. Дальше вывод свободен и работает как обычный GPIO.
Источники
- Espressif. ESP32-S3 Series Datasheet v2.2 — разд. 3 — режим загрузки (GPIO0, GPIO46), напряжение VDD_SPI (GPIO45), вывод сообщений ROM (GPIO46), источник JTAG (GPIO3); табл. 3-1 — по умолчанию GPIO0 подтянут вверх, GPIO45 и GPIO46 вниз, GPIO3 не подтянут; защёлки считывают уровни при сбросе и хранят их до выключения, после сброса выводы — обычные GPIO
- Espressif. ESP32-C3 Series Datasheet v2.4 — разд. 3, табл. 3-1 и 3-3 — GPIO9 подтянут вверх, GPIO2 и GPIO8 не подтянуты; загрузка через USB или UART: GPIO8 = 1, GPIO9 = 0; GPIO2 режим не выбирает, но его советуют подтянуть вверх; табл. 3-2 — время установки tSU 0 мс, время удержания tH 3 мс после включения CHIP_EN
Нашли ошибку?
Смотрите также
- Strapping-выводы ESP32Какие GPIO читаются при сбросе: загрузка, напряжение флеш-памяти, JTAG — для ESP32, S2, S3, C2, C3, C5, C6, H2, P4
- ESP32-S3-DevKitC-144 контакта, АЦП, сенсоры, обвязка загрузки, два USB, RGB-светодиод, PSRAM
- ESP32-C3-DevKitM-130 контактов, 15 GPIO, АЦП, обвязка загрузки, USB, RGB-светодиод на GPIO8
- Загрузчик (bootloader)Прошивка МК без программатора через UART или USB