ESP8266-07 und ArduinoJson6 SPIFF Speichern schlägt fehl

Guten Morgen allerseits...
ich habe hier ein Problem, bei dem ich auch nach intensiver Recherche und herumprobieren nicht auf eine Lösung komme..

Ich kann mit der ArduinoJson Bibliothek eine Konfiguration lesen, verarbeiten, ausgeben.. kein Problem!
Ich habe jetzt aber eine Routine Programmiert, die für den Fall, dass die Datei nicht vorhanden ist eine Standarddatei erstellt. Laut Ausgabe wird der Inhalt von ArduinoJson erstellt und auch gespeichert, öffne ich die Datei aber, stürzt der ESP ab, bzw. geht in den Reset. Irgendetwas stimmt also mit dieser Datei nicht.

bool createConfiguration(const char *filename, const Konfiguration &konfiguration) {
  Serial.println("Formatiere SPIFFS");
  SPIFFS.format();
  delay(DELAY_TIME_3);
  Serial.println("Erstelle Konfigurationsdatei");
  File file = SPIFFS.open(filename, "w+");
  if (!file) {
    Serial.println("Schwerwiegender Fehler: Datei konnte nicht erstellt werden!");
    return 0;
  }
  Serial.println("Konfigurationsdatei ist erstellt.");
  Serial.println();
  DynamicJsonDocument doc(capacity);
  Serial.println("Erstelle den Standard JSON-Inhalt");
  doc["OTA_USE_HOSTNAME"] = 1;
  doc["OTA_USE_PASSWORD"] = 0;
  doc["MQTT_USE"] = 1;
  doc["MQTT_USE_AUTHENTICATION"] = 0;
  doc["DS18B20_RESOLUTION"] = 10;
  doc["OTA_PORT"] = 8266;
  doc["MQTT_PORT"] = 1883;
  doc["NTP_INTERVALL"] = 1800;
  doc["MQTT_STATUS_INTERVALL"] = 300;
  doc["MQTT_SENSOR_INTERVALL"] = 60;
  doc["WLAN_SSID"] = "InternetDingensNG";
  doc["WLAN_PASSWORD"] = "27491816697385862794";
  doc["OTA_HOSTNAME"] = "TemperatureControl";
  doc["OTA_PASSWORD"] = "1234";
  doc["NTP_ZEITZONE"] = "Europe/Berlin";
  doc["NTP_SETSERVER"] = "de.pool.ntp.org";
  doc["MQTT_USERNAME"] = "Admin";
  doc["MQTT_PASSWORD"] = "admin";
  doc["MQTT_SERVER"] = "192.168.178.9";
  doc["MQTT_TOPIC_PREFIX"] = "tele/";
  doc["MQTT_TOPIC_PREFIX2"] = "cmnd/";
  doc["MQTT_TOPIC_STATUS"] = "/STATE";
  doc["MQTT_TOPIC_SENSOR"] = "/SENSOR";
  doc["MQTT_TOPIC_LWT"] = "/LWT";
  doc["MQTT_TOPIC_MAIN"] = "TempCo";
  Serial.println();
  delay(DELAY_TIME_3);
  Serial.println("Serialisiere den JSON-Inhalt");
  Serial.println("Schreibe Daten in die Datei...");
  if (serializeJsonPretty(doc, file) == 0) {
    Serial.println("Schwerwiegender Fehler: Datei konnte nicht geschrieben werden");
    file.close();
    doc.clear();
    return 0;
  }
  Serial.println("Datei wurde geschrieben");
  
  delay(DELAY_TIME_3);
  file.close();
  File file2 = SPIFFS.open(filename, "r");
  while(file2.available()){
         Serial.write(file2.read());
    }
   file2.close();
   Serial.println();
   
  delay(DELAY_TIME_3);
  Serial.println("Gebe Speicher frei");
  doc.clear();
  delay(DELAY_TIME_3);
  return 1;                
}

Den Wert der Variable capacity habe ich schon auf 2048 hochgesetzt, einfach um auszuschliessen, dass es daran liegt, aber das ändert nichts. Kann mir hier jemand weiterhelfen?

öffne ich die Datei aber, stürzt der ESP ab, bzw. geht in den Reset. Irgendetwas stimmt also mit dieser Datei nicht.

Die dabei geworfenen Meldungen kann man sehen und analysieren.

Leider ist der Code so weit verstümmelt, dass man ihn nicht testen kann.
Wie wäre es, wenn du eine testbare minimal Version erstellst?

@TO: Warum willst Du jedes Mal das ganze SPIFFS formatieren? Das ist ungünstig für dessen Lebensdauer.

Probiere mal folgende Änderung:

