esp8266固件更新后无法启动

时间:2019-01-25 21:38:42

标签: esp8266

我正在使用以下代码从Flash更新esp8266的固件:

RunBinary(const String& strFileName)
{
  Debug("Flashing binary " + strFileName);

  File file = SPIFFS.open(strFileName, "r");
  uint32_t maxSketchSpace = (ESP.getFreeSketchSpace() - 0x1000) & 0xFFFFF000;

  if (file)
  {
    if (!Update.begin(maxSketchSpace, U_FLASH))
    {
      Update.printError(Serial);
      Debug("Failed to load the task binary");
    }
    else
    {
      while (file.available())
      {
        uint8_t ibuffer[128];
        file.read((uint8_t *)ibuffer, 128);
        Update.write(ibuffer, sizeof(ibuffer));
      }

      file.close();

      if (Update.end(true))
      {
        Serial.println("Update Success" ); 
        return true;
      }
    }
  }
  else
    Serial.printf("Failed to open binary file");

  Update.printError(Serial);
  return false;
}

在上述返回true之后,我使用以下命令重新启动esp:

        if (RunBinary("/Binary.bin") == true)
        {
          ESP.restart();
        }

它随机运行,有时会启动新程序-但大多数情况下,它会带着一些垃圾返回

Flashing binary /Binary.bin
Update Success
?)²
ôDHB÷^HLlÿ

并永久挂起。

在哪里寻找原因?

SKETCH SIZE     : 363264
FREE SKETCH SIZE: 2781184
APP START OFFSET: 1000
Sketch size: 363264
Free size: 2781184
Heap: 48056
Boot Vers: 31
CPU: 160MHz
SDK: 3.0.0-dev(c0f7b44)
Chip ID: 13586851
Flash ID: 1458400
Flash Size: 4194304
Vcc: 65535

在更新后进行编辑,我根据注释将串行速度更改为74880,这是输出

Flashing binary /Binary.bin
Update Success
@ŠZ-nPáM%ÌÍ %Y)Q
    ãoxãÊN
ets Jan  8 2013,rst cause:2, boot mode:(3,6)

load 0x4010f000, len 1384, room 16 
tail 8
chksum 0x2d
csum 0x2d
vffffffff
~ld

1 个答案:

答案 0 :(得分:0)

rst cause:2表示CPU由于“外部重置或从深度睡眠模式唤醒”而重新启动了

如果要加载的代码使用深度睡眠,或者如果您有任何连接到ESP8266复位引脚的代码,那将是查找问题的第一位。复位线可能被意外地保持为低电平。

如果不是,则另一个可能的原因是电源。 ESP8266有时会消耗大量电流,如果电源无法处理,可能会导致电压下降。这可能导致不稳定的崩溃,重启后报告为rst cause: 2

如果您有设备可以在更新后监视电压和电流,则可以尝试-您可能会看到电流尖峰或电压下降。

如果没有,您可以将其连接至更高电流的电源(例如稳压电源)-尝试使用至少3.3V,500mA的电流-您可能需要更多电流,具体取决于电路中使用的其他硬件。

如果这样做的话,也有可能在VCC和GND之间增加一个大电容(也许是470µF或类似的电容),可以使电源平滑。我也看到过建议在VCC和GND之间额外增加一个0.1pF的去耦电容,该电容应在物理上尽可能靠近ESP8266。

最后一种可能性不同-ESP8266中存在一个错误,该错误会导致在串行固件更新后OTA更新失败。串行更新解决此问题后,发出硬件重置。我认为您不会因为这个问题而看到rst cause:2,但极有可能是造成您悲伤的原因。您可以在https://github.com/esp8266/Arduino/issues/2478

上了解更多信息

您可以在ESP8266 Reset Causes and Common Fatal Exception Causes中找到有关重置原因的更多信息。