Forum: Mikrocontroller und Digitale Elektronik ESP8266 EEPROM-Emulation für Logdaten


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von A. S. (rava)


Lesenswert?

Hallo,

bislang benutze ich EEPROM.h für ein paar Konfigurationswörter, wie z.B. 
hier beschrieben:
https://blog.hirnschall.net/esp8266-eeprom/

Als nächstes möchte ich die EEPROM-Emulation für Sensor-Logdaten nutzen. 
Dadurch ergeben sich einige Randbedingungen, die mit dieser library 
nicht gut zusammenpassen:

Die Messdaten werden zunächst im RAM gesammelt. Nur alle paar Stunden 
wenn ein "Block" (ca. 8kB) aufgelaufen ist, soll dieser als Ganzes 
weggeschrieben werden.
Auf dem Flash sollen ca. 320kB abgelegt werden. Ich möchte also einen 
Buffer aus 40 solchen 8kB Blöcken in der Emulation managen.
Ich brauche also ein Verfahren, dass den Flash blockweise schreiben 
kann. EEPROM.h kann aber immer nur allen verwalteten Speicher auf einmal 
flashen via EEPROM.commit().

Gibt es hierfür eine geeignete lib, die für mich funktioniert - vor 
allem da ich immer noch das Konfigurationsmanagement inkl. WLAN 
Zugangsdatenmanagement im core sowie OTA parallel verwenden möchte?

von Rüdiger B. (rbruns)


Lesenswert?

Willst du den internen Flash benutzen oder einen externen i2c oder spi 
Flash ??

von A. S. (rava)


Lesenswert?

wie gehabt den Internen. 600kB müssten noch frei sein, wenn die Angaben 
in der Arudino IDE stimmen.

von Stefan F. (Gast)


Lesenswert?

EEPROM.commit() basiert auf der SDK Funktion spi_flash_write(). Du 
kannst die Funktionen des SDK direkt aufrufen, um die gewünschte 
Flexibilität zu erhalten.
1
extern "C"{
2
    #include "spi_flash.h"
3
}

https://docs.espressif.com/projects/esp-idf/en/release-v3.2/api-reference/storage/spi_flash.html

Wenn du viele Schreibzugriffe vor hast, nimm besser ein virtuelles 
Filesystem das Wear Levelling implementiert. Dann lebt der Flash Chip 
länger.

von Thorsten S. (thosch)


Lesenswert?

Würde aus Lebensdauergründen das interne Flash nur für (einmalige bzw. 
selten geänderte) Konfigurationsdaten benutzen, nicht für regelmäßig 
gespeicherte Logdaten.

Häng für letzteres doch einfach ein 4Mbit FRAM dran, dann hast du 
512KByte Logspeicher und kannst die Daten sogar ohne Problem sofort 
schreiben, anstatt erst im RAM sammeln zu müssen.

: Bearbeitet durch User
von Manfred P. (pruckelfred)


Lesenswert?

Thorsten S. schrieb:
> Würde aus Lebensdauergründen das interne Flash nur für (einmalige bzw.
> selten geänderte) Konfigurationsdaten benutzen, nicht für regelmäßig
> gespeicherte Logdaten.

Das ist durchaus ein Argument.

> Häng für letzteres doch einfach ein 4Mbit FRAM dran, dann hast du
> 512KByte Logspeicher und kannst die Daten sogar ohne Problem sofort
> schreiben, anstatt erst im RAM sammeln zu müssen.

Um Daten zu loggen, bieten sich SD-Karten an, die China-Module dafür 
sind billig und fertige Programme verfügbar.

Da muß er sich mit der Schreiberei allerdings zurückhalten, viele SD 
sind undefiniert langsam.

Ich nutze SD in der Arduino-Umgebung, da haben sich kleine XMore oder 
ATP mit 2Gb als problemlos erwiesen.

Mal schauen, ob benito die noch hat:
Beitrag "Re: [V] 2GB MicroSD samt MIcro SD Adapter"

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.