ESP32 LittleFS Arduino

#7743521
Lesenswert?

Kann hier jemand englisch, hat Github und Muße LittleFS auf einem ESP32 zum laufen zu bringen? Bei meinem ESP32 funktioniert alles, aber bei jemand anderem nicht aufgrund geänderter Hardware. Ich weiß nicht weiter und kann nicht helfen, da ich das Board nicht habe.

hier das Problem:

https://tinyurl​.com/mrxhktbw

1
E (11) esp_littlefs: ./components/esp_littlefs/src/littlefs/lfs.c:1225:error: Corrupted

es handelt sich soweit ich das rausgelesen habe um folgendes Board:

ESP32-WROOM-32D DEVKIT V4

ESP32-D0WD-V3 (revision v3.1)

https://tinyurl​.com/3nzujhdc

Bitte kein KI Geblubber, das hilft nicht weiter.

#7745767
Lesenswert?

Ja alles gleich V2, bis auf minimale Abweichung (CRC 1.0.3 statt 1.0.2 und ESP8266Audio 1.9.9 statt 1.9.7) Ich glaube langsam der Kollege hat grundlegende Probleme mit der Stromversorgung, denn er meint er hat einen AMS1117 (5V) hinter einem LGS5148 (12V) das sind schon mal 4 Watt verbraten und es bleiben nur 600 mA. Er soll nun mal einen 91k dazu löten und den AMS1117 weglassen, mal sehen was das wird.

Es kotzt mich so an bei Arduino dass man ständig was downgraden muss damit es compiliert. Oder überhaupt noch in den Speicher passt. Gut selber schuld, aber wenn man nur singen und klatschen in der Schule hatte...

https://www.youtube.com/watch?v=iH1CBnGKKxI

Bin aber gerade dabei den Code zu aktualisieren für Arduino IDE 2.3.3 werde wohl aber nicht umhin kommen einen Windows 10 Rechner aufzusetzen. Das kann dauern.

https://github.com/earlephilhower/arduino-littlefs-upload/issues/54

#7746989
Lesenswert?

Die alte LittleFS library https://github.com/lorol/LITTLEFS ist jetzt in Arduino esp32 cor v2 integriert. Vielleicht liegen die Probleme darin begründet, dass die neue Arduino Version verwendet wird. Ich hatte einige Mühe, auf die neue Version umzustellen. Hier sind zwei Github Repos, in der ich die neue Version verwendet habe. Es wurde allerdings nicht die Arduino IDE sondern PlatformIO als Programmierumgebung verwendet. -https://github.com/RoSchmi/ESP32_LittleFS_Simple_Formatter -https://github.com/RoSchmi/Esp32_WiFiManager_HeatingSurvey Die Einzelheiten habe ich auch schon wieder vergessen. Rückfragen wären für mich daher auch nur mit einigem Aufwand zu beantworten.

#7747838
Lesenswert?

Habe nun Windows 10 installiert und Arduino IDE 2.3.3 getestet. Das Add-on "Upload LittleFS to Pico/ESP8266/ESP32" funktioniert soweit, bis auf Startschwierigkeiten mit dem COM Port. Muss man wissen. https://github.com/earlephilhower/arduino-littlefs-upload/issues/12

Nun gibt es aber ein undokumentiertes Feature eine eigene Partitionstabelle anzulegen. Bei PlatformIO speichtert man die partitions.csv einfach in das Sketch Verzeichnis. https://docs.espressif.com/projects/esp-idf/en/stable/esp32/api-guides/partition-tables.html#creating-custom-tables

Ich weiß wie ich die boards.txt ändern kann, so dass bei Custom Partition Scheme meine .csv hinterlegt wird. Dann kann ich Partition Scheme: Custom auswählen und es kompiliert auf diese Partitionsgröße.

%UserProfile%\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.5\boards.txt (Zeilen irgendwo bei dem "DOIT ESP32 DEVKIT V1" hinzufügen)

1
esp32doit-devkit-v1.menu.PartitionScheme.custom=Custom
2
esp32doit-devkit-v1.menu.PartitionScheme.custom.build.partitions=custom
3
esp32doit-devkit-v1.menu.PartitionScheme.custom.upload.maximum_size=1441792

%UserProfile%\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.5\tools\partitions -> hier die custom.csv speichern

1
# Name,   Type, SubType, Offset,  Size, Flags
2
nvs,      data, nvs,     0x9000,  0x5000,
3
otadata,  data, ota,     0xe000,  0x2000,
4
app0,     app,  ota_0,   0x10000, 0x160000,
5
app1,     app,  ota_1,   0x170000,0x160000,
6
spiffs,   data, spiffs,  0x2D0000,0x120000,
7
coredump, data, coredump,0x3F0000,0x10000,

