Forum: Mikrocontroller und Digitale Elektronik ESP8266 OTA bei nur 1 MB flash


von hacker-tobi (Gast)


Lesenswert?

Hi,

mein Projekt TOISWITCH 
(Beitrag "TOISWITCH - IoT I/O-Server für ESP8266")
 bietet schon seit längerem OTA für alle ESP Boards mit mehr als 1MB 
Flash an.

Jetzt sitze ich gerade daran, diese Funktion auch für Boards mit nur 1 
MB Flash umzusetzen.
Das ich hier mit einer Interims-Fimware für OTA arbeiten muss ist mir 
klar.
Diese Interims-Firmware habe ich auch schon testweise gebaut, aber sie 
wird selbst mit allen Optimierungen derzeit immer noch 500k(!) groß.
Ich habe da jetzt noch nicht viel Zeit rein gesteckt, das Ding ist weder 
fertig noch perfekt.

https://sourceforge.net/p/toiswitch/code/ci/master/tree/1M/Updater/

Die Partition Table sieht wie folgt aus.
OTA_1 könnte ich auf max 300k erweitern.
1
# Name,   Type, SubType, Offset,  Size, Flags
2
nvs,      data, nvs,     0x9000,  0x4000
3
otadata,  data, ota,     0xD000,  0x2000
4
phy_init, data, phy,     0xf000,  0x1000 
5
ota_0,    0,    ota_0,   0x10000, 640k,
6
ota_1,    0,    ota_1,   0xB0000, 256k,
7
storage,  data, spiffs,  0xFC000, 16k,

Meine Fragen:

-Gibt es evtl. einen OTA-Updater, der kompakt genug ist, und sich für 
meine Zwecke modifieren lässt bzw. hat jemand Ideen, wie ich meinen 
Updater klein genug bekomme?

-Wenn ich recht entsinne, gibt es bezüglich der Größe und Lage der 
Partitionen für OTA Beschränkungen seitens des Espressif boot loaders.
So dürfen Partitionen imHO nur genaue Vielfache von 64k Größe haben, und 
die Lage von OTA_0 und OTA_1 muss in fester Beziehung zueinander stehen 
(z.B. 0x10000 für OTA_0 und 0x110000 für OTA_1), was aber bei 1MB nur 
möglich ist, wenn die Firmware nicht größer ist als ca 500k.
Das wäre mit meiner aktuellen Partition Table nicht gegeben.

-Wie machen das Tasmota&co? Das dort mit einer Interimsfirmware 
gearbeitet wird ist mir klar, aber wie wird dort mit den Einschränkungen 
seitens des Bootloader umgegangen?

Wenn euch noch Infos fehlen, fragt gern.

gruß

tobi

von EAF (Gast)


Lesenswert?

hacker-tobi schrieb:
> hat jemand Ideen, wie ich meinen
> Updater klein genug bekomme?

Nein!

Kann aber sagen, wie ich das tue......

Habe einige ES8266-01S im Einsatz.
Auch mit zu großem Programm.
Und mit Dateisystem im Flash

Habe bei diesen das 1MB Flash durch 4MB oder auch 16MB ersetzt.
Kosteten dunnemals rund 35 Cent beim Chinesen.

Meine Notizen sagen:
W25Q32FW
W25Q128F

von hacker-tobi (Gast)


Lesenswert?

Das hilft mir leider nicht da es hier um iot devices geht, die zum 
Grossteil mit dem esp8285 arbeiten, der den flash integriert hat.

Klar tauschen der kompletten module ist möglich aber ich möchte 
möglichst ohne auskommen. Und es gibt ja Lösungen wo das funktioniert 
ergo muss es ja machbar sein.

von Stefan F. (Gast)


Lesenswert?

Die (alte) Basis Firmware von SDK 1.5.4 belegt ungefähr 250kB. Damit ist 
OTA problemlos machbar.

von hacker-tobi (Gast)


Lesenswert?

@stefan nonos oder OS Variante?

von Stefan F. (Gast)


Lesenswert?

hacker-tobi schrieb:
> @stefan nonos oder OS Variante?

nonos

von EAF (Gast)


Lesenswert?

hacker-tobi schrieb:
> da es hier um iot devices geht, die zum
> Grossteil mit dem esp8285
Das konnte ich ja nicht ahnen, wenn du ESP8266 sagst.....

von hacker-tobi (Gast)


Lesenswert?

Naja der esp8285 ist ein esp8266 mit 1 mb flash on chip.

von hacker-tobi (Gast)


Lesenswert?

Ich nutze aktuell das freertos SDK.

Weis jemand wie das bei tasmota gelöst ist oder hat jemand selbst schon 
mal eine Lösung geschrieben?

von J. S. (jojos)


Lesenswert?

Frag doch einfach im Tasmota Discord.

von hacker-tobi (Gast)


Lesenswert?

Tasmota ist ja nur ein Beispiel.

Meine Frage ist, ob jemand im forum das schonmal selbst geschrieben hat 
und mir praktische tips geben kann oder ob es ein funktionierendes tool 
gibt das ich nutzen kann.

von hacker-tobi (Gast)


Lesenswert?

Keiner eine Idee?

von EAF (Gast)


Lesenswert?

hacker-tobi schrieb:
> Keiner eine Idee?

Wie man einen ausgewachsenen afrikanischen Elefanten in einen VW Käfer 
bekommt?
Nöö.....

von hacker-tobi (Gast)


Lesenswert?

@eaf:
Merkwürdige Analogie.

Das es möglich ist, wurde ja schon bewiesen.

