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
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.
...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
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.
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.
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.
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.