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

ESP32C3 заглушка DeepSleep перестала исполняться

nikolz

Well-known member
Возникла такая проблема.
В ESP-idf есть примеры.
Взял пример esp-idf\examples\system\deep_sleep_wake_stub
Он очень простой.
В нем две функции
1) основная: wake_stub_example_main.c
2) заглушка: rtc_wake_stub_example.c
В основной запускается режим deepSleep и устанавливается вторая функция как заглушка из deepsleep
Когда процессор выходи из сна он запускает заглушку , которая находится в FAST RAM
В итоге заглушка запускается очень быстро примерно 6 ms.
Сначала тест исполнялся замечательно.
Но потом ESP перестал исполнять заглушку. Посмотрел в интернете вроде бы такая проблема встречалась, но ее решение не нашел.
Кто что знает по данному вопросу?
 

nikolz

Well-known member
это я читал.
Разобрался. Все работает.
Просто вывод журнала как-то отключился. Поэтому создавалось впечатление, что заглушка не работает.
получилась такая картинка потребления (мА) (время ms):
1746353262758.png
1 - это обычный выход
2- заглушка
Но время исполнения заглушки, т е возврат в сон не получается меньше 12 ms.
 

pvvx

Активный участник сообщества
Просто вывод журнала как-то отключился. Поэтому создавалось впечатление, что заглушка не работает.
...
Но время исполнения заглушки, т е возврат в сон не получается меньше 12 ms.
А вывод в журнал сколько длится?
 

nikolz

Well-known member
А вывод в журнал сколько длится?
судя по документации 6.5ms.
Но у меня сейчас его нет, вернее сказать нет ничего в терминале. Замерить не могу так как его нет.
По какой-то причине отключился вывод в UART при работе заглушки.
Судя по замерам выход в заглушку происходит быстро (менее 1 ms) в заглушке данного теста всего лишь цикл подсчета числа выходов и возврат в deepsleep. И это исполняется 12 ms.
--------------------
Не могу найти файл, в котором задаются параметры конфигурации изначально.
sdkconfig всегда возвращается в исходное состояние.
В приведенной ссылке не указано что включено а что нет.
У меня получилось(см выше на картинке) сначала импульс 17 mA, потом 6 mA в заглушке при частоте 80 MHz. Но в этом режиме работает лишь fast RAM и процессор остальное выключено, как указано в документации.
 

pvvx

Активный участник сообщества
судя по документации 6.5ms.
Но у меня сейчас его нет, вернее сказать нет ничего в терминале. Замерить не могу так как его нет.
По какой-то причине отключился вывод в UART при работе заглушки.
Судя по замерам выход в заглушку происходит быстро (менее 1 ms) в заглушке данного теста всего лишь цикл подсчета числа выходов и возврат в deepsleep. И это исполняется 12 ms.
Код:
// Print the counter value and wakeup cause.
    ESP_RTC_LOGI("wake stub: wakeup count is %d, wakeup cause is %d, wakeup cost %ld us", s_count, wakeup_cause, wakeup_time);
Код:
printf("Wake up from timer. Time spent in deep sleep: %dms\n", sleep_time_ms);
...
printf("Enabling timer wakeup, %ds\n", wakeup_time_sec);
Т.е. в UART выводится более 150 символов, что составляет: 150*10/115200=0.01302 секунды или 13 мс
На вашем графике тока этого вывода (изменения тока в моменты вывода в UART) не видно.
В приведенной ссылке не указано что включено а что нет.
У меня получилось(см выше на картинке) сначала импульс 17 mA, потом 6 mA в заглушке при частоте 80 MHz. Но в этом режиме работает лишь fast RAM и процессор остальное выключено, как указано в документации.
Там всё и так ясно - там измерен ток в deep-sleep. А это потребление всех лишних компонентов. Если его вычесть из измерений, то получим ток самой ESP32-C3.
И ток в IDLE при CPU 40MHz уже больше чем в вашем замере, что говорит о вашем неверном измерении... Или вы измеряете что-то не то.
 

nikolz

Well-known member
Код:
// Print the counter value and wakeup cause.
    ESP_RTC_LOGI("wake stub: wakeup count is %d, wakeup cause is %d, wakeup cost %ld us", s_count, wakeup_cause, wakeup_time);
