ESP32 启动引导程序
ESP32 launch bootloader
我有一块 ESP32 板 GPIO0
通过开关接地。我的想法是,如果我按下按钮并发出 ESP.restart()
,电路板将进入闪光模式。
相反,ESP.restart()
只是重新启动应用程序,忽略 GPIO0
状态。
是否可以强制执行整个引导过程,也许可以使用直接 JMP 到硬件重置向量?
On ESP32 there are 3 reset reasons which cause strapping GPIOs to be sampled: power-on, RTC WDT reset, brownout reset.
所以在代码方面,见下文。如果引脚被绑住,它将永远不会脱离等待串行同步的引导加载程序。
#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 更新功能。
通过这种方式,您可以保证在现场始终拥有可启动设备,它已准备好更新任何损坏的逻辑部分。在现场烧录引导加载程序时的任何错误都可能导致您的设备运费。
我有一块 ESP32 板 GPIO0
通过开关接地。我的想法是,如果我按下按钮并发出 ESP.restart()
,电路板将进入闪光模式。
相反,ESP.restart()
只是重新启动应用程序,忽略 GPIO0
状态。
是否可以强制执行整个引导过程,也许可以使用直接 JMP 到硬件重置向量?
On ESP32 there are 3 reset reasons which cause strapping GPIOs to be sampled: power-on, RTC WDT reset, brownout reset.
所以在代码方面,见下文。如果引脚被绑住,它将永远不会脱离等待串行同步的引导加载程序。
#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 更新功能。
通过这种方式,您可以保证在现场始终拥有可启动设备,它已准备好更新任何损坏的逻辑部分。在现场烧录引导加载程序时的任何错误都可能导致您的设备运费。