ESP 8266 SPIFFS Filsystem geht nicht

Hallo ,
ich bin neu hier im Forum und beschäftige mich seit einigen Wochen mit Arduino. Da ich beruflich fast 40 Jahre viel programmiert habe , erst Basic, dann Siemens SPS S5 , S7 hab ich auch, als jetzt Rentner, noch Spass daran und halte die Birne etwas fit damit denke ich mal. Andere spielen Schach ich eben Uno.

Seit zwei Tagen hänge ich aber an einem Problem bei dem ich nicht weiterkomme. Inzwischen habe ich dann auf allen möglichen engl. Foren rumgesucht und rausgefunden das ich mit meinem Problem nicht alleine bin. :slight_smile:

Das schreiben und lesen auf ein ESP 8266-01 SIPFFS File sollte ja eigentlich kein Problem sein , jedenfalls die Beispiele dazu sind leicht versändlich.Zu der Anwendung an sich gibt es viele Beispiele, und Diagnose sketches.
Anscheinend gibt beim Hersteller jedoch ein Problem mit einer Chip-Serie. Das Problem scheint auch erst seit Januar bekannt zu sein.

hier meine Hardware info aus einem Diagnose Sketch:

Firmware:
Chip Id: 00141252
Core version: 2_4_1
SDK version: 2.2.1(cfd48f3)
Boot version: 6
Boot mode: 1
__________________________
Flash chip information:
Flash chip Id: 00146085 (for example: Id=001640E0 Manuf=E0, Device=4016 (swap bytes))
Sketch thinks Flash RAM is size: 1.00 MB
Actual size based on chip Id: 1.00 MB

Ein File das ich manuell mit "ESP Sketch Data upload" auf das Teil geschrieben habe wird zwar erkannt, kann aber nicht gelesen werden.

File Name /test.txt
File Length 132
====== First 10 lines of file (/test.txt) =======
file open failed

Wenn ich ein File mit einem Sketch schreibe kommt der Fehler nicht , aber ausgelesen wird auch nichts.
Daraus entnehme ich das das Schreiben auch nicht geht.

Irgendwo habe ich dann gelesen das es anscheined was mit der flash speed zu tun hat , und in der ES8266.h bzw Core Version etwas zu ändern sei. zurück auf 2.3.

Nun bin ich aber wie gesagt Anfänger und bin damit auch völlig überfordert.

Für alle die das gleiche Problem haben, es scheint nicht an Euch zu liegen und es gibt anscheinend noch keine praktikable Lösung :slight_smile:

An alle die eine praktikable Lösung haben, her damit.:slight_smile:

Gruß aus dem Reinland
Heinz

Muss der nicht einmal mit einem Tool oder Library Befehl vorbereitet werden?
Vielleicht SPIFF.format() ?

Benutzt du das Plugin Data Upload tool?

Hallo,

auf einem -01 mit 1MB Flash mit dem SPIFFS zu experimentieren...
mußte erstmal einen -01 suchen gehen.

Mit IDE 1.8.5, ESP 2.4.1, 128k SPIFFS eingestellt läuft dieser Sketch hier erstmal problemlos:
https://www.esp8266.com/viewtopic.php?f=29&t=8194

Habe gerade mal meinen Webserver auf den ESP-01 befördert. SPIFFS 256kB, SPIFFS mit Sketch Data Upload.
Läuft auch problemlos wenn es mal oben ist, habe wohl ein Problem mit meinem Programmieradater-Gebastel.
Software ging nur mit 115200 zu flashen, SPIFFS dann nur mit DIO und 921000...

Das Problem mit SPIFFS vom Januar ist mir auch nur vom ESP32 bekannt, ein Update gibt es da auch schon, ist aber noch nicht im ESP32-Arduino-SDK drin.

Was benutzt Du genau, was hast Du gemacht, was geht bei Dir nicht?

Gruß aus Berlin
Michael

Ich weiss nicht, ob es auch dein Problem ist: mein ESP8266 mit 16MB Flash "stürzte ab" wenn ich die 15MB Partition versuchte zu formatieren.
Ich habe eine Ewigkeit gebraucht, um zu merken, dass der "nur" 9 Minuten brauchte, um die Aktion durchzuführen.
Mit SPIFFS braucht man Geduld!

Wir habe es vergessen, aber der guter alten PC-XT mit 10MB Festplatte formattierte auch nicht schneller!

Hallo,

