Skip to content

esp32-s2-solo OTA not working #6678

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
1 task done
nilber opened this issue May 3, 2022 · 2 comments
Closed
1 task done

esp32-s2-solo OTA not working #6678

nilber opened this issue May 3, 2022 · 2 comments
Labels
IDE: PlaformIO Issue relates to PlatformIO IDE

Comments

@nilber
Copy link

nilber commented May 3, 2022

Board

esp32-s2-solo

Device Description

Makerfabs-ESP32-S2-Parallel-TFT-with-Touch

Hardware Configuration

[env:develope]
platform = espressif32
board = featheresp32-s2
framework = arduino

Version

v2.0.1

IDE Name

PlatformIO

Operating System

macOS

Flash frequency

240MHz

PSRAM enabled

yes

Upload speed

115200

Description

I've tried several tutorials, in several different ways, Amazon S3, HttpUpload, SD Card, in all the same error: "Flash Read Failed"

I located the origin in

Update.h
(#define UPDATE_ERROR_READ(3)

Update.cpp
return("Flash Read Failed");)

In this line of code the error:

line 242 Update.cpp

if(!_enablePartition(_partition) || !_partitionIsBootable(_partition)) {
             _abort(UPDATE_ERROR_READ);
             return false;
         }

I've tried all versions arduino-esp32

2.0.0
2.0.1
2.0.2
2.0.3-RC1

There is another strange thing, sometimes, right after erasing the flash and uploading a new file system with OTA, it displays the error message, but when resetting the ESP32-S2 it is up to date.

But from here on, new OTA updates don't work. Uploading via USB doesn't work either, I have to do the disk erase again.

# Name,   Type, SubType,  Offset,   Size,  Flags
nvs,      data, nvs,      0x9000,  0x4000
otadata,  data, ota,      0xd000,  0x2000
phy_init, data, phy,      0xf000,  0x1000
factory,  app,  factory,  0x10000,  1M
ota_0,    app,  ota_0,    ,         1M
ota_1,    app,  ota_1,    ,         1M
spiffs,  data, spiffs, ,        0x1000

Sketch

/*  Programa para ESP32 antes da atualização OTA */
#include <WiFi.h>
#include <WiFiClient.h>
#include <WebServer.h>
#include <ESPmDNS.h>
#include <Update.h>
 
/* Constantes - conexão wi-fi e webserver */
const char* host = "esp32";
const char* ssid = ""; /* coloque aqui o nome da rede wi-fi que o ESP32 deve se conectar */
const char* password = ""; /* coloque aqui a senha da rede wi-fi que o ESP32 deve se conectar */
 
/* Variáveis globais */
int contador_ms = 0;
 
/* Webserver para se comunicar via browser com ESP32  */
WebServer server(80);
 
/* Códigos da página que será aberta no browser 
   (quando comunicar via browser com o ESP32) 
   Esta página exigirá um login e senha, de modo que somente 
   quem tenha estas informações consiga atualizar o firmware
   do ESP32 de forma OTA */
const char* loginIndex = 
 "<form name='loginForm'>"
    "<table width='20%' bgcolor='A09F9F' align='center'>"
        "<tr>"
            "<td colspan=2>"
                "<center><font size=4><b>ESP32 - identifique-se</b></font></center>"
                "<br>"
            "</td>"
            "<br>"
            "<br>"
        "</tr>"
        "<td>Login:</td>"
        "<td><input type='text' size=25 name='userid'><br></td>"
        "</tr>"
        "<br>"
        "<br>"
        "<tr>"
            "<td>Senha:</td>"
            "<td><input type='Password' size=25 name='pwd'><br></td>"
            "<br>"
            "<br>"
        "</tr>"
        "<tr>"
            "<td><input type='submit' onclick='check(this.form)' value='Identificar'></td>"
        "</tr>"
    "</table>"
"</form>"
"<script>"
    "function check(form)"
    "{"
    "if(form.userid.value=='admin' && form.pwd.value=='admin')"
    "{"
    "window.open('/serverIndex')"
    "}"
    "else"
    "{"
    " alert('Login ou senha inválidos')"
    "}"
    "}"
"</script>";
  
const char* serverIndex = 
"<script src='https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js'></script>"
"<form method='POST' action='#' enctype='multipart/form-data' id='upload_form'>"
   "<input type='file' name='update'>"
        "<input type='submit' value='Update'>"
    "</form>"
 "<div id='prg'>Progresso: 0%</div>"
 "<script>"
  "$('form').submit(function(e){"
  "e.preventDefault();"
  "var form = $('#upload_form')[0];"
  "var data = new FormData(form);"
  " $.ajax({"
  "url: '/update',"
  "type: 'POST',"
  "data: data,"
  "contentType: false,"
  "processData:false,"
  "xhr: function() {"
  "var xhr = new window.XMLHttpRequest();"
  "xhr.upload.addEventListener('progress', function(evt) {"
  "if (evt.lengthComputable) {"
  "var per = evt.loaded / evt.total;"
  "$('#prg').html('Progresso: ' + Math.round(per*100) + '%');"
  "}"
  "}, false);"
  "return xhr;"
  "},"
  "success:function(d, s) {"
  "console.log('Sucesso!')"
 "},"
 "error: function (a, b, c) {"
 "}"
 "});"
 "});"
 "</script>";
 