Wie ich im eröffnungspost bereits schrieb ist mir klar, das OTA hier nur 
mit dem Zwischenschritt über eine minimale updater Software 
funktionieren kann.

Ich frage mich, ob es eben auch mit dem aktuellen rtos SDK möglich ist.
Oder ob jemand einen link o.ä. zu einer funktionierenden Lösung hat.

von hacker-tobi (Gast)


Lesenswert?

Ich hab mal ein wenig weiter geforscht.

Wenn ich die 4 Aufrufe

esp_wifi_init(&cfg)
esp_wifi_set_mode(WIFI_MODE_STA)
esp_wifi_set_config(ESP_IF_WIFI_STA, &wifi_config)
esp_wifi_start()

deaktiviere, spart das 170 kB ein. Nur habe ich dann kein WiFi mehr ;)

Gibt es etwas, was ich tun kann, um die Größe des Wifi/IP-Stacks hier zu 
verringern?

von Michael U. (amiga)


Lesenswert?

Hallo,

ich habe hier noch ein Projekt mit einem ESP8266-01 und 1MB Flash 
laufen:
ESP8266-01 8MBit-Flash: 1M(128k LittleFS)
Da sind diese Komponenten aktiv:
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <ArduinoOTA.h>
#include <AsyncMqttClient.h>
#include <Ticker.h>
#include <LittleFS.h>

Belegt mit IDE 1.8.19 und ESP8266 3.0.2
Der Sketch verwendet 380129 Bytes (42%) des Programmspeicherplatzes. Das 
Maximum sind 892912 Bytes.
Globale Variablen verwenden 30948 Bytes (37%) des dynamischen Speichers, 
50972 Bytes für lokale Variablen verbleiben. Das Maximum sind 81920 
Bytes

Läßt sich schon immer per OTA aus der ArduinoIDE flashen.
Steckdosen mit Tasmota und 1MB Flash gibt es hier auch, auch da geht OTA 
problemlos. Ist 6.5.0(release-basic) bzw. 6.6.0(release-basic) draf, gab 
bisher keinen Grund, das zu ändern.
Auf dem IR-Modul von Pearl ust die 8.1.0.11(063c19d-ir) drauf, auch 1MB 
Flash.
Vermutlich habe ich also das Problem des TO nicht verstanden.

Gruß aus Berlin
Michael

von hacker-tobi (Gast)


Lesenswert?

Verstanden hast du es vermutlich schon.

Allerdings nutzt zu arduino als Entwicklungsumgebung, während ich direkt 
mit dem espressif SDk anstelle von arduino arbeite.

Es ist interessant zu wissen, das die arduino libraries hier deutlich 
effizienter sind, was die grösse angeht.

von Stefan F. (Gast)


Lesenswert?

Die Leute die den Arduino Core für den ESP8266 gemacht haben sind nicht 
blöd. Während Espressif noch die Installation einer ganz bestimmten 
Linux Distribution und IDE forderte und keine ordentliche Doku hatte, 
gab es längst den viel einfacher anzuwendenden Arduino Core. Die Arduino 
Leute haben auch zahlreiche Bugs im zugrunde liegenden Code von 
Espressif wesentlich schneller geflickt. Der Arduino Core war der 
Software von Espressif lange Zeit qualitativ weit voraus.

Soweit ich beurteilen kann, fokussiert sich Espressif inzwischen nur 
noch auf den ESP32. Denen genügt es bereits, wenn die Software irgendwie 
ein bisschen auf dem ESP8266 läuft. Ich bin ziemlich sicher, dass sie 
den Chip einfach aus der Liste der unterstützen Device entfernen, sobald 
es mal schwierig wird.

Meiner Meinung nach ist das beste SDK für den ESP8266 der Arduino Core 
in Version 2.3.0 (basierend auf Espressif nonos SDK 1.5.3). Ja die 
Software ist alt, aber stabil und nicht so aufgebläht. Wer mehr will, 
sollte wirklich lieber auf den ESP32 wechseln, das erspart einiges an 
Leid.

Wenn du mal nach Projekten googelst wirst du sehen, dass es kaum 
Open-Source Projekte für den ESP8266 auf Basis des Espressif SDK gibt. 
Fast alle nutzen für diesen Chip lieber Arduino.

von Michael U. (amiga)


Lesenswert?

Hallo,

der "Arduino Core" ist hauptsächlich eine Sammlung Wrapperfunktionen auf 
das SDK von Espressif. Ich habe auch schon manchmal Funktionen des SDK 
direkt aufgerufen wenn es aus der ArduinoIDE nicht eingebaut war.
Das SDK von Espressif ist immer etwas aktueller als die von der 
ArduinoIDE genutzte Version weil das Drumrum eben erst angepasst werden 
muß.
"Aufgebläht" ist auch relativ, wenn ein ESP8266 reicht muß ich keinen 
ESP32 nehmen. Wenn z.B. SSL eingebaut ist, kostet es eben Platz.
Mit der 2.7.4 habe ich noch etliche kleine Projekte, fast alle ließen 
sich inzwischen problemlos mit der 3.0.2 compilieren, ein paar 
Ungereimtheiten im Speicherverbrauch sind aber immer noch nicht geklärt.

Für den ESP8266 habe ich hier keine Espressif-Installation mehr drauf, 
die ESP32-Version von Juni 2021 ist hier noch drauf.
Für mich ist die ArduinoIDE hier einfach nur Mittel zum Zweck. Es sind 
Hobbyprojekte und es ist eben einfach, mal so zum Spaß mit anderen 
CPU-Architekturen rumzuspielen. Es spart einfach Zeit.

Gruß aus Berlin
Michael

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
Noch kein Account? Hier anmelden.