【问题标题】:ESP32 launch bootloaderESP32 启动引导加载程序
【发布时间】:2021-07-14 21:32:51
【问题描述】:

我有一块 ESP32 板,GPIO0 通过开关接地。这个想法是,如果我按下按钮并发出ESP.restart(),板将进入闪光模式。 相反,ESP.restart() 只是重新启动应用程序,而忽略 GPIO0 状态。

是否可以强制整个引导过程,也许直接 JMP 到硬件重置向量?

【问题讨论】:

  • GPIO2的状态是什么?这也需要断开或拉低才能进入 ROM 引导模式。
  • 你尝试过 ESP.reset() 吗?
  • GPIO2 根据 ESP32 引导模式选择指令 github.com/espressif/esptool/wiki/ESP32-Boot-Mode-Selection 未连接,是的,确实尝试了 ESP 重置,但没有任何区别。如果我在物理上重新启动,MCU 将完全启动,因此不会忽略 GPIO0。我还没有尝试过接地 EN,但我希望能工作。所以一定有一个跳转向量可以正确完成
  • 抱歉 esp32 没有 ESP.reset()。只有 esp8266 有它。
  • 一些徒劳的尝试: 1. 试图擦除 OTA_DATA 分区,但显然引导加载程序选择了第一个并重建它? 2. 试图擦除整个分区表,但 spi_erase_range 被设置为 abort() 作为 Arduino 库的默认值。这似乎是一个自定义引导加载程序,如果 OTA_DATA 分区为空白或某种类似的机制是可行的方法,它不会引导。

标签: esp32 arduino-esp32


【解决方案1】:

根据Ivan Grokhotkov

在 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
}

【讨论】:

  • 答案如何?
  • ESP.restart() 只是重新启动应用程序,忽略 GPIO0 状态。上面的解决方案是重启开发板并允许使用 GPIO0 引脚来决定引导加载程序是否应该启动应用程序。
  • 所以答案是硬件看门狗重置,这是如何做到的
【解决方案2】:

更好的解决方案是不使用固件更新模式进行编程软件更新,仅将其用于引导加载程序更新。将您的代码分成两部分引导加载程序和逻辑程序部分。

要更新您的逻辑程序部分,您的引导加载程序应处理除引导加载程序之外的剩余地址的烧录。 (您的引导加载程序代码可以烧录微控制器上的任何地址,文件系统库会这样做)所以不要尝试切换到可用于整个固件更新的固件更新模式。更高级的解决方案是尽可能使用 OTA 更新功能。

通过这种方式,您可以保证现场始终拥有可启动设备,随时准备更新任何损坏的逻辑部分。在现场刻录引导加载程序期间的任何错误都可能导致您的设备运输成本下降。

【讨论】:

  • 理想情况下,我完全同意。我的固件确实支持OTA更新。问题是,在开发过程中可能会引入破坏 OTA 功能的错误,所以——当然,我是在谈论开发而不是部署——重要的是有一种方法可以通过电线对电路板进行闪存。我工作的第一版电路板没有这种简单的保护措施,我们不得不扔掉一些片段,然后才能确定每次启动时必须运行的代码序列。而且每隔一段时间也会意外损坏。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-04
  • 1970-01-01
  • 2014-10-03
  • 2021-04-17
相关资源
最近更新 更多