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

RTC GPIO — выводы домена RTC

В глубоком сне у ESP32 выключено почти всё, включая матрицу GPIO. Работают выводы, подключённые к RTC-подсистеме, — RTC GPIO. Только ими можно разбудить чип из Deep-sleep кнопкой или датчиком. Сохранить уровень во сне могут и обычные цифровые выводы, но только через функцию удержания (hold).

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

RTC GPIO — выводы ESP32, которые можно переключить из обычной цифровой части в RTC-подсистему, работающую и в глубоком сне. Обычные выводы проходят через IO MUX и матрицу GPIO; RTC GPIO вместо этого направляет в RTC-домен отдельный мультиплексор RTC IO MUX (TRM ESP32 v5.8, разд. 6.1 и 6.5).

Что они умеют

  • Держать уровень во сне. Вывод в режиме RTC GPIO сохраняет выходной уровень, когда чип в Deep-sleep (TRM ESP32, разд. 6.5.1). Обычные цифровые выводы тоже можно удержать в Deep-sleep, но через удержание вывода: у ESP32 — регистр RTCIO_DIG_PAD_HOLD_REG (разд. 6.7), у ESP32-C3 для GPIO6–21 — RTC_CNTL_DIG_PAD_HOLD_REG (TRM v1.4, разд. 5.9).
  • Будить чип. Вход RTC GPIO может разбудить ESP32 из Deep-sleep — обычный GPIO так не умеет.
  • Работать с ULP. У ESP32 и ESP32-S3 этими выводами управляет RTC-периферия, доступная ULP-сопроцессору во сне; у ESP32-C3 ULP-сопроцессора нет.
  • Аналоговые функции. У ESP32 на тех же выводах АЦП, ЦАП и сенсоры касания (табл. 6.11-1), у ESP32-S3 — АЦП и сенсоры касания (табл. 6.13-2); RTC-функцию и аналоговую одновременно у ESP32 выбрать нельзя (разд. 6.5.2).

Сколько их у разных чипов

ЧипRTC GPIOИсточник
ESP3218: RTC_GPIO0–17TRM v5.8, разд. 6.5.1, табл. 6.11-1
ESP32-S322TRM v1.8, разд. 6.7.1
ESP32-C3GPIO0–GPIO5 (RTC GPIO 0–5)TRM v1.4, разд. 5.9, 5.10.1

У ESP32 номера RTC GPIO не совпадают с номерами GPIO:

RTC GPIOGPIORTC GPIOGPIORTC GPIOGPIO
036625122
1377261315
2388331413
3399321512
4341041614
5351101727

(TRM ESP32 v5.8, табл. 6.11-1.) Выводы GPIO34–39 в этом списке есть, но они только входные: по TRM (разд. 6.1 и легенда к табл. IO MUX) у них нет выходного драйвера и внутренних подтяжек. Значит, для пробуждения они годятся, а выходной уровень на них не удержать — это наш вывод. Подробные распиновки — на странице ESP32.

Регистры

У ESP32 RTC GPIO управляется своим набором регистров RTCIO: RTCIO_RTC_GPIO_OUT_REG по адресу 0x3FF48400 и парные RTCIO_RTC_GPIO_OUT_W1TS_REG и W1TC_REG — запись единицы устанавливает или сбрасывает только выбранные биты (разд. 6.12.3; о таких регистрах — в термине «Типы доступа к регистрам»). У ESP32-S3 вывод переводится в RTC-домен битом RTC_IO_TOUCH/RTC_PADn_MUX_SEL; по умолчанию все такие биты равны 0, и сигналы идут через IO MUX (разд. 6.7.2).

На практике

Кнопка, которая должна будить устройство из глубокого сна, должна сидеть на RTC GPIO — см. ответ «Как разбудить ESP32 кнопкой». Чтобы сохранить состояние и обычных выводов, у ESP32 есть удержание вывода.

Частые вопросы

Какими выводами можно разбудить ESP32 из глубокого сна?

Только выводами RTC GPIO. У ESP32 это 18 выводов RTC_GPIO0–RTC_GPIO17 (GPIO0, 2, 4, 12–15, 25–27, 32–39), у ESP32-C3 — GPIO0–GPIO5. Обычный вывод будит чип только из Light-sleep (TRM ESP32 v5.8, табл. 6.11-1; TRM ESP32-C3 v1.4, разд. 5.10.1).

Почему номер RTC GPIO не совпадает с номером GPIO?

Это особенность классического ESP32: его RTC-подсистема нумерует выводы отдельно, например RTC_GPIO0 — это GPIO36, а RTC_GPIO10 — GPIO4 (TRM ESP32 v5.8, табл. 6.11-1). У ESP32-S3 номера совпадают: RTC_GPIOn — это GPIOn для n от 0 до 21 (TRM ESP32-S3 v1.8, табл. 6.13-1). Регистры RTC IO адресуют вывод по номеру RTC GPIO (TRM ESP32-S3, разд. 6.7.2).

Можно ли использовать вывод одновременно как АЦП и RTC GPIO?

Нет. По TRM ESP32 (разд. 6.5.2) RTC-функцию и аналоговую функцию вывода можно выбрать только по одной за раз.

Источники

  1. Espressif. ESP32 Technical Reference Manual v5.8 — разд. 6.1: RTC IO MUX подключает выводы к малопотребляющим и аналоговым функциям, такие функции есть лишь у части выводов; разд. 6.5.1: 18 выводов с RTC- и аналоговыми функциями, IO MUX и матрица GPIO для них не используются; в режиме RTC GPIO выход сохраняет уровень в Deep-sleep, вход может будить чип; разд. 6.5.2: RTC- и аналоговую функцию нельзя выбрать одновременно; табл. 6.11-1: соответствие RTC_GPIO0–17 и GPIO; разд. 6.12.3: RTCIO_RTC_GPIO_OUT_REG (0x3FF48400) и регистры W1TS/W1TC
  2. Espressif. ESP32-S3 Technical Reference Manual v1.8 — разд. 6.7.1: 22 вывода с RTC- и аналоговыми функциями, удержание уровня и пробуждение из Deep-sleep; разд. 6.7.2: выбор бита RTC_IO_TOUCH/RTC_PADn_MUX_SEL, по умолчанию 0 — сигналы идут через IO MUX; регистры нумеруются по RTC GPIO, а не по GPIO
  3. Espressif. ESP32-C3 Technical Reference Manual v1.4 — разд. 5.9: RTC-выводы — GPIO0–GPIO5; разд. 5.10.1: из Light-sleep будит любой вывод, из Deep-sleep — только GPIO0–GPIO5 домена VDD3P3_RTC; табл. 9.4-2, прим. 1: в Deep-sleep будят только RTC GPIO; поле RTC_CNTL_GPIO_WAKEUP_STATUS: биты 0–5 — RTC GPIO 0–5

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