void setup(void) 
{
    Serial.begin(115200);
 
    /* Conecta-se a rede wi-fi */
    WiFi.begin(ssid, password);
    Serial.println("");
 
    while (WiFi.status() != WL_CONNECTED) 
    {
        delay(500);
        Serial.print(".");
    }
     
    Serial.println("");
    Serial.print("Conectado a rede wi-fi ");
    Serial.println(ssid);
    Serial.print("IP obtido: ");
    Serial.println(WiFi.localIP());
 
    /* Usa MDNS para resolver o DNS */
    if (!MDNS.begin(host)) 
    { 
        //http://esp32.local
        Serial.println("Erro ao configurar mDNS. O ESP32 vai reiniciar em 1s...");
        delay(1000);
        ESP.restart();        
    }
   
    Serial.println("mDNS configurado e inicializado;");
   
    /* Configfura as páginas de login e upload de firmware OTA */
    server.on("/", HTTP_GET, []() 
    {
        server.sendHeader("Connection", "close");
        server.send(200, "text/html", loginIndex);
    });
     
    server.on("/serverIndex", HTTP_GET, []() 
    {
        server.sendHeader("Connection", "close");
        server.send(200, "text/html", serverIndex);
    });
   
    /* Define tratamentos do update de firmware OTA */
    server.on("/update", HTTP_POST, []() 
    {
        server.sendHeader("Connection", "close");
        server.send(200, "text/plain", (Update.hasError()) ? "FAIL" : "OK");
        ESP.restart();
    }, []() {
        HTTPUpload& upload = server.upload();
         
        if (upload.status == UPLOAD_FILE_START) 
        {
            /* Inicio do upload de firmware OTA */
            Serial.printf("Update: %s\n", upload.filename.c_str());
            if (!Update.begin(UPDATE_SIZE_UNKNOWN)) 
                Update.printError(Serial);
        } 
        else if (upload.status == UPLOAD_FILE_WRITE) 
        {
            /* Escrevendo firmware enviado na flash do ESP32 */
            if (Update.write(upload.buf, upload.currentSize) != upload.currentSize) 
                Update.printError(Serial);      
        } 
        else if (upload.status == UPLOAD_FILE_END) 
        {
            /* Final de upload */
            if (Update.end(true))             
                Serial.printf("Sucesso no update de firmware: %u\nReiniciando ESP32...\n", upload.totalSize);
            else
                Update.printError(Serial);
        }   
    });
    server.begin();
}
 
void loop() 
{
    server.handleClient();
    delay(1);
 
    contador_ms++;
 
    if (contador_ms >= 1000)
    {    
        Serial.println("Programa V2");
        contador_ms = 0;
    }
}

Debug Message

Programa V2
Programa V2
Update: v3.bin
Flash Read Failed

Other Steps to Reproduce

No response

I have checked existing issues, online documentation and the Troubleshooting Guide

  • I confirm I have checked existing issues, online documentation and Troubleshooting guide.
@nilber nilber added the Status: Awaiting triage Issue is waiting for triage label May 3, 2022
@nilber nilber changed the title esp32-s2 esp32-s2-solo OTA not working May 3, 2022
@Jason2866
Copy link
Collaborator

Jason2866 commented May 3, 2022

OTA did not work for our Project with all single ESP32 mcu. We found a solution and opened the PR #5426 which fixed the issue for us.
You can try with

platform = https://github.com/tasmota/platform-espressif32/releases/download/v2.0.3rc1/platform-espressif32-2.0.3new.zip

@nilber
Copy link
Author

nilber commented May 3, 2022

I was 24 hours without sleep looking for a solution, I found this and now everything works :)

Hope it can help more people


[env:development]
platform = espressif32
platform_packages =
    platformio/framework-arduinoespressif32 @ https://github.com/espressif/arduino-esp32.git#2.0.1
	tool-esptoolpy@ ~1.30100.210531
	tool-mkspiffs@ ~2.230.0
	toolchain-esp32s2ulp@ ~1.22851.191205	  
; platform = https://github.com/platformio/platform-espressif32.git
; platform_packages = framework-arduinoespressif32 @ https://github.com/espressif/arduino-esp32/releases/download/2.0.3-RC1/esp32-2.0.3-RC1.zip

; board = featheresp32-s2
framework = arduino

board = esp32dev
build_flags = -D  CONFIG_FREERTOS_UNICORE -D CONFIG_ESP32_DEFAULT_CPU_FREQ_80
board_build.mcu = esp32s2
; board_build.partitions = huge_app.csv
board_build.partitions = partition_ota.csv
board_build.variant = esp32s2
board_build.f_cpu = 240000000L
board_build.f_flash = 80000000L
board_build.flash_mode = qio
board_build.arduino.ldscript = esp32s2_out.ld

@nilber nilber closed this as completed May 3, 2022
@VojtechBartoska VojtechBartoska added IDE: PlaformIO Issue relates to PlatformIO IDE and removed Status: Awaiting triage Issue is waiting for triage labels May 3, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
IDE: PlaformIO Issue relates to PlatformIO IDE
Projects
None yet
Development

No branches or pull requests

3 participants