Allerdings ist das zu kompliziert. Man kann nicht von jedem verlangen in den esp packages rumzupfuschen. Zumal die Änderung bei einem Update flöten gehen. Deswegen möchte ich es pur aus dem Sketch heraus partitioniert haben.

Das Add-on "Upload LittleFS to Pico/ESP8266/ESP32" erkennt praktischerweise schon meine .csv und legt die LittleFS Partition entsprechend an. Wählt man ein anderes Layout so erkennt das Add-on dies ebenfalls (z.B. huge_app)

Bei Arduino ist es unklar, ob und wie das funktioniert. Ich konnte noch keinen Erfolg erzielen, dass meine .csv irgendwie automatisch berücksichtigt wird. https://forum.arduino.cc/t/arduino-2-1-1-custom-partitions-with-esp32-core/1156402

Hat jemand einen Tipp was ich noch machen kann um meine .csv aus dem Sketch Verzeichnis heraus zu laden? Ansonsten lösche ich die .csv wieder und nehme gleich huge_app aus den Vorlagen, geht allerdings nur für Boards wo das hinterlegt ist. Da müsste man "ESP32 Dev Module" als Board wählen, und dann die entsprechende Vorlage. Den Schritt hätte ich gern gespart.

Zur Erinnerung, es geht darum dass andere das zum laufen kriegen, ich selbst komme mit Arduino 1.8.19 und Linux klar. Ich brauche das also nicht für mich sondern für die einfachen Windows Nutzer, die nicht erst von V3.xx auf V2.xx downgraden wollen.

Das Sketch selbst hab ich schon so angepasst dass es mit den aktuellen Libs läuft, nur Punkt Komma Strich Änderungen. Allerdings sind die Libs so gewachsen dass das Sketch nun ohne zutun nicht mehr in die Default Partitionsgröße passt.

#7747888
Lesenswert?

Danke. Was mache ich falsch?

1
text section exceeds available space in board
2
Sketch uses 1349289 bytes (102%) of program storage space. Maximum is 1310720 bytes.
3
Sketch too big

Alexander schrieb:

Das Add-on "Upload LittleFS to Pico/ESP8266/ESP32" erkennt praktischerweise schon meine .csv und legt die LittleFS Partition entsprechend an.

Alexander schrieb:

app0, app, ota_0, 0x10000, 0x160000,

Gast #7748004
Lesenswert?

Alexander schrieb:

Nun gibt es aber ein undokumentiertes Feature eine eigene Partitionstabelle anzulegen ... (gefolgt von einem link)

Was denkst du, worauf du da verlinkt hast? Auf die Dokumentation!

Arduino ist im Fall von ESP32 und STM32 ein Framework über einem Framework. Da muss man immer die Doku der unteren Ebenen lesen, um alles zu verstehen.

Bei über-Frameworks wird es mit jeder Ebene nach oben hin primitiver. Man lässt Features weg oder dokumentiert sie nicht nochmal neu. Das haben alle über-Frameworks so an sich. Sie versprechen durch Zusammenfassung, Umbenennung und Einführung eigener Standards, die Anwendung des Krams zu vereinfachen. Ich habe aber (mit Ausnahme des ESP8266 in seiner Anfangszeit) noch kein über-Framework erlebt, das dieses Versprechen wirklich erfüllt. Sobald man die geraden Pfade zwischen den grünen Wiesen verlässt (so drück sich mein Chef aus), wird es doch kompliziert - oft komplizierter, als bei Verzicht auf das über-Framework.

#7748180
Lesenswert?

Alexander schrieb:

Danke. Was mache ich falsch? [code] text section exceeds available space in board Sketch uses 1349289 bytes (102%) of program storage space. Maximum is 1310720 bytes. Sketch too big Alexander schrieb im Beitrag #7747838:

app0, app, ota_0, 0x10000, 0x160000, 0x160000 entspricht 1310720 bytes. Ihre sketch ist aber 1349289 bytes, passt nicht zusammen. Versuch mal app0 partition zu vergrossern. Siehe auch dieses tool : https://esp32.jgarrettcorbin.com/

#7748399
Lesenswert?

Jan H. schrieb:

0x160000 entspricht 1310720 bytes

0x160000 entspricht 1441792 Bytes, das hatte ich ja schon vergrößert. Es wird nur einfach ignoriert, da nicht explizit in der boards.txt zugewiesen. Das Add-on findet die Datei ja, also liegt's nicht an der Datei.

