mikrocontroller.net

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


Autor: soundmachine123 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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????

Autor: Planlos (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: H.Joachim S. (crazyhorse)
Datum:

Bewertung
0 lesenswert
nicht 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).

Autor: A. B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: H.Joachim S. (crazyhorse)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: soundmachine123 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.