while(file2.available()){
         Serial.write(file2.read());
         yield();             // <<------- Wachhund füttern
    }

Ansonsten wie bereits geschrieben, die Fehlermeldungen anschauen.

Gruß Tommy

Die Funktion wird nicht immer ausgeführt. In der Situation wo ich sie brauche ist ein formatieren schon sinnvoll. Der Chip scheint beschädigt zu sein, denn selbst die einfachsten Beispielsketche versagen.
Ein Upload über die IDE funktioniert.. Ich werde mal ein zwei andere Chips durchprobieren und mich dann nochmal melden.

File file2

Für was soll "file2" gut sein?
"file" gefällt dir wohl dann nicht mehr?

Tommylicious1980:
In der Situation wo ich sie brauche ist ein formatieren schon sinnvoll.

Klar!
Dateien löschen/überschreiben ist sinnfrei.

Gruß Fips

Tommylicious1980:
In der Situation wo ich sie brauche ist ein formatieren schon sinnvoll. Der Chip scheint beschädigt zu sein, denn selbst die einfachsten Beispielsketche versagen.
Ein Upload über die IDE funktioniert..

Wenn der Upload über die IDE funktioniert, kann der Chip nicht defekt sein.

Wenn Du meinst, dass das sinnvoll ist - es ist Deine Hardware und Dein sinn**loses** formatieren.

Gruß Tommy

Guten Morgen,
also ich habe mal ein Minimalsketch erstellt:

Der Sketch verwendet 280784 Bytes (29%) des Programmspeicherplatzes. Das Maximum sind 958448 Bytes.
Globale Variablen verwenden 29456 Bytes (35%) des dynamischen Speichers, 52464 Bytes für lokale Variablen verbleiben. Das Maximum sind 81920 Bytes.

#include <FS.h>
#define SERIAL_BAUD_RATE 115200
#define DELAY_TIME_3 3000
const char* filename = "/file.txt";
ADC_MODE(ADC_VCC);



void setup() {
  delay(1000);
  Serial.begin(SERIAL_BAUD_RATE);
  Serial.println();
  if(SPIFFS.begin())  {
    Serial.println("SPIFFS Initialisierung....OK");
  }  else  {
    Serial.println("SPIFFS Initialisierung...Fehler!");
  }
  delay(DELAY_TIME_3);
  File f = SPIFFS.open(filename, "w");
  
  if (!f) {
    Serial.println("Oeffnen der Datei fehlgeschlagen");
  }  else  {
      Serial.println("Schreibe Daten in die Datei");
      f.print("Beispielinhalt....\n");
      f.close();
  }
  DebugInfo();
}

void loop() {
  uint8_t i;
  
  File f = SPIFFS.open(filename, "r");
  
  if (!f) {
    Serial.println("Oeffnen der Datei fehlgeschlagen");
  }
  else
  {
      Serial.println(sizeof(f));
      Serial.println("Lesen des Dateiinhaltes:");
     
      for(i=0;i<f.size();i++) 
      {
        Serial.print((char)f.read());
      }
      f.close();  
      Serial.println("");
      Serial.println("Datei geschlossen");
  }
  delay(5000);
}


