esp8266 не запускается после обновления прошивки - PullRequest
0 голосов
/ 26 января 2019

Я обновляю прошивку для моего 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 голосов
/ 27 января 2019

rst cause:2 означает, что процессор перезагружен из-за «Внешнего сброса или пробуждения из глубокого сна»

Если загружаемый код использует глубокий сон или если у вас есть что-либо, подключенное к ESP8266сбросить штифт, это будет первое место для поиска проблем.Возможно, линия сброса неожиданно удерживается на низком уровне.

Если нет, другой вероятной причиной является питание.ESP8266 может иногда потреблять удивительное количество тока и может вызвать падение напряжения, если блок питания не может справиться с этим.Это может привести к ошибочным сбоям, которые при перезапуске выдаются как * 1006. *

Если у вас есть оборудование для контроля напряжения и тока после обновления, я бы попробовал это - вы можете увидеть всплеск наток или провал напряжения.

Если нет, вы можете подключить его к источнику питания с более высоким током, например, к регулируемому источнику питания - попробуйте использовать напряжение не менее 3,3 В, 500 мА - вам может потребоваться больший ток в зависимости отна другом оборудовании, которое имеется в вашей схеме.

Также возможно, что добавление большого конденсатора (возможно, 470 мкФ или что-то подобное) между VCC и GND может сгладить питание, если это проблема.Я также видел предложения о дополнительном добавлении развязывающего конденсатора 0,1 мкФ к VCC и GND, максимально приближенному к ESP8266.

Еще одна возможность, другая - в ESP8266 есть ошибка, которая вызывает обновления OTA длясбой после последовательного обновления прошивки.Выполнение аппаратного сброса после последовательного обновления устраняет проблему.Я не думаю, что вы увидите rst cause:2 из-за этой проблемы, но есть небольшой шанс, что это вызывает у вас горе.Вы можете прочитать больше об этом в https://github.com/esp8266/Arduino/issues/2478

Вы можете найти больше информации о причинах сброса в ESP8266 Причины сброса и Распространенные причины фатальных исключений .

...