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

Light-sleep — лёгкий сон ESP32

Глубокий сон экономит больше всего, но после него чип загружается заново. Если просыпаться нужно часто и быстро, а состояние программы терять нельзя, у ESP32 есть промежуточный режим — Light-sleep: процессор стоит, память и периферия ждут, ток падает до долей миллиампера.

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

Light-sleep (лёгкий сон) — режим пониженного потребления у ESP32, в котором процессор остановлен, а память, RTC-домен и часть периферии продолжают работать. После пробуждения программа продолжает выполняться с того же места, без перезагрузки — этим Light-sleep отличается от глубокого сна.

Что работает и сколько потребляет

ЧипЧто происходит в Light-sleepТок
ESP32процессор приостановлен; RTC-память, RTC-периферия и ULP-сопроцессор работают0,8 мА
ESP32-C3процессор не работает и может оставаться под питанием; часть цифровой периферии можно отключить130 мкА тип. при выключенных VDD_SPI и Wi-Fi, все GPIO в высокоимпедансном состоянии

Данные — по даташитам ESP32 v5.3 (разд. 4.3.1, табл. 4-2; в ней значение не помечено как типичное или максимальное) и ESP32-C3 v2.4 (разд. 4.1.3.6, табл. 5-9). Для сравнения: в Deep-sleep с таймером RTC у ESP32 указано 10 мкА, у ESP32-C3 — 5 мкА. По нашему расчёту, лёгкий сон обходится примерно в 80 раз дороже глубокого у ESP32 и в 26 раз — у ESP32-C3. Средний ток при периодическом пробуждении считает калькулятор тока ESP32 во сне.

Пробуждение

Даташит ESP32 перечисляет события MAC, SDIO host, таймер RTC и внешние прерывания. Для ESP32-C3 TRM v1.4 даёт полную таблицу (табл. 9.4-2): из Light-sleep будят GPIO, таймер RTC, Wi-Fi, UART0, UART1, Bluetooth и XTAL32K_CLK, а из Deep-sleep — только таймер, XTAL32K_CLK и выводы RTC GPIO. Источник XTAL32K_CLK — не тактовый сигнал как таковой: когда кварц 32 кГц служит медленным тактом RTC, сторожевой таймер 32 кГц будит чип при остановке кварца (прим. 4). Поэтому кнопка на обычном выводе может будить чип из лёгкого сна, но не из глубокого.

Выводы во сне

Состояние выводов в Light-sleep можно задать отдельно от рабочего. Если в регистре IO MUX вывода установлен бит SLP_SEL, во сне силой выхода, подтяжками и разрешением выхода управляют поля MCU_DRV, MCU_WPU, MCU_WPD и MCU_OE, а не обычные FUN_* (TRM ESP32 v5.8, разд. 6.6; у ESP32-C3 — IO_MUX_SLP_SEL, разд. 5.8). При SLP_SEL = 0 вывод ведёт себя во сне так же, как в работе. Подробнее об IO MUX — в термине «IO MUX».

Время после сна

После Light-sleep программа может загрузить в системный таймер ESP32-C3 время сна, измеренное таймером RTC (TRM ESP32-C3, разд. 10.2). Смысл, по нашему пониманию, в том, чтобы отсчёт времени операционной системы не отставал после каждого засыпания.

Не путать

С Modem-sleep: там процессор работает, а выключено только радио, и ток измеряется десятками миллиампер. Общие понятия режимов сна микроконтроллеров — в термине «Режимы сна».

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

Чем Light-sleep отличается от Deep-sleep?

В Light-sleep процессор только остановлен: оперативная память и состояние программы сохраняются, после пробуждения код продолжает работу с того же места. В Deep-sleep выключено почти всё, кроме RTC, и чип загружается заново. Платой за быстрый возврат служит ток: у ESP32 0,8 мА против 10 мкА в Deep-sleep с таймером RTC (табл. 4-2 даташита v5.3).

Что может разбудить ESP32-C3 из Light-sleep?

По табл. 9.4-2 TRM ESP32-C3 — любой GPIO, таймер RTC, Wi-Fi, UART0 и UART1, Bluetooth и XTAL32K_CLK — сторожевой таймер 32 кГц, который будит чип, если остановился кварц 32 кГц, работающий медленным тактом RTC (прим. 4 к табл. 9.4-2). Из Deep-sleep будят только таймер RTC, XTAL32K_CLK и выводы RTC GPIO, а не обычные GPIO.

Сохраняется ли Wi-Fi-соединение в Light-sleep?

У ESP32-C3 даташит прямо говорит, что беспроводные соединения могут оставаться активными: для этого чип периодически переключается между Active, Modem-sleep и Light-sleep, а процессор и радио просыпаются в заданные моменты (TRM, прим. к табл. 9.4-2). Сам ток 130 мкА из табл. 5-9 указан для выключенного Wi-Fi.

Источники

  1. Espressif. ESP32 Series Datasheet v5.3 — разд. 4.3.1: в Light-sleep процессор приостановлен, RTC-память, RTC-периферия и сопроцессор ULP работают, будят события MAC, SDIO host, таймер RTC или внешние прерывания; табл. 4-2: Light-sleep 0,8 мА, Deep-sleep с таймером RTC и RTC-памятью 10 мкА
  2. Espressif. ESP32-C3 Series Datasheet v2.4 — разд. 4.1.3.6: в Light-sleep процессор не работает и может оставаться под питанием, будят MAC, таймер RTC и внешние прерывания, беспроводные соединения могут оставаться активными; табл. 5-9: Light-sleep 130 мкА тип. при выключенных VDD_SPI и Wi-Fi и всех GPIO в высокоимпедансном состоянии, Deep-sleep 5 мкА
  3. Espressif. ESP32-C3 Technical Reference Manual v1.4 — табл. 9.4-2: источники пробуждения из Light-sleep — GPIO, таймер RTC, Wi-Fi, UART0, UART1, Bluetooth, XTAL32K_CLK; из Deep-sleep — только RTC GPIO, таймер RTC, XTAL32K_CLK; прим. 2: для Wi-Fi чип переключается между Active, Modem-sleep и Light-sleep; разд. 5.8: бит IO_MUX_SLP_SEL; разд. 10.2: системный таймер после Light-sleep загружает время сна из таймера RTC
  4. Espressif. ESP32 Technical Reference Manual v5.8 — разд. 6.6, табл. 6.6-1: при SLP_SEL = 1 в Light-sleep выводом управляют поля MCU_DRV, MCU_WPU, MCU_WPD, MCU_OE вместо FUN_DRV, FUN_WPU, FUN_WPD; при SLP_SEL = 0 функции вывода не меняются

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