Forum: Mikrocontroller und Digitale Elektronik ADESTO AT25SF161-SHD-B Flash - Verständnisfrage


von soundmachine123 (Gast)


Lesenswert?

Hallo Zusammen,

ich habe meiner Schaltung mal einen 2MB Flash Speicher spendiert, weil 
ich eine Unmenge an "Rezepturen" zu verwalten habe.

Habe mich für diesen hier entschieden
ADESTO AT25SF161-SHD-B

und soweit auch am Laufen.
Nun habe ich aber eine Verständnisfrage die ich doch etwas wundert.

Ich beschreibe immer eine Page komplett (was ja nicht unbedingt sein 
müsste, aber sich in meiner Datensruktur anbietet)
Jetzt steht aber im Datenblatt, dass ein Beschreiben des Flash nur in 
Bytes funtioniert, die vorher gelöscht wurden.
So weit so gut, heißt für mich, wenn ich z.B. in der ersten Page am 1. 
Byte eine 5 gespeichert hatte und will während der Runtime daraus eine 
machen muss diese Speicherzelle zuerst gelöscht werden (Inhalt dann 
0xFF), dann erst kann ich das Byte beschreiben.

Jetzt kommt aber der Hammer!
Lt. Datenblatt kann man nur 4k zusammen löschen.

Heist das, wenn ich 20 Pages mit Daten beschrieben habe und dann EINEN 
Wert ändern will, muss ich alle 4k auslesen, 4k löschen und die ganzen 
4k (mit dem einen geänderten Wert) wieder reinflashen?

Da muss es doch eine andere Möglichkit geben????

von Planlos (Gast)


Lesenswert?

So funktioniert FLASH-Speicher nunmal.
Entweder auf EEPROM ausweichen, oder genug Flash-Speicher verbauen, dass 
für jeden Datensatz eine ganze Page verwendet werden kann, oder 
"intelligenten" Flash-Speicher verwenden (--> SD-Karte), bei der sich 
der integrierte Controller um den ganzen Ablauf kümmert.

von H.Joachim S. (crazyhorse)


Lesenswert?

soundmachine123 schrieb:
> Jetzt kommt aber der Hammer!
> Lt. Datenblatt kann man nur 4k zusammen löschen.

So ist es. Und normalerweise ist das auch nicht schlimm. So grosse 
Speicher nimmt man normalerweise nicht, um einzelne Bytes wegzuspeichern 
bzw. zu ändern, sondern eher um fortlaufend grössere Datenmengen zu 
speichern.
Für deine Anwendung gibt es bessere Chips (EEPROM, FRAM).

von A. B. (Gast)


Lesenswert?

Naja, z. B.: Man ändert nicht ein paar Bytes, sondern schreibt ein 
fortlaufendes Log, wo einfach der Reihe nach die geänderten (und nur 
diese!) Bytes (oder die geänderten Datensätze, falls nicht zu groß) mit 
ihren Adressen abgelegt werden. Und erst wenn der Platz fürs Log knapp 
wird oder in einzelnen Datensätzen viele Änderungen zusammengekommen 
sind, werden die "alten" Sektoren gelöscht und mit den aktualisierten 
Datensätzen neu befüllt, und das Log dann ebenfalls (event. teilweise) 
gelöscht. Das macht natürlich einen gewissen Aufwand.

Das ist aber allein schon deshalb sinnvoll, weil Flash-Speicher 
typischerweise eine sehr begrenzte Anzahl Schreib-/Löschzyklen 
überstehen.
EEPROMs sind da deutlich gnädiger.

Deshalb: Braucht man wenig Platz, ist ein EEPROM einfacher, aber da ist 
z. Z. wohl bei 256kByte Schluss. Wenn's mehr sein soll, muss man den 
Aufwand halt spendieren ...

Geht etwa bei SD-Karten auch nicht anders, da werden immer komplette 
Sektoren gelöscht/beschrieben.

von H.Joachim S. (crazyhorse)


Lesenswert?

Ansonsten: die AT45xx-Serie ist da deutich flexibler.
Kleinere mögliche Blockgrössen und vor allem ein interner SRAM-Buffer.
D.h. du kannst eine page in den internen SRAM lesen, dann modifizieren, 
flash-page löschen und zurückschreiben. Du musst also nicht den gesamten 
page-Inhalt via SPI erst auslesen, extern zwischenspeichern+modifizieren 
und dann zurückschreiben, sondern kannst das chipintern erreichen.

von soundmachine123 (Gast)


Lesenswert?

Hallo,


vielen lieben Dank für die Antworten. Ok dann ist das wohl so. Nicht 
sonderlich schlimm aber ich war mir fast sicher, dass es noch andere 
Möglichkeiten gibt. Das ist wohl nicht der Fall, also muss ich mir einen 
"Workaround" bauen.

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.