meinst Du wirklich 16MB Flash? Ich habe nur übliche ESP8266-12 und die haben 32MBit/4MB Flash und das SPIFFS ist da dann maximal 3MB.
Habe gerade mal eine Wemos D1 mini geärgert:
3MB SPIFFS, Flash komplett löschen lassen.
SPIFFS.begin(); braucht ca. 20s bis es merkt, daß es keine SPIFFS-Struktur gibt.
SPIFFS.format(); braucht dann für die 3MB ca. 10s.

Gruß aus berlin
Michael

Hallo Michael,

das von Dir angegebene Beispiel habe eben noch mal so wie es ist eingespielt : Einstellung mit 1MB und 128 kb SPIFFS

Das Formatieren habe ich immer drin gelassen. Beim lesen werden lediglich die Zahlen für i und : angezeigt und der Fehler file open failed

1:
2:
... und so weiter

daraus könnte man nun schliessen das es die Datei nicht gibt und es deshalb zu dem open Fehler kommt. Um das zu bestätigen habe ich den Sketch um einige Zeilen erweitert.

FSInfo fs_info;
  SPIFFS.info(fs_info);

  float fileTotalKB = (float)fs_info.totalBytes / 1024.0;
  float fileUsedKB = (float)fs_info.usedBytes / 1024.0;

  Serial.println( "File system (SPIFFS): ");
  Serial.println("File system (SPIFFS): ");
  Serial.print(" Total KB: "); Serial.print(fileTotalKB); Serial.println(" KB");
  Serial.print(" Used KB: "); Serial.print(fileUsedKB); Serial.println(" KB");

und zwar einmal direkt nach dem Formatieren und nach dem f.close direkt nach dem schreiben. Zusätzlich dahinter dann auch noch die Zeilen.

Dir dir = SPIFFS.openDir("/");
  Serial.println("SPIFFS directory {/} :");
  while (dir.next()) {
    Serial.print("File Name "); Serial.println(dir.fileName());
    Serial.print("File Length "); Serial.println(dir.fileSize());

  }

Damit bekomme ich dann direkt nach dem Formatieren die Ausgabe

File system (SPIFFS):
File system (SPIFFS):
Total KB: 110.55 KB
Used KB: 0.00 KB

, das Filesystem sollte da sein und ist leer

nach dem ersten schreiben

File system (SPIFFS):
Total KB: 110.55 KB
Used KB: 0.49 KB
SPIFFS directory {/} :
File Name /f.txt
File Length 160
file open failed

1:
2:
...

es gibt also das File und es wird auch vom System erkannt und richtig gelesen. Allerdings gibt es dann beim offnen der Datei einen Fehler. Ich hoffe das schlaue köpfe damit weiter kommen.

Heinz

Hallo,

interessant...

Flashe bitte mal mit der Einstellung Ersae Flash: All Flash Content im Werkzeigmenü und teste nochmal.

Gruß aus Berlin
Michael

Hi Michael , hallo zusammen

also Dein Vorschlag hat nix gebracht, bei dem Versuch ist mir allerdings aufgefallen das die Angabe "used KB" aus dem Dir Object mit jedem Durchlauf grösser wird. Muss aber vorher auch schon so gewesen sein. Nun habe ich in dem Programm noch ein f.close vermisst unten nach dem lesen Teil , und habe gedacht das hängt damit zusammen. Damit war aber dann die Fehlermeldung beim lesen weg, aber gelesen wurde immer noch nix. Ich denke mal die Fehlermeldung ist entstanden weil der File bereits offen war ?? Dann habe ich gedacht es kann ja auch nicht sein das das Objekt in der Mainloop jedesmal neu angelegt wird. Insofern ist das Programm etwas quick&durty :-), ich weiss aber nicht wie es läuft wenn es richtig läuft kannst ja mal jemand probieren.

File f = SPIFFS.open....

Also hab ich den Sketch neu gegliedert in zwei Unterfunktionen aufgeteilt.

  1. Schreiben und Lesen einzeln wie man das ja eigentlich so macht. Damit sollte ja dann beim verlassen der Funktion auch alles wieder sein wie vorher und das Objekt f wieder entladen sein.

  2. Zusätzlich habe ich einen else Teil eingebaut damit nach dem open mit Fehler und der Fehreangabe nichts mehr gemacht wird und schreiben und lesen nur gemacht wird wenn es keinen Fehler gibt.

  3. Weil f.size() eine Länge angibt wollte ich also wissen was steht denn da nun drin also habe ich die bytes einzeln ausgelesen und den HEX wert angezeigt.

