Forum: Mikrocontroller und Digitale Elektronik M25P16 Flash, Verständnisfrage


von Rainer S. (rainer_mbau)


Lesenswert?

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

von Schluckauf (Gast)


Lesenswert?

24C64

von Juergen P. (optronik)


Lesenswert?

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.

: Bearbeitet durch User
von Ahnungsluusa (Gast)


Lesenswert?

Schluckauf schrieb:
> 24C64

Das sind I2C EPROMs. Der TO redet aber von SPI .....

von holger (Gast)


Lesenswert?

>Das sind I2C EPROMs. Der TO redet aber von SPI .....

Dann eben SPI FRAM. FM25... oder so ähnlich.

von Rainer S. (rainer_mbau)


Lesenswert?

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

von Juergen P. (optronik)


Lesenswert?

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

: Bearbeitet durch User
von Rainer S. (rainer_mbau)


Lesenswert?

Juergen P. schrieb:
> Regel: von 1 auf 0 ohne löschen möglich

OK. Hab ich verstanden.
Vielen Dank!

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.