• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

ESP32-C3 light sleep

pvvx

Активный участник сообщества
Опять Espressif всех хочет надуть в документации.
Для теста берем example light_sleep из esp/dif и с установками по умолчанию собираем, заменив для измерения время с 2 секунды на 20 сек esp_sleep_enable_timer_wakeup(20000000);
и убираем лишнее - строку esp_sleep_enable_gpio_wakeup(); вдруг оно будет потреблять лишнее(?!).
Смотрим, что там, вместе с шумами:
1642310387803.png
При усреднении выходит ровно 130.0 мкА.
Теперь наблюдаем как оно устанавливалось:
1642310501303.png
и видим, что Espressif опять халтурит в своих PDF, т.к. потребление в light_sleep убегает за больше 0.8 мА, а итого в 130 мкА устанавливается только спустя 300 мс!
 

pvvx

Активный участник сообщества
Заодно глянем как там BLE sleep (пример ble_ibeacon)...
Что только не делал с конфигами в ESP/IDF, даже кварц на 32кГц припаял, но всё равно выходит BluetoothHiEnergy.
Со старта, все сообщения выключены, а включены всё, что дает максимально малый ток между передачами рекламы:
1642312524137.png
Только загрузка кода - 110 ms, потом наверно калибровка по кварцу 32кГц (но зачем?) и далее что-то ворочается в коде - 150 ms.
Т.е. первый RF TX спустя 260 ms от старта(!). О потреблении и говорить нечего - это надо уже большой Li АКБ, а не пальчиковые батарейки (такого току они не дадут).
И великий modem sleep в паузах для BLE дает 10 мА!

Время старта из sleep для передачи BLE рекламы 3-х каналах:
1642312852218.png
Неясно чем занят SoC первые 2.87 ms - мается дурью - жрет питание :)
Затем передает на 210 мА! Это BLE от Espressif! :) :)
 

Evgeny D

Member
@pvvx кажется вы нам нужны! Нужно обновлять данные с http сервера (ну можно tcp/udp) раз в 4 секунды. Какие нибудь из старых или новых ESP могут делать это со средним потреблением 10-20мА?
 

rkit

New member
Напряжение питания какое? Между 3.3 и 2.5 разница колоссальная по моим замерам.
 

pvvx

Активный участник сообщества
@pvvx кажется вы нам нужны! Нужно обновлять данные с http сервера (ну можно tcp/udp) раз в 4 секунды. Какие нибудь из старых или новых ESP могут делать это со средним потреблением 10-20мА?
WiFi на ESP32-C3 я ещё не проверял.
Но RT8720D на WiFi 2&5GHz сможет уложится в 10-20 мА, хотя у него ток RF TX (передачи) одинаков c ESP.
 

pvvx

Активный участник сообщества
Напряжение питания какое? Между 3.3 и 2.5 разница колоссальная по моим замерам.
Я измеряю на 3.3В.
2.5В ESP32-C3 не работает - у него ограничение
1642351881310.png
В чем разница? В том что DC-DC не встроен в чип? (и это в 2022 году)
На всех других SoC ныне чем больше напряжение, тем меньше ток.

В настройках сборки IDF есть:
для BT (bluedroid):
1642351956051.png
Потом есть Sleep Config
1642352045860.png
Далее Power Managment
1642352109853.png
И в FreeRTOS
1642352163125.png
Но это всё мало влияет на BT.
На примеры с BT от Espressif влияет только:
"Bluetooth modem sleep"
"Bluetooth Modem sleep Mode 1"
"Enable dynamic frequency scaling (DFS) at startup"


Остальные пункты конфигурации - какая-то глупость, не влияющая на потребление в BT.
 

rkit

New member

pvvx

Активный участник сообщества
Уже научились закон Ома обманывать? На других версиях esp32 разница значительная. Что с этой - не знаю, поэтому и спросил.
У DC-DC такой закон. Это не LDO.
И я тоже не знаю что там натворили, что на менее 10 мА sleep в BLE не включается.
И в IDF две реализации BLE, судя по config опциям
 