Beim schreiben werden 10 "a" in eine Zeile geschrieben damit sollte die Filelänge 12 byte sein !! ist sie auch :slight_smile:
Beim auslesen werden dann allerdings 12 byte mit FF ausgegeben ?? " whats that" ;D

Die Anzahl der used byte aus dem Dir wird auch mit jedem Umlauf grösser daran hat sich nichst geändert. Kann aber eigendlich ja auch nicht sein. das Formatieren klappt auch mit jedem reset ist das Dir wieder leer.

jetzt kann es ja sein das ich auf dem Holzweg bin , aber ich denke ich habe keinen Fehler drin. Wenn einer ein 8266-01 hat bitte mal probieren was der Dir Befehl ausgibt und ob mein Sketch richtig läuft.

inzwischen denke ich an der Speicheraufteilung mit den Adressen ist was falsch.

hier die Ausgabe

Spiffs formatted
File system INFO(SPIFFS):
Total KB: 110.55 KB
Used KB: 0.00 KB
SPIFFS directory {/} :
====== Writing to SPIFFS file =========
====== Reading from SPIFFS file =======
12
FFFFFFFFFFFFFFFFFFFFFFFFFF
File system INFO(SPIFFS):
Total KB: 110.55 KB
Used KB: 0.49 KB
SPIFFS directory {/} :
File Name /f.txt
File Length 12
====== Writing to SPIFFS file =========
====== Reading from SPIFFS file =======
12
FFFFFFFFFFFFFFFFFFFFFFFFFF
File system INFO(SPIFFS):
Total KB: 110.55 KB
Used KB: 0.98 KB
SPIFFS directory {/} :
File Name /f.txt
File Length 12
====== Writing to SPIFFS file =========
====== Reading from SPIFFS file =======
12
FFFFFFFFFFFFFFFFFFFFFFFFFF
File system INFO(SPIFFS):
Total KB: 110.55 KB
Used KB: 1.47 KB
SPIFFS directory {/} :
File Name /f.txt
File Length 12
====== Writing to SPIFFS file =========
====== Reading from SPIFFS file =======
12
FFFFFFFFFFFFFFFFFFFFFFFFFF

und hier der gesamte Sketch

// Very basic Spiffs example, writing 10 strings to SPIFFS filesystem, and then read them back
// For SPIFFS doc see : https://github.com/esp8266/Arduino/blob/master/doc/filesystem.md
// Compiled in Arduino 1.6.7. Runs OK on Wemos D1 ESP8266 board.
// modifiziert am 25.3.2018 FS_INFO dazu gebaut und um die else Bedingung nach
// der Fehlererkennung dazu genommen.
// am ende noch ein F.close()nachgetragen


#include "FS.h"

void setup() {
  Serial.begin(115200);
  Serial.println("\nVery basic Spiffs example, writing 10 lines to SPIFFS filesystem, and then read them back");
  SPIFFS.begin();


  // Next lines have to be done ONLY ONCE!!!!!When SPIFFS is formatted ONCE you can comment these lines out!!
  Serial.println("Please wait 30 secs for SPIFFS to be formatted");
  SPIFFS.format();
  Serial.println("Spiffs formatted");

}

void loop() {

  FSInfo fs_info;
  SPIFFS.info(fs_info);

  float fileTotalKB = (float)fs_info.totalBytes / 1024.0;
  float fileUsedKB = (float)fs_info.usedBytes / 1024.0;


  Serial.println("File system INFO(SPIFFS): ");
  Serial.print(" Total KB: "); Serial.print(fileTotalKB); Serial.println(" KB");
  Serial.print(" Used KB: "); Serial.print(fileUsedKB); Serial.println(" KB");

  Dir dir = SPIFFS.openDir("/");
  Serial.println("SPIFFS directory {/} :");
  while (dir.next()) {
    Serial.print("File Name "); Serial.println(dir.fileName());
    Serial.print("File Length "); Serial.println(dir.fileSize());
  }

  schreiben();
  lesen();
  // wait a few seconds before doing it all over again
  delay(3000);

}

void schreiben() {
  File f = SPIFFS.open("/f.txt", "w");
  if (!f) {
    Serial.println("file open failed");
  }

  else {
    Serial.println("====== Writing to SPIFFS file =========");
    // schreibe 10 a in eine Zeile
    f.println("aaaaaaaaaa");
   
    f.close();
  }
}