void DebugInfo(){
  uint32_t espFlashChipSize = ESP.getFlashChipSize();                 
  uint32_t espFlashChipRealSize = ESP.getFlashChipRealSize();         
  FlashMode_t espFlashChipMode = ESP.getFlashChipMode();             
  Serial.println();
  Serial.println("Starte System");
  Serial.printf("Konfiguration: %s\n", filename);
  Serial.printf("Baudrate: %d\n\n\n",SERIAL_BAUD_RATE);
  
  delay(DELAY_TIME_3);
  Serial.printf("Erstellungszeit: %s\n", (__TIMESTAMP__));
  Serial.printf("Belegte Größe durch Programm: %u kB\n", ESP.getSketchSize()/1024);
  Serial.printf("Verbleibender Speicher: %u kB\n", ESP.getFreeSketchSpace()/1024);
  Serial.printf("MD5-Prüfsumme Programm: %s\n", ESP.getSketchMD5().c_str());
  delay(DELAY_TIME_3);
  Serial.println();
  Serial.printf("IDE-Version: %d.%d.%d", ARDUINO / 10000, ARDUINO % 10000 / 100, ARDUINO % 100 / 10 ? ARDUINO % 100 : ARDUINO % 10);
  Serial.println();
  Serial.printf("Core-Version: %s\n", ESP.getCoreVersion().c_str());
  Serial.printf("SDK-Version: %s\n", ESP.getSdkVersion());
  Serial.printf("Boot-Version: %d\n", ESP.getBootVersion());
  Serial.printf("Boot-Modus: %d\n", ESP.getBootMode());
  Serial.println();
  delay(DELAY_TIME_3);
  Serial.printf("Grund für Neustart: %s\n", ESP.getResetReason().c_str());
  Serial.printf("Debug zum Neustart: %s\n", ESP.getResetInfo().c_str());
  Serial.println();
  Serial.printf("Chip ID: %08x\n", ESP.getChipId());
  Serial.printf("CPU-Frequenz: %d\n",  ESP.getCpuFreqMHz());
  Serial.println();
  delay(DELAY_TIME_3);
  Serial.println("ESP8266 Flash-Speicher Info:");
  Serial.printf("Flash ID:   %08X\n", ESP.getFlashChipId());
  Serial.printf("Flash Größe laut Hersteller: %u\n", ESP.getFlashChipSizeByChipId());
  Serial.printf("Flash Größe real: %u kB\n\n", espFlashChipRealSize/1024);
  Serial.printf("Flash Größe eingestellt: %u kB\n", espFlashChipSize/1024);
  Serial.printf("Flash Geschwindigkeit eingestellt: %u MHz\n", ESP.getFlashChipSpeed()/1000000);
  Serial.printf("Flash Modus eingestellt:  %s\n", (espFlashChipMode == FM_QIO ? "QIO" : espFlashChipMode == FM_QOUT ? "QOUT" : espFlashChipMode == FM_DIO ? "DIO" : espFlashChipMode == FM_DOUT ? "DOUT" : "UNKNOWN"));
  if (espFlashChipSize != espFlashChipRealSize) {
    Serial.println("Falsche Flashgröße beim Upload eingestellt!\n");
  } else {
    Serial.println("Einstellungen zur Flashgröße korrekt.\n");
  }
  Serial.println();
  Serial.printf("Versorgungsspannung: %d [mV]\n", ESP.getVcc());
  Serial.println();
  
  Serial.println();
  delay(DELAY_TIME_3);
}

Die Ausgabe des Programms direkt nach dem Flashen zeigt das Problem:

06:39:43.851 -> SPIFFS Initialisierung....OK
06:39:46.853 -> Schreibe Daten in die Datei
06:39:46.900 -> 
06:39:46.900 -> Starte System
06:39:46.900 -> Konfiguration: /file.txt
06:39:46.900 -> Baudrate: 115200
06:39:46.900 -> 
06:39:46.900 -> 
06:39:49.904 -> Erstellungszeit: Thu Jun 13 06:38:51 2019
06:39:49.904 -> Belegte Größe durch Programm: 278 kB
06:39:49.904 -> Verbleibender Speicher: 660 kB
06:39:50.003 -> MD5-Prüfsumme Programm: eb40ba9aff147b530c4179718a2451a2
06:39:53.024 -> 
06:39:53.024 -> IDE-Version: 1.8.9
06:39:53.024 -> Core-Version: 2_4_2
06:39:53.024 -> SDK-Version: 2.2.1(cfd48f3)
06:39:53.024 -> Boot-Version: 31
06:39:53.024 -> Boot-Modus: 1
06:39:53.024 -> 
06:39:56.008 -> Grund für Neustart: External System
06:39:56.008 -> Debug zum Neustart: Fatal exception:0 flag:6 (EXT_SYS_RST) epc1:0x00000000 epc2:0x00000000 epc3:0x00000000 excvaddr:0x00000000 depc:0x00000000
06:39:59.025 -> 
06:39:59.025 -> Chip ID: 00e40d4d
06:39:59.025 -> CPU-Frequenz: 80
06:39:59.025 -> 
06:39:59.025 -> ESP8266 Flash-Speicher Info:
06:39:59.025 -> Flash ID:   00146085
06:39:59.025 -> Flash Größe laut Hersteller: 0
06:39:59.025 -> Flash Größe real: 1024 kB
06:39:59.025 -> 
06:39:59.025 -> Flash Größe eingestellt: 1024 kB
06:39:59.025 -> Flash Geschwindigkeit eingestellt: 40 MHz
06:39:59.025 -> Flash Modus eingestellt:  QIO
06:39:59.025 -> Einstellungen zur Flashgröße korrekt.
06:39:59.025 -> 
06:39:59.025 -> 
06:39:59.025 -> Versorgungsspannung: 3489 [mV]
06:39:59.025 -> 
06:39:59.025 -> 
06:40:02.046 -> 24
06:40:02.046 -> Lesen des Dateiinhaltes:
06:40:02.046 -> ⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮
06:40:02.046 -> Datei geschlossen
06:40:07.066 -> 24
06:40:07.066 -> Lesen des Dateiinhaltes:
06:40:07.066 -> ⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮
06:40:07.066 -> Datei geschlossen

