Forum: Mikrocontroller und Digitale Elektronik Alterung der Flashzellen (Zyklen)


von Flasher (Gast)


Lesenswert?

Hallo,

ich habe diesen Flash im Einsatz:
http://www.micron.com/products/ProductDetails.html?product=products/nor_flash/serial_nor_flash/M25P64-VD11

Was mich interesieren würde, und darüber schreibt das Datenblatt nicht 
viel...

Wie setzten sich die teoretischen 100k Zyklen zusammen?

Im Datenblatt steht "Erase/Program Cycles". Bei diesem NOR Typ ist es 
so, das durch ein Page-Program die zellen von 1 nach 0 kippen können. 
Zurück nach 1 bekommt man sie durch ein Erase. Wenn ich nun einen Sektor 
erase mache und dann darin "ein" byte schreibe, altern dann die 
restlichen Zellen auch?

Oder erst wenn ich diese dann auch schreibe bzw. wenn ich den gesagtem 
Sektor wieder lösche?

Flasher

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Flasher schrieb:
> Wenn ich nun einen Sektor
> erase mache und dann darin "ein" byte schreibe, altern dann die
> restlichen Zellen auch?

Jedes Kippen des Bitzustandes altert die Zelle. Ein Sektor-Erase altert 
alle Zellen, die vorher 0 waren und ein 0-Schreiben altert diejenige 
Zelle, die von 1 auf 0 wechselt.

von Flasher (Gast)


Lesenswert?

...das heißt, wenn ich -mal angenommen- erst die ganze page löschen 
würde (mit page erase, danach ist alles FF), dann nicht die ganze Page 
auf einmal schreibe (ein page-program), sondern mit 256 x 1 bytes (256ig 
page-programs), trotzdem die ganze Page an sich quasi nur 2 x altert, 
weil ich sie einmal gelöscht habe und einmal alle bytes nacheinander 
geschrieben?

hab ich das so richtig verstanden?

verhällt sich da NOR flash immer gleich (herstellerübergreifend), oder 
kommt es da darauf an wie die hersteller die Zellen aufbauen?

Flasher

von (prx) A. K. (prx)


Lesenswert?

Stellt sich aber die Frage, ob das Teil vielleicht schlau genug ist, nur 
dann eine 0 aktiv reinzuprogrammieren, wenn vorher eine 1 drin steht, 
und die Zelle in Frieden zu lassen wenn nicht.

von Arno (Gast)


Lesenswert?

Laut Datenblatt ist der Flash byteweise organisiert. Der Page-Write 
fasst das Schreiben auf mehrere Bytes in einer Page zusammen, um die 
Programmierzeit zu verkürzen. Wenn du nur ein Byte schreibst, dann 
sollten alle anderen Bytes einer Page unbeeinflusst bleiben.

von (prx) A. K. (prx)


Lesenswert?

Das kann ich da nicht drin wiederfinden. Die Dinger sind durchaus in 
Pages organisiert. Nur sind 256 Programmierzyklen langsamer als einer, 
folglich sollte man die Page nicht inkrementell programmieren, wenn man 
es eilig hat.

Aber es steht drin: "If less than 256 Data bytes are sent to device, 
they are correctly programmed at the requested addresses without having 
any effects on the other bytes of the same page." Was präzise verstanden 
hiesse, dass bereits programmierte Bytes nicht "überbraten" werden und 
die Zyklenzahl dieser anderen Bytes nicht betroffen sein sollte.

Da man Bit, Bytes und Pages nicht einzeln löschen kann, darf man sich 
das technisch vielleicht so vorstellen, dass der Versuch, ein Bit auf 1 
zu programmieren, für die Zelle unabhängig von deren Inhalt neutral ist, 
keine Auswirkung auf die Zyklenzahl hat. Wenn dann jene Bytes im 
Pagebuffer, die nicht per Kommando beschrieben wurden, auf 1 stehen, 
bleiben diese Bytes in der Page unbeeinflusst.

von Flasher (Gast)


Lesenswert?

so wie A. K. habe ich das im ungefähren auch verstanden...

Ein sector erase löscht die beinhalteden pages auf logisch 1, dann kann 
ich geziehlt bits in bytes auf logisch 0 programmieren, maximal aber 
immer nur eine page a 256 bytes pro page write...

...wenn ich nun nur ein byte in einer page schreibe, würde ich erwarten 
das die restlichen nicht altern, weil ja deren zustand nicht verändert 
wird, ausserdem kann ich sie ja später noch schreiben...

...ich stimme weiterhin Arno zu, zeitlich ist ein inkrementelles 
schreiben natürlich nicht zu atraktiv, aber: Es bedeutet für mich 
westliche weniger Aufwand das bestehende design (welchen inkrementelles 
schreiben schon beinhaltet, weil es vorher ein eeprom war) weiterhin zu 
benutzen als das ganze nun auf page programming umzubauen, wenn es 
unterm strich nur ein zeitlichen Vorteil bringt (ich brauch das 
programming eh nur alle schaltjahre mal...).

Flasher

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

A. K. schrieb:
> darf man sich
> das technisch vielleicht so vorstellen, dass der Versuch, ein Bit auf 1
> zu programmieren, für die Zelle unabhängig von deren Inhalt neutral ist,
> keine Auswirkung auf die Zyklenzahl hat.

Um eine Flashzelle auf 1 zu programmieren, muss man sie löschen. Wenn 
man eine genullte Zelle mit 1 überschreiben will, passiert gar nichts. 
Jeder Wechsel von 0 auf 1 und umgekehrt wird durch das Tunneln von 
Elektronen erreicht und an der Stelle findet auch daer Verschleiss 
statt. Will man also nur einzelne Zellen mit "0" bschreiben, mußß man 
halt alle anderen mit "1" beschreiben, wodurch sie unangetastet bleiben. 
Viele Controller machen das inzwischen automatisch, indem der Pagebuffer 
mit "FF" vorinitialisiert wird, und nur Null-Bits übernommen werden.

von Peter D. (pdiener) Benutzerseite


Lesenswert?

Ich weiß nicht genau, wie es bei den AVR ist, aber besteht ein 
Page-Erase normalerweise nicht aus zwei Schritten?

1. Flash Clear -> Alle Zellen auf 0
2. Flash Erase -> Alle Zellen auf 1

Genau beschrieben ist das beispielsweise bei den TMS320F2xxx. Dort gibt 
es einen Flashbereich für die Code-Security-Funktion. Wenn man da nur 
Nullen reinschreibt, ist das Bauteil für immer gesperrt.
Im Handbuch steht dazu ausdrücklich, dass das passieren kann, wenn 
während dem Flash Clear Schritt z.B. durch Unterspannung abgebrochen 
wird.
Im Handbuch zum Flash Controller steht, dass ein Flash Clear immer vor 
dem Flash Erase ausgeführt wird.

Demnach müsste es für den Verschleiß der Zellen egal sein, was vorher 
dringestanden hat.

Grüße,

Peter

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.