Перейти к содержанию

Вывод обвязки загрузки (strapping pin)

Некоторые выводы микроконтроллера в момент сброса работают не как GPIO, а как перемычки конфигурации: чип считывает их уровни и по ним решает, откуда загружаться и как настроить питание памяти. Схема, подключённая к таким выводам, может помешать запуску.

Обновлено Редакция GAW

Вывод обвязки загрузки (strapping pin) — GPIO, уровень которого микроконтроллер считывает в момент сброса и использует как настройку: откуда загружаться, каким напряжением питать флеш-память, выводить ли сообщения загрузчика. По даташитам Espressif у каждого такого вывода есть защёлка: при сбросе она запоминает уровень и хранит его до выключения питания, а сам вывод после сброса работает как обычный GPIO.

ЧипВыводыЧто задают
ESP32-S3GPIO0, GPIO46режим загрузки: запуск из флеш-памяти или загрузка прошивки
ESP32-S3GPIO45напряжение VDD_SPI: 3,3 или 1,8 В
ESP32-S3GPIO3источник сигналов JTAG, если это разрешено в eFuse
ESP32-C3GPIO8, GPIO9режим загрузки; GPIO8 — ещё и сообщения загрузчика
ESP32-C3GPIO2режим не выбирает, но его советуют подтянуть вверх

Значения по умолчанию задают встроенные слабые подтяжки: у 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.

Источники

  1. Espressif. ESP32-S3 Series Datasheet v2.2 — разд. 3 — режим загрузки (GPIO0, GPIO46), напряжение VDD_SPI (GPIO45), вывод сообщений ROM (GPIO46), источник JTAG (GPIO3); табл. 3-1 — по умолчанию GPIO0 подтянут вверх, GPIO45 и GPIO46 вниз, GPIO3 не подтянут; защёлки считывают уровни при сбросе и хранят их до выключения, после сброса выводы — обычные GPIO
  2. 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

Нашли ошибку?