Код:
printf("Wake up from timer. Time spent in deep sleep: %dms\n", sleep_time_ms);
...
printf("Enabling timer wakeup, %ds\n", wakeup_time_sec);
Т.е. в UART выводится более 150 символов, что составляет: 150*10/115200=0.01302 секунды или 13 мс
На вашем графике тока этого вывода (изменения тока в моменты вывода в UART) не видно.
Там всё и так ясно - там измерен ток в deep-sleep. А это потребление всех лишних компонентов. Если его вычесть из измерений, то получим ток самой ESP32-C3.
И ток в IDLE при CPU 40MHz уже больше чем в вашем замере, что говорит о вашем неверном измерении... Или вы измеряете что-то не то.
Я измеряю ток потребления через Vc=5 вольт на модуле ESP32C3 super_mini.
Возможно есть потребление через адаптер USB-UART.
Изначально у меня данный тест запускал как описано в док.
Потом возможно что-то затерлось в модуле.
Теперь никакого вывода протокола нет ,
даже после полной переустановке esp-idf и новой сборке.
 

pvvx

Активный участник сообщества
Заново - в README.md описано, как включается и отключается вывод журнала и что необходимо установить в конфигураторе.

И вообще в документации всех MCU/SoC всегда указано время пробуждения чипа. В доках всегда описывают время стабилизации работы кварцевого генератора и прочих тактовых, типа PLL. Но у ESP я этого не нашел. Наверно это сИкретные данные :)
 

nikolz

Well-known member
Заново - в README.md описано, как включается и отключается вывод журнала и что необходимо установить в конфигураторе.

И вообще в документации всех MCU/SoC всегда указано время пробуждения чипа. В доках всегда описывают время стабилизации работы кварцевого генератора и прочих тактовых, типа PLL. Но у ESP я этого не нашел. Наверно это сИкретные данные :)
Прикол в том, что я ничего не отключал.
Но вывод протокола исчез. Более того, в заглушке перестал работать вывод в UART.
Переустановка ESP-idf ничего не изменила протокол исчез.
 

nikolz

Well-known member
Переустановил ESP-idf.
Протокол заглушки так и не появился.
К этому добавился вывод протокола начальной загрузки.
Раньше я его отключал.
Теперь никакими танцами с бубном он не отключается .
Выводит вот такую хрень. Никакие запреты это не отключают.
1746523126816.png
Что не так?
 

aZholtikov

Active member
Предложение конечно дурацкое, но иногда "глаз замыливается"... Можно sdkconfig посмотреть?
 

nikolz

Well-known member
Предложение конечно дурацкое, но иногда "глаз замыливается"... Можно sdkconfig посмотреть?
Прикрепил весь.
То что отвечает за лог здесь:


#
# Log
#
CONFIG_BOOTLOADER_LOG_LEVEL_NONE=y
# CONFIG_BOOTLOADER_LOG_LEVEL_ERROR is not set
# CONFIG_BOOTLOADER_LOG_LEVEL_WARN is not set
# CONFIG_BOOTLOADER_LOG_LEVEL_INFO is not set
# CONFIG_BOOTLOADER_LOG_LEVEL_DEBUG is not set
# CONFIG_BOOTLOADER_LOG_LEVEL_VERBOSE is not set
CONFIG_BOOTLOADER_LOG_LEVEL=0

#
# Boot ROM Behavior
#
# CONFIG_BOOT_ROM_LOG_ALWAYS_ON is not set
CONFIG_BOOT_ROM_LOG_ALWAYS_OFF=y
# CONFIG_BOOT_ROM_LOG_ON_GPIO_HIGH is not set
# CONFIG_BOOT_ROM_LOG_ON_GPIO_LOW is not set
# end of Boot ROM Behavior

Что не так?
 

Вложения

nikolz

Well-known member
прикольно то, что на предыдущей установке ESP-idf у меня Log загрузчика отключался.
Т е из всего что на картинке выше выводилось лишь строки начиная с nktest это начало программы
 

nikolz

Well-known member
проблема решена.
В sdkconfig есть повторные строки включения Log стр. 1272
исправил так:
CONFIG_LOG_DEFAULT_LEVEL_NONE=y
получилось так:
1746539452260.png
 

pvvx

Активный участник сообщества
проблема решена.
В sdkconfig есть повторные строки включения Log стр. 1272
исправил так:
CONFIG_LOG_DEFAULT_LEVEL_NONE=y
получилось так:
Посмотреть вложение 14449
То есть, спустя несколько дней, наконец прочитали:
Надо внимательнее читать README.md
 
Сверху Снизу