• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе 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

Активный участник сообщества
A что такое ваши 6..7 мА в "2"?
 

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

Что не так?
 

Вложения

aZholtikov

Active member
Чудеса... На ESP32 все норм, на ESP32C3 нет... Все что можно "потыкал"... Надо думать...
 

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
 
Сверху Снизу