pvvx

Активный участник сообщества
По картинке просыпания для выдачи BLE рекламы из поста, можно сразу сказать:
Время очухивания SoC из сна - не менее 1 ms
И далее зачем-то почти 2 ms включен RF на RX, т.к. кушает 70+ мА, что для него характерно. Но зачем это действие - науке не известно :)
Возможно это просто вредительство.
Ну а потребление при RF TX с учетом отдачи в +9дБ выставленных к конфиге для примера и составляющем 210 мА, равно ровно в 10 раз более чем у любых SoC с технологиями для SoC, массово выпущенных другими китайцами уже более пару лет назад (именно 21 мА и менее на +9дБ).
В итого получаем такой "подарок" в виде ESP32-C3 от Espressif на 2022 год :) Кушайте и не подавитесь :)
 

pvvx

Активный участник сообщества
Пример Espressif\esp-idf\examples\system\deep_sleep
Всё по умолчанию:
1642361348085.png
Совсем не ясно зачем туда вставили delay(1000)?
Одно счастье с ESP32-C3 по сравнению с ESP8266 - можно отключить сообщения загрузчика, что ускоряет время выполнения цикла активности (пробуждение-засыпание) и уменьшает потребление. И то по причине кривописателей - UART в современных SoC может работать без CPU и типичное потребление при выводе в него менее 1 мА.
Но на данной диаграмме ничего не отключено - всё по умолчанию. Таковы примеры от Espressif для режимов "малого потребления" :)
 

pvvx

Активный участник сообщества
Отключим отладку и оптимизацию на –O2, отключим все сообщения и выводы логов, сократим код примера до:
C++:
void app_main(void) {
    const int wakeup_time_sec = 20;
    // printf("Enabling timer wakeup, %ds\n", wakeup_time_sec);
    esp_sleep_enable_timer_wakeup(wakeup_time_sec * 1000000);
    esp_deep_sleep_start();
}
И вместо программы в сотню байт, после достаточно длительного перелопачивания сборщиком тысячи файлов си получим:
Код:
Total sizes:
Used stat D/IRAM:   48680 bytes ( 279000 remain, 14.9% used)
      .data size:    4456 bytes
      .bss  size:    3776 bytes
      .text size:   40448 bytes
Used Flash size :  223892 bytes
      .text     :   69460 bytes
      .rodata   :   23104 bytes
Total image size:  268796 bytes (.bin may be padded larger)
Зальем и посмотрим на минимальный цикл активности для IDF с ESP32-C3:
1642363705723.png
Всего в два раза лучше, чем у ESP8266 вышедшего за 7 лет до ESP32-C3. Виват Espressif! :)
CR2032 такого "удара" током не выдержит - просядет.
 

pvvx

Активный участник сообщества
@pvvx кажется вы нам нужны! Нужно обновлять данные с http сервера (ну можно tcp/udp) раз в 4 секунды. Какие нибудь из старых или новых ESP могут делать это со средним потреблением 10-20мА?
Espressif\esp-idf\examples\wifi\power_save

Всё по умолчанию, но вписываем SSID и password.

Время старта и соединения зависит от AP и сильно рассматривать не стоит. В данном случае активен был “Keenetic HERO 4G” и с ним происходит соединение.
1642368306520.png

