M25P16 Flash, Verständnisfrage

OP #4553914
Hallo Zusammen,

ich versuche gerade zu verstehen wie ein Flash-ROM funktioniert und bin 
etwas verwirrt. Konkret habe ich hier den M25P26 über SPI an einem 
STM32F103 hängen.
Mittlerweile habe ich verstanden, dass der Speicher in Sektoren und 
Pages aufgeteilt ist. Und das ich nur Pages beim Beschreiben adressieren 
kann.
Aber ich finde keine Möglichkeit einen Wert im Speicher zu ändern, ohne 
dabei gleich einen ganzen Sektor zu löschen. Aber wenn ich nur einen 
Wert anpassen möchte, müsste ich dafür doch den ganzen Sektor 
zwischenspeichern.
Ist das richtig, oder habe ich etwas übersehen?

Wenn das tatsächlich so ist, gibt es alternativen um einige KB nicht 
flüchtig zu speichern?

Danke und Gruß
Rainer
#4553936
Einen Wert im Flash Speicher kann man auf drei Arten ändern:

1. Sektor auslesen, Daten ändern, Sektor löschen, Daten zurückschreiben
2. Sektor/Page in anderen Sektor/Page kopieren und dabei Änderungen 
vornehmen
3. Unter Berücksichtigung dass man Bits von 1 auf 0 programmieren kann: 
Page lesen, ändern, zurückschreiben.

Löschen bedeutet vereinfacht dass alle Bits wieder auf 1 gesetzt werden 
(abhängig von der Flash Technologie). Man kann somit immer von 1 auf 0 
programmieren ohne löschen zu müssen.
OP #4553965
Schluckauf schrieb:
> 24C64
Danke, werde ich mir auch anschauen. Glaube ich habe da so etwas in der 
Kiste liegen.

Juergen P. schrieb:
> 3. Unter Berücksichtigung dass man Bits von 1 auf 0 programmieren kann:
> Page lesen, ändern, zurückschreiben.
Das klingt schon mal Interessant, aber wie das funktioniert verstehe ich 
nicht.

Ich habe bemerkt, dass wenn ich einen Wert einfach zu überschreiben 
versuche an der Stelle im Flash plötzlich einfach eine 0 auftaucht.
 Also z.B. ich schreibe in die Page 0 den Wert 2 und schreibe 
anschließend in die Page den Wert 253, dann wird aus der 2 nicht die 253 
sondern eine 0. Diese 0 kann ich aber nicht mehr ändern.

Kann mir das jemand vielleicht erklären?

Danke und Gruß
Rainer
#4553979
Jede Flashzelle (=Bit) ist wie ein Kondensator der durch programmieren 
entladen (0) und durchs löschen geladen (1) wird.

Dein Beispiel:

Wert 2 =   00000010

Wert 253 = 11111101

Regel: von 1 auf 0 ohne löschen möglich

Ergebnis von 253 auf Inhalt 2 programmieren: 00000000

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 10 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.