Wegen der Zeichenbegrenzung habe ich den Post aufgeteilt.
Nach einem regulären Neustart (also GPIO0 von GND gelöst) gibt es folgende Ausgabe:

 SPIFFS Initialisierung....OK
06:46:45.880 -> Oeffnen der Datei fehlgeschlagen
06:46:45.880 -> 
06:46:45.880 -> Starte System
06:46:45.880 -> Konfiguration: /file.txt
06:46:45.934 -> Baudrate: 115200
06:46:45.934 -> 
06:46:45.934 -> 
06:46:48.884 -> Erstellungszeit: Thu Jun 13 06:42:39 2019
06:46:48.884 -> Belegte Größe durch Programm: 278 kB
06:46:48.884 -> Verbleibender Speicher: 660 kB
06:46:48.984 -> MD5-Prüfsumme Programm: c7eebd3fa4c0758f23c70782ef1bc804
06:46:52.045 -> 
06:46:52.045 -> IDE-Version: 1.8.9
06:46:52.045 -> Core-Version: 2_4_2
06:46:52.045 -> SDK-Version: 2.2.1(cfd48f3)
06:46:52.045 -> Boot-Version: 31
06:46:52.045 -> Boot-Modus: 1
06:46:52.045 -> 
06:46:55.049 -> Grund für Neustart: External System
06:46:55.049 -> Debug zum Neustart: Fatal exception:0 flag:6 (EXT_SYS_RST) epc1:0x00000000 epc2:0x00000000 epc3:0x00000000 excvaddr:0x00000000 depc:0x00000000
06:46:58.055 -> 
06:46:58.055 -> Chip ID: 00e40d4d
06:46:58.055 -> CPU-Frequenz: 80
06:46:58.055 -> 
06:46:58.055 -> ESP8266 Flash-Speicher Info:
06:46:58.055 -> Flash ID:   00146085
06:46:58.055 -> Flash Größe laut Hersteller: 0
06:46:58.055 -> Flash Größe real: 1024 kB
06:46:58.055 -> 
06:46:58.055 -> Flash Größe eingestellt: 1024 kB
06:46:58.055 -> Flash Geschwindigkeit eingestellt: 40 MHz
06:46:58.055 -> Flash Modus eingestellt:  QIO
06:46:58.055 -> Einstellungen zur Flashgröße korrekt.
06:46:58.055 -> 
06:46:58.055 -> 
06:46:58.055 -> Versorgungsspannung: 3476 [mV]
06:46:58.055 -> 
06:46:58.055 -> 
06:47:01.360 -> 24
06:47:01.360 -> Lesen des Dateiinhaltes:
06:47:01.360 -> ⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮⸮ (<- Das geht ein paar tausend mal so weiter, deswegen gekürzt)
06:47:02.907 -> Soft WDT reset
06:47:02.907 -> 
06:47:02.907 -> ctx: cont 
06:47:02.907 -> sp: 3ffffd50 end: 3fffffd0 offset: 01b0
06:47:02.907 -> 
06:47:02.907 -> >>>stack>>>
06:47:02.907 -> 3fffff00:  0000fbff 00000001 3fffff2d 4020823d  
06:47:02.907 -> 3fffff10:  3ffefdec 3fff0470 00000014 00000001  
06:47:02.907 -> 3fffff20:  3fffff70 00000001 3ffef9e0 40202ab5  
06:47:02.907 -> 3fffff30:  3ffefdec 00000018 3ffeece0 40207ea8  
06:47:02.907 -> 3fffff40:  3fffdad0 00000000 3ffeece0 3ffeed98  
06:47:02.907 -> 3fffff50:  3fffdad0 000000c8 3ffeece0 40208b25  
06:47:02.907 -> 3fffff60:  3ffe8b9c 00000000 3ffeece0 40207e93  
06:47:02.907 -> 3fffff70:  3fff0464 3fff04a4 3ffeece0 402098c0  
06:47:02.907 -> 3fffff80:  3fffdad0 00000000 3ffeece0 40207598  
06:47:02.907 -> 3fffff90:  402099d0 00000000 000003e8 feefeffe  
06:47:02.907 -> 3fffffa0:  3fff0464 3fff04a4 feefeffe feefeffe  
06:47:02.907 -> 3fffffb0:  feefeffe 00000000 3ffeed90 40208738  
06:47:02.907 -> 3fffffc0:  feefeffe feefeffe 3ffe8504 40100739  
06:47:02.907 -> <<<stack<<<
06:47:02.907 -> 
06:47:02.907 ->  ets Jan  8 2013,rst cause:2, boot mode:(3,6)
06:47:02.907 -> 
06:47:02.991 -> load 0x4010f000, len 1384, room 16 
06:47:02.991 -> tail 8
06:47:02.991 -> chksum 0x2d
06:47:02.991 -> csum 0x2d
06:47:02.991 -> vbb28d4a3
06:47:02.991 -> ~ld
06:47:03.960 -> 
06:47:03.960 -> SPIFFS Initialisierung....OK
06:47:07.009 -> Oeffnen der Datei fehlgeschlagen
06:47:07.009 -> 
06:47:07.009 -> Starte System
06:47:07.009 -> Konfiguration: /file.txt
06:47:07.009 -> Baudrate: 115200