void lesen () {
  // Lese file
  File f = SPIFFS.open("/f.txt", "r");
  if (!f) {
    Serial.println("file open failed");
  }
  else {

    Serial.println("====== Reading from SPIFFS file =======");
    // lese anzahl in f.size()
    Serial.println(f.size());
    for (int i = 0 ; i <= f.size(); i++) {
      byte s = f.read();
      Serial.print(s, HEX);
    }
    f.close();
    Serial.println(); // Zeile beenden 
  }
}

wie der Rheinländer sagt et jid nix wat et nid jid, un et jid sache zwischen Himmel and Ääd die kam ma nit verstoonn.

Das ist keinen neue Programiersprache :slight_smile:

Gruß Heinz

Die 2.4er Version der ESP8266-Libs ist noch an einigen Stellen buggy.

Probiere mal folgendes:

ESP8266-Version 2.3.0
Den Wemos D1 als Wemos D1 R2 & mini mit entweder 4M (3M SPIFFS) oder 4M (1M SPIFFS)

So betreibe ich meine Wemos D1 mini pro mit 16 MByte Flash derzeit (erfolgreich).

Gruß Tommy

Hallo,

====== Writing to SPIFFS file =========
====== Reading from SPIFFS file =======
12
61616161616161616161DAFF
File system INFO(SPIFFS): 
 Total KB: 110.55 KB
 Used KB: 0.49 KB
SPIFFS directory {/} :
File Name /f.txt
File Length 12
====== Writing to SPIFFS file =========
====== Reading from SPIFFS file =======
12
61616161616161616161DAFF
File system INFO(SPIFFS): 
 Total KB: 110.55 KB
 Used KB: 0.49 KB
SPIFFS directory {/} :
File Name /f.txt
File Length 12
====== Writing to SPIFFS file =========
====== Reading from SPIFFS file =======
12
61616161616161616161DAFF
File system INFO(SPIFFS): 
 Total KB: 110.55 KB
 Used KB: 0.49 KB
SPIFFS directory {/} :
File Name /f.txt
File Length 12

entweder hat Dein ESP-Modul einen Fehler, der mir nicht richtig erklärbar wäre oder es gibt ein Problem mit Deiner ESP-Installation. IDE hier immernoch 1.8.5 und ESP 2.4.1 mit Boardmanager-URL installiert.

lade Dir doch die IDE mal als zip runter und installiere sie als portable.
ZIP entpacken, im Arduino-1.8.5 Ordner einen Ordner mit Namen portable anlegen und die IDE erst jetzt starten. Dann landen alle Zutaten, Sketchbook usw. dort. So kann man auch mehrere Versionen parallel auf dem Rechner liegen haben.
ESP-URL in den Einstellungen reinkopieren und die 2.4.1 installieren.
Würde mich interessieren, was dann bei Dir passiert.

Gruß von Rentner zu Rentner
Michael

amithlon:
Hallo,
meinst Du wirklich 16MB Flash?

Ja. Die Wemos D1 Mini Pro Boards haben 16MByte Flash.
Ob sie mit SPIFFS nutzbar sind, bezweifle ich langsam.

Hallo zusammen

gerade gefunden , ich denke das ist das geiche Problem

Hallo,

klingt einleuchtend. Hat Dein Modul diesen Flash-Chip (P25Q80H)?
Meine wenige ESp-01 haben einen anderen Typ bestückt. Ich habe auch kaum -01 genutzt, mit SPIFFS garnicht. Nutze fast ausschließlich -12, selten -07 wegen externem Antenenanschluß. SPIFFS habe ich eigentlich nur auf den -12 benutzt und mit den 4MB-Chips gab es offenbar keine Probleme.

Ich habe mir das vorsichtshalber mal gemerkt, man kann ja nie wissen...

Gruß aus Berlin
Michael

Hi, Michael,

die Hälfte von dem Kram der da stand hab ich nicht verstanden, war mir einfach technisch etwas zu speziell. :slight_smile:
Ich denke auch bei mir ist alles richtig installiert , ansonsten klappt ja alles. Webserver , UDP, usw hab ich schon mit dem 01 gemacht klappt alles soweit.

Keine Ahnung wie ich an die Info von dem Flush Chip kommen soll. Ganz oben stehen in paar Daten die ich ausgelesen habe. Wie kommt man da dran ??