Monk schrieb:

Was denkst du, worauf du da verlinkt hast? Auf die Dokumentation!

Ja auf die Dokumentation für PlatformIO bin ich gestoßen. Aber ich bezog mich auf das forum.arduino.cc

Q: "Is this docuemented somewhere that you know of?"

A: "Not that I'm aware of"

Jan H. (jan_h74) hat ja noch eine Dokumentation für arduino-esp32 gefunden von espressif, aber wo ist die Dokumentation von Arduino? Wer garantiert mir dass das auch wirklich implementiert wurde, und an wen soll ich mich wenden weil es nicht funktioniert?

#7748454
Lesenswert?

Versuch mal mit dieses partitions.csv App0 / app1 erweitert nach 0x150000 bytes.

Name, Type, SubType,Offset, Size, Flags

nvs, data, nvs, 0x9000, 0x5000,
otadata,data, ota, 0xe000, 0x2000,
app0, app, ota_0, 0x10000, 0x150000,
app1, app, ota_1, 0x160000, 0x150000,
spiffs, data, spiffs, 0x2b0000, 0x140000,
coredump,data, coredump,0x3f0000, 0x10000,

Angehängte Dateien:
#7748496
Lesenswert?

Sorry bin beim Kompilieren eingeschlafen... hatte mal mit Zeilenende CRLF und mal mit LF probiert, macht aber keinen Unterschied. Hier das Log für deine partitions.csv (gekürzt):

1
Sketch too big; see support.arduino.cc/hc/en-us/articles/360013825179 for tips on reducing it.
2
Sketch uses 1349333 bytes (102%) of program storage space. Maximum is 1310720 bytes.
3
Global variables use 39756 bytes (12%) of dynamic memory, leaving 287924 bytes for local variables. Maximum is 327680 bytes.
4
text section exceeds available space in board
5

6
Compilation error: text section exceeds available space in board

Da es bei dir geht, werde ich mal sukzessiv downgraden und schauen ab wann es funktioniert. Ich werde aber erstmal Dein Projekt flashen und gucken ob es da geht.

Angehängte Dateien:
Gast #7748558
Lesenswert?

Alexander schrieb:

Wer garantiert mir dass das auch wirklich implementiert wurde, und an wen soll ich mich wenden weil es nicht funktioniert?

Wie gesagt ist genau das der Knackpunkt bei solchen über-Frameworks. Arduino ist für den Einstieg toll, aber wer mehr will sollte besser das IDF verwenden. Leider muss man sich dann aber auch von anderen Bibliothekten trennen, die von Arduino abhängen oder sie umschreiben. Eine bequeme allgemeingültige Lösung für dieses Dilemma kann ich nicht bieten.

#7749133
Lesenswert?

Alexander schrieb:

Da es bei dir geht, werde ich mal sukzessiv downgraden und schauen ab wann es funktioniert. Ich werde aber erstmal Dein Projekt flashen und gucken ob es da geht.

Auch mit deinem kompletten Sketch funktioniert es bei mir nicht. Ich habe überprüft dass deine partitions.csv auch wirklich nach %TEMP%\arduino\sketches* kopiert wurde. Das Add-on findet auch die Datei und schreibt an die richtige Adresse 0x290000.

Beim Hochladen des Sketches sagt es weiterhin Maximum is 1310720 bytes. Die .csv wird ignoriert.

Das mit dem downgraden könnte dauern, Arduino kompiliert immer so ewig...

Jan H. schrieb:

Das project ist mit Arduino IDE 2.3.0, ESP32 lib V1.06 compiliert. LittleFS.h wird verwendet.[LittleFS_esp32@1.0.6]

hab mal auf die [LittleFS@3.0.5] aktualisiert (ungetestet) https://github.com/RP6conrad/ESP-GPS-Logger/pull/34

Angehängte Dateien:
#7749728
Lesenswert?

Es gibt augenscheinlich auch gar kein Problem mit LittleFS. Ich hatte Probleme mit dem Add-on, weil das Windows 10 erfordert. Das eigentliche Problem ist die "Sketch too big; text section exceeds available space in board." Fehlermeldung, welche verhindert dass das kompilierte Sketch geflasht wird.

Lässt sich lösen indem man eine vordefinierte Partitionstabelle auswählt. Ich wollte aber eine Partitionstabelle über das Sketch vorgeben, das hätte einen Klick erspart.

Das Feature ist aber kaputt gegangen, und wie Stefan schon schrieb, fühlt sich auch keiner zuständig.