Zu den anderen Fragen:
Ich möchte den Chip so befüllen, dass eine gültige Konfiguration enthalten ist. Sollte aber aufgrund von “was auch immer”, Stromausfall während eines Schreibvorgangs oder ähnlichem Müll in der Datei landen, dann fällt in der Programmüberprüfung auf, dass die Datei fehlerhaft ist. In so einem Fall ist es üblich und sinnvoll die Dateien zu löschen, am saubersten ist hier sicherlich eine Formatierung.

Den Part mit file2 habe ich geschrieben, nachdem ich eine Fehlermeldung bekommen habe, dass file schon verwendet wird (habe file ja weiter ober im Programm verwendet, allerdings mit “w”, da ich dachte der Fehler könnte an dem vorher verwendeten “w+” liegen. Deswegen habe ich es erst mit “w” verwendet, und dann mit “r”. )

Ach und bevor es jemandem Auffällt: ursprünglich hatte ich mit der aktuellen 2.5.1 gearbeitet, aber nachdem ich die Diskussionen über mögliche Fehler gelesen habe, dachte ich , ich gehe auf die 2.4.2 zurück, da die wohl stabiler laufen soll. Egal: Beide gehen nicht :smiley:

Meine Flash Einstellungen sind:

Board: Generic ESP8266
Upload Speed: 115200
CPU Frequency: 80 MHz
Crystal Frequency: 26 MHz
Flash Size: 1M (64K SPIFFS) ← Habe ich variiert, ändert nichts
Flash Mode: QIO ← Habe ich variiert, ändert nichts
Flash Frequenzy: 40 MHZ
Reset Method: ck
Debug Port: Disabled
Debug Level: Keine
IwIP Variant: v2 Lower Memory
VTables: Flash
Builtin LED: 2
Erase Flash: All Flash Contents ← Habe ich variiert, ändert nichts

Auch der Einsatz des yield() Befehls bringt keine Änderung, mittlerweile 3 Chips überprüft, alle zeigen das gleiche Verhalten.

Tommylicious1980:
Den Part mit file2 habe ich geschrieben, nachdem ich eine Fehlermeldung bekommen habe, dass file schon verwendet wird (habe file ja weiter ober im Programm verwendet, allerdings mit "w", da ich dachte der Fehler könnte an dem vorher verwendeten "w+" liegen. Deswegen habe ich es erst mit "w" verwendet, und dann mit "r". )

File file = SPIFFS.open(filename, "w+");
...............
file.close();

File file = SPIFFS.open(filename, "r");
....................
file.close();

Einen 07 habe ich nicht!
Nodemcu

SPIFFS Initialisierung....OK
Schreibe Daten in die Datei

Starte System
Konfiguration: /file.txt
Baudrate: 115200


Erstellungszeit: Thu Jun 13 07:25:54 2019
Belegte Größe durch Programm: 278 kB
Verbleibender Speicher: 744 kB
MD5-Prüfsumme Programm: 644b140062bbc032b26b448ae9f1449f

IDE-Version: 1.8.5
Core-Version: 2_4_2
SDK-Version: 2.2.1(cfd48f3)
Boot-Version: 31
Boot-Modus: 1

Grund für Neustart: External System
Debug zum Neustart: Fatal exception:0 flag:6 (EXT_SYS_RST) epc1:0x00000000 epc2:0x00000000 epc3:0x00000000 excvaddr:0x00000000 depc:0x00000000

Chip ID: 00202a1c
CPU-Frequenz: 80

ESP8266 Flash-Speicher Info:
Flash ID:   001640C8
Flash Größe laut Hersteller: 4194304
Flash Größe real: 4096 kB

Flash Größe eingestellt: 4096 kB
Flash Geschwindigkeit eingestellt: 40 MHz
Flash Modus eingestellt:  DIO
Einstellungen zur Flashgröße korrekt.


Versorgungsspannung: 3007 [mV]


24
Lesen des Dateiinhaltes:
Beispielinhalt....

Datei geschlossen
24
Lesen des Dateiinhaltes:
Beispielinhalt....

Datei geschlossen
24
Lesen des Dateiinhaltes:
Beispielinhalt....