Angefangen hab ich vor ein paar Wochen mit einem UNO starter-Set. :slight_smile:

Um in mein Heimnetz zu kommen habe ich dann 3 ESP8266-01 Module bestellt( Angebot) und mich mit den AT Befehlen beschäftigt. Allerdings kommt ma da dann anscheinend schnell an die Speichergrenze des UNO , insbesondere für Variable, läuft ja alles mittels Strings ab und so üppig ist das Ding ja nicht bestückt. Es gibt dann komische Efekte. Bei der Gelegenheit bin ich dann dazu gekommen das man das 01 ja auch zweckentfremden kann. Speicher hat das Din ja einiges mehr. Eigendlich wollte ich Langzeit Messdaten zwischenspeichern und dann mittels FTP an die Fritzbox auf eine daran rangeschlossenen SD Karte senden. Von da kommt ma ja mit jedem PC dan zur weiteren Auswertung gut dran. Jetzt lass ich eventuell das zwischenspeichern erst mal weg, damit ich da weiterkomme.

Jedenfalls erst mal besten Dank für Deine Hilfe , vieleicht gibts ja irgendwann ein Update das funzt.

Gruß vom Rentner Heinz :slight_smile:

Ich hatte mich zwar in neinem Beitrag geirrt, als ich aus den 16MByte auf einen WEMOS D1 mini pro geschlossen habe, aber evtl. wäre die ESP8266-Version 2.3.0 einen Versuch wert.

Gruß Tommy

Rentner:
Hi, Michael,

die Hälfte von dem Kram der da stand hab ich nicht verstanden, war mir einfach technisch etwas zu speziell. :slight_smile:

Dafür habe ich nicht alles gelesen. :slight_smile:
Kurzfassung: es gibt speziell bei diesem Chip-Typ (aber nur bei manchen Exemplaren...) ein Problem mit einer bestimmten Funktion. Ein Eatch für den ESP-Core ist dort im Thread auch zu finden, allerdings spare ich mir diese Übung.

Beim -01 ist ja keine Abschirmung drauf, man braucht also nur viel Licht und eine gute Lupe um die Bezeichnung auf dem Flash-IC zu lesen. Wäre nur für Dich die Bestätigung.

Rentner:
...
Bei der Gelegenheit bin ich dann dazu gekommen das man das 01 ja auch zweckentfremden kann. Speicher hat das Din ja einiges mehr. Eigendlich wollte ich Langzeit Messdaten zwischenspeichern und dann mittels FTP an die Fritzbox auf eine daran rangeschlossenen SD Karte senden. Von da kommt ma ja mit jedem PC dan zur weiteren Auswertung gut dran. Jetzt lass ich eventuell das zwischenspeichern erst mal weg, damit ich da weiterkomme.

Wenn Du den FTP-Client auf dem ESP in Gang bekommen hast schicke die Daten eben mit append gleich raus und hänge sie an die Datei an. Kannst Du dann ja immernoch umbauen.
Willst Du die ESP mit Batterie/Akku-Betrieb oder Netzteilen betreiben?

@Tommy56: das Problem dürfte auch bei 2.3.0 auftreten wenn ich den Thread dazu richtig gelesen habe.

Gruß aus Berlin
Michael

@amithlon: Das kann sein, ich habe den Artikel auch nicht komplett gelesen. Da ich nur WEMOS D1 mini pro benutze, habe ich mit dem 01 keine Erfahrung.

Es gibt mit der 2.4/2.4.1 jedenfalls eine Menge Probleme, die es bei der 2.3.0 nicht gab (verschlimmbessert).

Gruß Tommy

Hallo,

Tommy56:
Es gibt mit der 2.4/2.4.1 jedenfalls eine Menge Probleme, die es bei der 2.3.0 nicht gab (verschlimmbessert).

Gruß Tommy

Ich habe von meinen "Geräten" inzwischen fast alles von IDE 1.6.9/2.3.0 auf 1.8.5/2.4.1 umgestellt.
Problematisch sind die Änderungen beim lwip-Stack. Ich compiliere z.Z. nur mit dem lwip 1.4.
Damit gab es bei mir noch keine Probleme.

Gruß aus Berlin
Michael

Es gibt auch noch ein Memory leak

Gruß Tommy

Hallo,

naja, es sind im Moment 52 offen Bugs und 184 erledigte seit der Release.
Man tritt zum Glück nicht in alle rein. :slight_smile:

Gruß aus Berlin
Michael