https://github.com/espressif/arduino-esp32/issues/10120

Keine Lösung, aber ein Workaround:

Alexander schrieb:

Ansonsten lösche ich die .csv wieder und nehme gleich huge_app aus den Vorlagen, geht allerdings nur für Boards wo das hinterlegt ist. Da müsste man "ESP32 Dev Module" als Board wählen, und dann die entsprechende Vorlage. Den Schritt hätte ich gern gespart.

#7754986
Lesenswert?

Ich glaube es ist diese Datei. Die würde ich gerne per Skript auslesen. Was bietet sich da an für Windows und Linux, Python? Ich wollte das Skript gerne per platform.txt ausführen, dort wird aber für Windows .exe verwendet.

1
%UserProfile%\AppData\Roaming\arduino-ide\Local Storage\leveldb\000003.ldb
#7755240
Lesenswert?

Das war ne Sackgasse. Habe zwar ein Tool gefunden was die leveldb in eine csv exportiert, wo ich einen Python Wrapper drumbauen konnte, aber das klappt nur wenn im log was in Klartext steht. https://github.com/markmckinnon/Leveldb-py

1
$ python ./getpartition_win.py
2
Found: leveldb-dump.exe
3
Attempting to repair DB
4
No Stats
5
Number of records dumped are ==> 7
6
Partition Scheme: huge_app, Huge APP (3MB No OTA/1MB SPIFFS)

Weiß jemand wie ich die Daten aus dem Binärteil kriege sobald die einmal weggeschrieben wurden? Hier was zum LevelDB Format:

https://www.forensicfocus.com/articles/after-sqlite-what-next-a-must-read-primer-on-leveldb

Angehängte Dateien:
#7760176
Lesenswert?

Damit scheint es zu gehen. Kann zumindest binäre LevelDB lesen und auch die Custom Partition Scheme Preferences schreiben. Ob die Arduino IDE das annimmt weiß ich noch nicht.

https://github.com/wbolster/plyvel

Für den Sketch too big Fehler mit der partitions.csv gibt es nun auch eine Lösung. Arduino hat da schon was vorgesehen, hat nur noch keiner implementiert.

Mit einem Skript kann man die Prüfung selbst machen, man muss nur ein JSON Array auf stdout ausgeben. Das wird dann von der Arduino IDE mitgelesen.

1
recipe.advanced_size.pattern

https://forum.arduino.cc/t/ide-preferences-leveldb/1312668

#7762593
Lesenswert?

Arduino IDE 2.3.3 kann nun unter Windows auch kein Python mehr? gut dass ich ein Python Script geschrieben habe...

Im packages/esp32/hardware/esp32/3.0.7/tools Ordner sind nun alle Dateien doppelt, einmal als .py und einmal als .exe - kriegt man raus mit welchem Compiler ein Python Skript als Windows .exe kompiliert wurde?

#7766408
Lesenswert?

Alexander schrieb:

Alexander schrieb:

Da es bei dir geht, werde ich mal sukzessiv downgraden und schauen ab wann es funktioniert. Ich werde aber erstmal Dein Projekt flashen und gucken ob es da geht.

Auch mit deinem kompletten Sketch funktioniert es bei mir nicht. Ich habe überprüft dass deine partitions.csv auch wirklich nach %TEMP%\arduino\sketches* kopiert wurde. Das Add-on findet auch die Datei und schreibt an die richtige Adresse 0x290000.

Beim Hochladen des Sketches sagt es weiterhin Maximum is 1310720 bytes. Die .csv wird ignoriert.

Das mit dem downgraden könnte dauern, Arduino kompiliert immer so ewig...

Jan H. schrieb:

Das project ist mit Arduino IDE 2.3.0, ESP32 lib V1.06 compiliert. LittleFS.h wird verwendet.[LittleFS_esp32@1.0.6]

hab mal auf die [LittleFS@3.0.5] aktualisiert (ungetestet) https://github.com/RP6conrad/ESP-GPS-Logger/pull/34

Habe nochmal mit dieses thema weiter gemacht, und gewunschte partitions.csv ablegen in ordner functioniert, aber....

  • In Arduino IDE "Tools" einstellen "Erase All Flash Before Sketch Upload Enable" (oder alte partition bleibt behalten).
  • "Max Sketch space " wird noch immer von boards.txt file uebernommen, und nicht von partitions.csv !!! So allerdings auch noch eine partition in "Tools" auswahlen die genugend app space had !!
  • Versuche war mit Arduino IDE 2.3, esp32 V2.0.7 library, und ESP32 S3 Dev module

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren