Warum 3 Partitionen für OTA? I (122) boot: 3 factory factory app 00 00 00010000 00100000 I (129) boot: 4 ota_0 OTA app 00 10 00110000 00100000 I (137) boot: 5 ota_1 OTA app 00 11 00210000 00100000 Ich brauche doch nur die aktuelle (Boot)Partition, wo mein Programm läuft und dann lade ich das Update in die ota_0, prüfe, mache, tue. Wenns passt, ändert sich das Bootflag und die neue Version geht an den Start. Beim nächsten Update, gleiches Spiel. Ich frage, weil ich den Platz brauche. esp_image: Image length 1112544 doesn't fit in partition length 1048576
Hallo, ich habe mit mit der Partitiontable des ESP32 nicht im Detail auseinandergesetzt, einfach weil ich es bisher nicht mußte. Die Arduino IDE bietet mir zumindest als Partition an: Minimal SPIFFS (1.9MB APP with OTA/190kB SPIFFS). Sind dann 1966080 Bytes für die App und das hat mir bisher immer gereicht. Gruß aus Berlin Michael
Das erste ist die Factory Partition. Die anderen beiden sind die OTAs. Factory Partition wird durch ein OTA nie überschrieben. Siehe hier: https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/partition-tables.html#subtype
W3ll S. schrieb: > Warum 3 Partitionen für OTA? https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/partition-tables.html
Hallo, Danke für die Ergänzung. Man kann sich ja auch in der ArduinoIDE gern noch eigene Partitiontable anlegen, in ..\packages\esp32\hardware\esp32\1.0.4\tools\partitions liegen die Tabellen, die boards.txt muß man dann noch anpassen/ergänzen. Gruß aus Berlin Michael
Hmm egal, es klappt.
1 | I (63) boot: ## Label Usage Type ST Offset Length |
2 | I (71) boot: 0 nvs WiFi data 01 02 00009000 00004000 |
3 | I (78) boot: 1 otadata OTA data 01 00 0000d000 00002000 |
4 | I (85) boot: 2 phy_init RF data 01 01 0000f000 00001000 |
5 | I (93) boot: 3 ota_0 OTA app 00 10 00100000 00180000 |
6 | I (100) boot: 4 ota_1 OTA app 00 11 00280000 00180000 |
7 | I (108) boot: End of partition table |
8 | I (112) boot: No factory image, trying OTA 0 |
1 | I (5212) esp_https_ota: Writing to partition subtype 17 at offset 0x280000 |
2 | I (5302) advanced_https_ota_example: Running firmware version: 1 |
3 | W (5302) advanced_https_ota_example: Current running version is the same as a new. We will not continue the update. |
Halo, ich wäre sehr an einer näheren Beschreibung der Prozedur des OTA interessiert. Mit dem RPi lade ich beim Booten den Python Code vom Server und starte diesen dann. Wäre das mit dem EPS32 möglich, ohne die Partitionen anzugreifen?
Ahmm, der/die/das OTA des ESP32 ist nichts weiter als ein Programm, dass auf dem ESP laeuft und beim Booten sich von einem Webserver eine neue Firmware downloadet. Die vergle9cht der ESP dann mit der aktuellen laufenden und switch dann, wenn ok. Was willst Du genau machen?
W3ll S. schrieb: > Ahmm, der/die/das OTA des ESP32 ist nichts weiter als ein > Programm, dass > auf dem ESP laeuft und beim Booten sich von einem Webserver eine neue > Firmware downloadet. Die vergle9cht der ESP dann mit der aktuellen > laufenden und switch dann, wenn ok. Das ist falsch. Der Download für das Update läßt sich jederzeit anstossen und läuft im Hintergrund. Gespeichert wird auf die gerade nicht aktive OTA-Partition. Nach dem manuell durchgeführten Restart wird das neue Image aktiv. Wenn man (natürlich nur zum Testen!) http erlaubt ist das ganz simpel ein
1 | const esp_http_client_config_t config = { |
2 | .url = "http://updateserver/update.bin", |
3 | };
|
4 | esp_err_t err = esp_https_ota(&config); |
5 | if(err != ESP_OK){ |
6 | ESP_LOGE(TAG, "OTA fehlgeschlagen. Error:0x%x", err); |
7 | }else{ |
8 | ESP_LOGI(TAG, "OTA erfolgreich."); |
9 | esp_restart(); |
10 | }
|
Trivialer geht es nicht. Bei HTTPS muss man natürlich noch ein Zertifikat reinfummeln.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.