Datei geschlossen
24
Lesen des Dateiinhaltes:
Beispielinhalt....

Datei geschlossen
24
Lesen des Dateiinhaltes:
Beispielinhalt....

Datei geschlossen
24
Lesen des Dateiinhaltes:
Beispielinhalt....

Datei geschlossen
24
Lesen des Dateiinhaltes:
Beispielinhalt....

Datei geschlossen
24
Lesen des Dateiinhaltes:
Beispielinhalt....

Datei geschlossen
24
Lesen des Dateiinhaltes:
Beispielinhalt....

Datei geschlossen
24
Lesen des Dateiinhaltes:
Beispielinhalt....

Datei geschlossen
24
Lesen des Dateiinhaltes:
Beispielinhalt....

Datei geschlossen
24
Lesen des Dateiinhaltes:
Beispielinhalt....

Datei geschlossen
24
Lesen des Dateiinhaltes:
Beispielinhalt....

Gruß Fips

1.8.10
2.5.2

SPIFFS Initialisierung....OK
Schreibe Daten in die Datei

Starte System
Konfiguration: /file.txt
Baudrate: 115200


Erstellungszeit: Thu Jun 13 07:38:45 2019
Belegte Größe durch Programm: 292 kB
Verbleibender Speicher: 728 kB
MD5-Prüfsumme Programm: 6d445a62248e0c68cdc229cece6aa7ae

IDE-Version: 1.8.10
Core-Version: 2_5_2
SDK-Version: 2.2.1(cfd48f3)
Boot-Version: 31
Boot-Modus: 1

Grund für Neustart: External System
Debug zum Neustart: Fatal exception:0 flag:6 (EXT_SYS_RST) epc1:0x00000000 epc2:0x00000000 epc3:0x00000000 excvaddr:0x00000000 depc:0x00000000

Chip ID: 00202a1c
CPU-Frequenz: 80

ESP8266 Flash-Speicher Info:
Flash ID:   001640C8
Flash Größe laut Hersteller: 4194304
Flash Größe real: 4096 kB

Flash Größe eingestellt: 4096 kB
Flash Geschwindigkeit eingestellt: 40 MHz
Flash Modus eingestellt:  DIO
Einstellungen zur Flashgröße korrekt.


Versorgungsspannung: 3000 [mV]


36
Lesen des Dateiinhaltes:
Beispielinhalt....

Datei geschlossen
36
Lesen des Dateiinhaltes:
Beispielinhalt....

Datei geschlossen
36
Lesen des Dateiinhaltes:
Beispielinhalt....

Datei geschlossen
36
Lesen des Dateiinhaltes:
Beispielinhalt....

Datei geschlossen
36
Lesen des Dateiinhaltes:
Beispielinhalt....

Datei geschlossen
36
Lesen des Dateiinhaltes:
Beispielinhalt....

Datei geschlossen
36
Lesen des Dateiinhaltes:
Beispielinhalt....

Datei geschlossen

Gruß Fips

Derfips:
File file = SPIFFS.open(filename, "w+");
...............
file.close();

File file = SPIFFS.open(filename, "r");
....................
file.close();

... :confused: jo... hätte ich auch drauf kommen können... ich Esel

...an der IDE und SDK scheint es ja deinem 2ten Post nach auch nicht zu liegen. Ich werde nochmal die Hardwarreseitige Verkabelung checken, da werd ich aber nicht so bald zu kommen, weil ich im Moment keine Messinstrumente zur Verfügung habe.

Zum Thema Spiffs kannst du dich gerne bei mir umschauen.

Gruß Fips

Was ich jetzt noch probiert habe:

Die Datei config.txt habe ich jetzt hochgeladen (über die IDE -> Sketch Data upload), die Datei kann geöffnet werden und wird korrekt verarbeitet. Es liegt also definitiv an dem Schreibvorgang, dass hier "Müll" geschrieben wird.

Einige Hinweise die ich noch verfolgt habe waren leider nicht erfolgreich:

Ich berichte weiter :smiley:

Danke FIPS für den Link, aber alles was ich über SPIFFS gelernt habe habe ich genau auf deiner Seite gelernt :smiley:
Die ist echt gut und eine wahre Fundgrube. Hab ne Weile gebraucht, bis ich die HTML Geschichte durchblickt habe. Mir war nicht ganz klar, wann und wie der Helper für den Dateiupload aktiv wird, weil es so verschachtelt ist, aber die Lösung ist extrem elegant.

SO!!

Problem “gelöst”. Es liegt am verwendeten Chipsatz des Flashspeichers. Der Hersteller ist Puya und es gab diverse Diskussionen darüber. Ich habe jetzt die neueste Core Version (2.5.2) installiert, das alleine reichte allerdings noch nicht. Ich musste in der ESP.h noch die Zeilen

