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

ULP-сопроцессор

Чтобы опрашивать датчик раз в секунду, не обязательно будить основной процессор. У ESP32 для этого есть маленький сопроцессор ULP, который работает в режиме глубокого сна и будит главный процессор только тогда, когда это действительно нужно.

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

ULP-сопроцессор (ultra-low-power coprocessor) — маленький маломощный процессор внутри ESP32, который работает, пока основной процессор спит. Он питается от домена RTC, хранит программу в памяти RTC и может читать выводы RTC GPIO, периферию RTC и встроенные датчики, а при нужном событии — разбудить основной процессор.

Зачем. Устройство на батарейке большую часть времени должно спать. Если основной процессор просыпается ради каждого измерения, тратится много энергии на запуск. ULP делает простую работу сам — опрашивает датчик, сравнивает с порогом — и будит процессор, только когда есть что обрабатывать.

Потребление ESP32 по таблице режимов питания даташита:

РежимТок
Глубокий сон, ULP работает150 мкА
Опрос датчика ULP с заполнением 1 %100 мкА
Глубокий сон: только таймер и память RTC10 мкА
Гибернация: только таймер RTC5 мкА

В режиме гибернации ULP отключён.

ESP32-S3. По даташиту у ESP32-S3 два сопроцессора:

  • ULP-RISC-V — процессор с набором команд RV32IMC, 32 регистрами, умножением, делением и прерываниями;
  • ULP-FSM — автомат с простыми командами арифметики, переходов и измерения датчиков.

Оба запускаются основным процессором, своим таймером или сигналом RTC GPIO, но работать одновременно не могут. Программа лежит в памяти RTC SLOW, которая сохраняется в глубоком сне.

Режимы сна ESP32 и способы пробуждения разобраны в статье «Глубокий сон ESP32», общие понятия — в термине «Режимы сна».

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

Зачем нужен ULP-сопроцессор у ESP32?

Чтобы выполнять простую работу, пока основной процессор спит. По даташиту Espressif в глубоком сне ULP продолжает работать: читает выводы RTC и датчики и будит основной процессор, когда нужно. Так устройство на батарейке опрашивает датчик и не тратит энергию на пробуждение ради каждого измерения.

Сколько потребляет ESP32 с работающим ULP?

По таблице режимов питания даташита ESP32 глубокий сон с включённым ULP — 150 мкА, режим периодического опроса датчика с заполнением 1 % — 100 мкА. Для сравнения: глубокий сон только с таймером и памятью RTC — 10 мкА.

Чем ULP-RISC-V отличается от ULP-FSM?

У ESP32-S3 по даташиту два сопроцессора. ULP-RISC-V — маленький процессор с набором команд RV32IMC, 32 регистрами, умножением и делением. ULP-FSM — автомат с простыми командами арифметики, переходов и измерения датчиков. Работать одновременно они не могут.

Источники

  1. Espressif. ESP32 Series Datasheet v5.3 — разд. 4.3.1 — в глубоком сне работают только память и периферия RTC, сопроцессор ULP действует; в режиме гибернации ULP отключён; табл. 4-2 — глубокий сон с работающим ULP 150 мкА, опрос датчика ULP с заполнением 1 % — 100 мкА, только таймер и память RTC — 10 мкА; 8 КБ SRAM RTC SLOW Memory доступны ULP
  2. Espressif. ESP32-S3 Series Datasheet v2.2 — разд. 4.1.1.3 — два сопроцессора: ULP-RISC-V (набор команд RV32IMC, 32 регистра, умножение и деление, прерывания) и ULP-FSM; оба работают от быстрого RC-генератора, запускаются процессором, своим таймером или RTC GPIO; одновременно работать не могут; программа хранится в RTC SLOW Memory и в глубоком сне обращается к RTC GPIO, периферии RTC и датчикам

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