Далее примерно так, если никаких пакетов для устройства в сети нет:
1642368314369.png
И если пинговать устройство:
Код:
ping -n 50 192.168.2.67                                                                                                                                                                                                                          Обмен пакетами с 192.168.2.67 по с 32 байтами данных:
Ответ от 192.168.2.67: число байт=32 время=85мс TTL=255
Ответ от 192.168.2.67: число байт=32 время=98мс TTL=255
Ответ от 192.168.2.67: число байт=32 время=110мс TTL=255
Ответ от 192.168.2.67: число байт=32 время=118мс TTL=255
Ответ от 192.168.2.67: число байт=32 время=125мс TTL=255
Ответ от 192.168.2.67: число байт=32 время=40мс TTL=255
Ответ от 192.168.2.67: число байт=32 время=50мс TTL=255
Ответ от 192.168.2.67: число байт=32 время=58мс TTL=255
Ответ от 192.168.2.67: число байт=32 время=75мс TTL=255
Ответ от 192.168.2.67: число байт=32 время=94мс TTL=255
Ответ от 192.168.2.67: число байт=32 время=3мс TTL=255
Ответ от 192.168.2.67: число байт=32 время=117мс TTL=255
Ответ от 192.168.2.67: число байт=32 время=124мс TTL=255
...
1642368885249.png

Можно сравнить с RTL872xD (1.09mA)
Т.е. опять в 10 раз больше.
 

pvvx

Активный участник сообщества
И для ESP32-C3 нужен АКБ в 10 раз больше... хорошо что по объему, а не в размерах :)
 

pvvx

Активный участник сообщества
Самый малый выловленный период активности в Espressif\esp-idf\examples\wifi\power_save:
1642370359682.png
говорит о том, что ток большой - это не CPU жрет, а включенная RF-RX на 3+ ms.
А это картинка к примеру от Espressif (наверно к просто ESP32):
1642370652196.png
 

nikolz

Well-known member
Все давно уже понятно.
проблема потребления ESP связана с большой мощностью приемо-передающей части.
По моим наблюдениям и расчетам на момент выпуска ESP8266 кпд передатчика на Wifi составлял 10%
В настоящее время видел чипы у которых кпд 30%.
Так как мощность у ESP самая большая из существующих чипов и она такая же для BLE, то и токи большие.
Чудес не бывает.
 

pvvx

Активный участник сообщества
По моим наблюдениям и расчетам на момент выпуска ESP8266 кпд передатчика на Wifi составлял 10%
В настоящее время видел чипы у которых кпд 30%.
Вы забываете, что большую часть времени RF находится в режиме приема.
У ESP это более 60 мА при -90 дБ, а у следующего поколения чипов это 6 мА как максимум и уже при -110 дБ.
Так что не в 30%, а во все 10 раз менее.
А передатчик - у ESP +9дБ - это за 250 мА, а у следующего поколения чипов это 25 mA при +10дБ.
И опять не 30% :)
А так-же во все новые встроены DC-DC, что дает ещё меньший ток от питания в 3.3В, а не тупые LDO как у Espressif.

PS: Пусть дети кушают помои. (с) Espressif
 

pvvx

Активный участник сообщества
И о утечке включенного питания для RAM - у ESP32-C3 это сотня мкА, а у следующего поколения чипов - 0.5..1.5 мкА (128 килобайт)
 

pvvx

Активный участник сообщества
CoreMark не показатель для данного класса SoC.
Более сказывается организация внутренней периферии контроллеров.
А что у ESP сделано из них хорошо и требует мало процессорного времени на обслуживание?
А ничего, и при этом вся периферия вокруг ядра/ядер кривая и самая дешевая. И всё повязано на узкую низкоскоростную шину, включая чтение программы и данных из SPI-Flash блоками в малую "кэш". Чем-то смахивает на первые поколения STM32 с наитупейшей периферией, но дешевой по самое... требующей десятки обращений к регистрам для выуживания одного байта... Самое то для Arduino :)
 

pvvx

Активный участник сообщества
@nikolz для сравнения хорошо подходит RT5350 уже массово вышедший в 2010 году (MIPS 24KEc 360 Mhz, 802.11n 1T1R 150 Mbps PHY 20 Mhz/40 MHz, 5-port 10/100 Mbps Ethernet switch and 5-port UTP PHY, USB 2.0 HOST/Device) при всех активных потрохах потребляет в пике не более 250 мА (вместе с внешней DRAM).
Т.е. имеет приблизительно равное потребление с ESP32xx. С ним и сравнивайте CoreMark :)
 
Сверху Снизу