#ifndef PUYA_SUPPORT
  #define PUYA_SUPPORT 0
#endif

abändern in:

#define PUYA_SUPPORT 1

Jetzt läuft das Programm fast sauber durch. Es kommt nach dem Schreiben nach wie vor zu einem Lesefehler:

11:22:47.860 -> Schreibe Daten in die Datei...
11:22:47.927 -> Datei wurde geschrieben
11:22:48.904 -> ??????????????????????????????? (usw...)
11:22:52.027 -> Soft WDT reset
11:22:52.027 -> 
11:22:52.027 -> >>>stack>>>
11:22:52.027 -> 
11:22:52.027 -> ctx: cont
11:22:52.027 -> sp: 3ffffac0 end: 3fffffc0 offset: 01b0
11:22:52.027 -> 3ffffc70:  3fffff44 000000ff 3fff1554 4021744f  
11:22:52.027 -> 3ffffc80:  3fffff44 3fff0678 3fff0678 4021305b  
11:22:52.027 -> 3ffffc90:  40215bbe 000003e8 3fffff44 4021d710  
11:22:52.027 -> 3ffffca0:  3fffff44 3fff0678 3fff0678 402025f9  
11:22:52.261 -> 3ffffcb0:  544f227b 53555f41 4f485f45 414e5453  
11:22:52.261 -> 3ffffcc0:  3a22454d 4f222c31 555f4154 505f4553  
11:22:52.261 -> 3ffffcd0:  57535341 2244524f 222c303a 5454514d  
11:22:52.261 -> 3ffffce0:  4553555f 2c313a22 54514d22 53555f54  
11:22:52.261 -> 3ffffcf0:  55415f45 4e454854 41434954 4e4f4954  
11:22:52.261 -> 3ffffd00:  2c303a22 31534422 30324238 5345525f  
11:22:52.261 -> 3ffffd10:  54554c4f 224e4f49 2c30313a 41544f22  
11:22:52.261 -> 3ffffd20:  524f505f 383a2254 2c363632 54514d22  
11:22:52.261 -> 3ffffd30:  4f505f54 3a225452 33383831 544e222c  
11:22:52.261 -> 3ffffd40:  4e495f50 56524554 224c4c41 3038313a  
11:22:52.261 -> 3ffffd50:  4d222c30 5f545451 54415453 495f5355  
11:22:52.261 -> 3ffffd60:  5245544e 4c4c4156 30363a22 514d222c  
11:22:52.261 -> 3ffffd70:  535f5454 4f534e45 4e495f52 56524554  
11:22:52.261 -> 3ffffd80:  224c4c41 2c30363a 414c5722 53535f4e  
11:22:52.261 -> 3ffffd90:  3a224449 746e4922 656e7265 6e694474  
11:22:52.261 -> 3ffffda0:  736e6567 2c22474e 414c5722 41505f4e  
11:22:52.261 -> 3ffffdb0:  4f575353 3a224452 34373222 31383139  
11:22:52.261 -> 3ffffdc0:  37393636 38353833 39373236 222c2234  
11:22:52.261 -> 3ffffdd0:  5f41544f 54534f48 454d414e 54223a22  
11:22:52.261 -> 3ffffde0:  65706d65 75746172 6f436572 6f72746e  
11:22:52.261 -> 3ffffdf0:  222c226c 5f41544f 53534150 44524f57  
11:22:52.261 -> 3ffffe00:  31223a22 22343332 544e222c 455a5f50  
11:22:52.261 -> 3ffffe10:  4f5a5449 3a22454e 72754522 2f65706f  
11:22:52.261 -> 3ffffe20:  6c726542 2c226e69 50544e22 5445535f  
11:22:52.261 -> 3ffffe30:  56524553 3a225245 2e656422 6c6f6f70  
11:22:52.261 -> 3ffffe40:  70746e2e 67726f2e 4d222c22 5f545451  
11:22:52.261 -> 3ffffe50:  52455355 454d414e 41223a22 6e696d64  
11:22:52.261 -> 3ffffe60:  4d222c22 5f545451 53534150 44524f57  
11:22:52.261 -> 3ffffe70:  61223a22 6e696d64 4d222c22 5f545451  
11:22:52.261 -> 3ffffe80:  56524553 3a225245 32393122 3836312e  
11:22:52.261 -> 3ffffe90:  3837312e 2c22392e 54514d22 4f545f54  
11:22:52.261 -> 3ffffea0:  5f434950 46455250 3a225849 6c657422  
11:22:52.261 -> 3ffffeb0:  2c222f65 54514d22 4f545f54 5f434950  
11:22:52.261 -> 3ffffec0:  46455250 22325849 6d63223a 222f646e  
11:22:52.261 -> 3ffffed0:  514d222c 545f5454 4349504f 4154535f  
11:22:52.261 -> 3ffffee0:  22535554 532f223a 45544154 4d222c22  
11:22:52.261 -> 3ffffef0:  5f545451 49504f54 45535f43 524f534e  
11:22:52.261 -> 3fffff00:  2f223a22 534e4553 2c22524f 54514d22  
11:22:52.261 -> 3fffff10:  4f545f54 5f434950 2254574c 4c2f223a  
11:22:52.261 -> 3fffff20:  2c225457 54514d22 4f545f54 5f434950  
11:22:52.261 -> 3fffff30:  4e49414d 54223a22 43706d65 007d226f  
11:22:52.261 -> 3fffff40:  40104d00 4021e798 00000000 000003e8  
11:22:52.261 -> 3fffff50:  3ffef9d0 3fff204c 3fff208c 00000000  
11:22:52.261 -> 3fffff60:  00000000 3fff0820 402155d8 3fffefa0  
11:22:52.261 -> 3fffff70:  40215bbe 000003e8 000003e8 3fff07a8  
11:22:52.261 -> 3fffff80:  3fff02bc 3ffe8bfe 3fff0678 40203c47  
11:22:52.261 -> 3fffff90:  3fffdad0 00000000 3fff0778 4020526d  
11:22:52.261 -> 3fffffa0:  feefeffe feefeffe feefeffe 40215680  
11:22:52.261 -> 3fffffb0:  feefeffe feefeffe 3ffe8570 40100639  
11:22:52.261 -> <<<stack<<<
11:22:52.261 -> 
11:22:52.261 ->  ets Jan  8 2013,rst cause:2, boot mode:(3,6)
11:22:52.261 -> 
11:22:52.309 -> load 0x4010f000, len 1384, room 16 
11:22:52.309 -> tail 8
11:22:52.309 -> chksum 0x2d
11:22:52.309 -> csum 0x2d
11:22:52.309 -> v8b899c12
11:22:52.309 -> ~ld
11:22:53.344 -> 
11:22:53.344 -> Starte System

