ESP32 запускает загрузчик
У меня есть плата ESP32, подключенная к земле через переключатель. Идея состоит в том, что если я нажму кнопку и выдаю сообщение, плата перейдет в режим вспышки. Вместо,
ESP.restart()
просто перезапускает приложение, игнорируя
GPIO0
государственный.
Можно ли принудительно запустить весь процесс загрузки, может быть, с прямым JMP к вектору сброса HW?
2 ответа
По словам Ивана Грохоткова
На ESP32 есть 3 причины сброса, которые вызывают выборку обвязки GPIO: включение питания, сброс RTC WDT, сброс после отключения.
Итак, что касается кода, см. Ниже. Если контакт закреплен, он никогда не выйдет из загрузчика, который будет ждать синхронизации по последовательному порту.
#include "soc/rtc_wdt.h"
void hardReset() {
rtc_wdt_protect_off(); //Disable RTC WDT write protection
//Set stage 0 to trigger a system reset after 1000ms
rtc_wdt_set_length_of_reset_signal(RTC_WDT_SYS_RESET_SIG, RTC_WDT_LENGTH_3_2us);
rtc_wdt_set_stage(RTC_WDT_STAGE0, RTC_WDT_STAGE_ACTION_RESET_SYSTEM);
rtc_wdt_set_time(RTC_WDT_STAGE0, 10000);
rtc_wdt_enable(); //Start the RTC WDT timer
rtc_wdt_protect_on(); //Enable RTC WDT write protection
}
Лучшее решение - не использовать режим обновления прошивки для программных обновлений программного обеспечения, использовать его только для обновлений загрузчика. Разделите свой код на загрузчик, состоящий из двух частей, и логическую часть программы.
Чтобы обновить логическую часть программы, ваш загрузчик должен обработать запись оставшихся адресов, за исключением загрузчика. (Ваш код загрузчика может записать любой адрес на микроконтроллере, библиотеки файловой системы делают это) Поэтому не пытайтесь переключиться в режим обновления прошивки, который доступен для всех обновлений прошивки. Более продвинутое решение использует возможности обновления OTA, насколько это возможно.
Таким образом, вы гарантируете, что у вас всегда есть загрузочное устройство, готовое для обновления любой поврежденной логической части. Любая ошибка при записи загрузчика в полевых условиях может стоить доставки вашего устройства.