Der aber nach einem Reset nicht mehr auftritt. Dieses Verhalten werde ich mir wenn ich etwas mehr Zeit habe nochmal genau ansehen. Ich hatte noch beim Modus “w” statt “w+” stehen, es funktioniert jetzt alles.

Super das es jetzt funktioniert, so hab ich auch was zum selten verwendeten 07er gelernt.

Danke, für dein Feedback zu meiner Webseite!

Gruß Fips

Deine Webseite ist wirklich eine gute Fundgrube. Mir war vorher gar nicht so bewusst wie das mit den Tabs funktioniert. Ist halt eine "Eigenart". Der PUYA Bug ist auch eigentlich nur von den ESP01 her bekannt. Anscheinend werden die Chips jetzt aber auch auf anderen Modulen verbaut.

Ich finde es schon seltsam, dass diese PUYA-Sache erkannt wurde und ja auch der Patch dafür in der CPP/H schon eingepflegt ist, aber gerade beim -07 nicht erkannt wird. Wenn man sich den Code ansieht, dann wird der Chip abgefragt und es sollte dann entsprechend der PUYA-Patch aktiv werden, allerdings funktioniert es wohl nicht zuverlässig.

Anfangs habe ich geglaubt ich könnte den Patch aktivieren indem ich in meinem Sketch die Zeile

#define PUYA_SUPPORT 1

einfüge, aber das reicht nicht, bzw. führt sogar zu einer Compilewarnung weil PUYA_SUPPORT schon über die eingebundene Biblithek definiert wird. Da bin ich aber auch einfach noch nicht firm genug wie man sauber mit den #defines umgeht. Übergangsweise ist es für mich okay, wenn ich einfach in der CPP "Dirty" den Puya-Support aktiviere, aber schön ist was anderes, zumal wenn ich mal ein update der Core Version mache, oder den Sketch an einem anderen Rechner weiter bearbeiten will... oder wenn ich mal einen Chip programmieren möchte, der keinen PUYA-Support benötigt oder sogar mit dem jetzt standardmäßig aktivierten Codeblock Fehler produziert.

Und jetzt noch ein anderes Anliegen, das off-topic ist:
...to something completely different:

Mir ist aufgefallen, dass seit der CoreVersion 2.5.2 jetzt das Flash-tool etwas anders ausgeführt wird. Es versucht den Chip mittels Flasher zu resetten, früher lief das irgendwie anders ab. Ich muss jetzt aufpassen und manuell den Reset auslösen. Weiss da jemand was drüber, was ich wo umstellen kann?