Hallo, ich wollte mal fragen, ob jemand weiss, wie das mit der Schreibhäufigkeit auf ein EEPROM aussieht. Im Datenblatt ist für Schreibzugriff ca 100.000 Mal angegeben. Wenn ich nun ein 4KB EEPROM ca 4000 mal in einer Schleife mit write_byte(0xFF) beschreibe, ist das ein einziger Schreibzugriff oder gleich 4000 Zugriffe? Worauf bezieht sich das Datenblatt? Kann man ein EEPROM rund 100.000 mal vollschreiben, oder quasi 100.000 bytes schreiben? Danke für Eure Hilfe Schönen Abend, Jürgen
Jede einzelne Bytestelle im EEPROM kann jeweils min. 100.000x beschrieben werden. mfg.
Ich habe häufig EEPROMs gesehen, die beim Schreiben eines Werts die gesamte Page auffrischen, zum Beispiel das 24LC256 von Microchip. Dementsprechend verkürzt sich beim Schreiben die Lebensdauer der gesamten Page. Schau am Besten ins Datenblatt deines EEPROMs, dort steht alles wichtige drin. Schönen Abend noch!
Hi, Wie das mit der Schreibhäufigkeit zu verstehen ist wurde ja schon gesagt. Das einzige was ich mir bei einigen EEPROM VORSTELLEN könnte, das ist das die vorher ÜBERPRÜFEN ob der "neue" Wert überhaupt anders ist als der "alte" Wert und erst keinen Schreibzugriff durchführen wenn die Identisch sind. WÜsste jetzt aus dem Stehgreif keinen EEPROM der das sicher macht, aber jedes mal wenn ich denke ich habe schon alles gesehen kommt der nächste Exot daher und wiederlegt mein denken. (Wobei ich nicht mal ausschließen würde das sogar einige Bekanntere EEPROM das zur Verlängerung der Lebensdauer haben, weiß es aber nicht -> DATENBLATT) Sobald die aber tatsächlich einen Schreibzyklus beginnen ist das ein Schreibzugriff im Sinne der Lebensdauer der den EEPROM altern lässt. Captain Subtext schrieb: > Ich habe häufig EEPROMs gesehen, die beim Schreiben eines Werts die > gesamte Page auffrischen, zum Beispiel das 24LC256 von Microchip. JA- das wird man immer häufiger sehen... Ist wohl schon der absolute Standart! Das hängt damit zusammen das man heute "richtige" EEPROMS Nicht mehr als das realisiert was man lange Zeit als EEPROM verstand, sondern diese in der FLASH Technologie (ist im Grund enatürlich auch ein EEPROM im Wortsinn) ausführt. Speicherzellen in Flashtechnologie sind mitllerweile viel billiger zu bauen und um welten Langlebiger als die "normalen" EEPROM Speicherzellen. NAchteil an der Flashtechnologie ist halt aber das immer nur eine komplette Seite gelöscht und neubeschreiben werden kann und nicht der Inhalt einer einzelnen Speicherzelle alleine verändert werden kann ohen die anderen anzutasten. Um dieses Problem zu lösen und auch Abwärtskompatibel zu sein baut man als Ersatz für die alten EEPROMs nun EEPROMS mit ein wenig mehr Intelligenz. Bei einem Schreibzugriff wird die gesamte Page ausgelesen und in einem kleinen RAM abgelegt und die Flash-Page gelöscht, die zu modifizierenden Speicherzellen bekommen ihre neuen Werte und nun wird die ganze Speicherseite neu mit dem Inhalt aus dem "Spiegel-Ram" beschrieben. Ein solcher EEPROM mit Flash speicher ist trotz der höheren Eigenintelligenz mittlerweile wit billiger zu bauen als der gleichgroße Typ mit echtem EEPROM. Auch die vom Benutzer benutzbaren EEPROM -Speicher in den meisten µC sind mittlerweile "SO" Implementiert. NAch aussen arbeiten die wie ein alter EEPROM, intern werkelt aber eine Kombination aus Flash und Ram. Diese Bausteine kann man gut an der Zahl der Schreibzugriffe auseinanderhalten. Flash hat typisch so um 100.000 oder mehr, echte EEPROM aber nur wenige tausend maximal. (NAtürlich gibt es auch "nackten" Flash, den man wirklich von aussen auch nur Blockweise ansprechen kann und wo kein EEPROM verhalten Simuliert wird) Zum Abschluss noch: EEPROM schrieb: >... > Wenn ich nun ein 4KB EEPROM ca > 4000 mal in einer Schleife mit write_byte(0xFF) beschreibe, ist das ein > einziger Schreibzugriff oder gleich 4000 Zugriffe? DAS sollte man NIEMALS so machen! Einen (DEN meist WICHTIGSTEN) Grund hast du jetzt sicher schon verstanden. Dein EEPROM wird selbst bei internem FlashKErn nach einigen Tagen Programmlaufzeit "matsche" sein... Aber es ist definitiv auch nicht zu vernachlässigen das die Zeit für einen "Schreibzugriff" viel höher ist als für einen Lesezugriff. Das können durchaus für einen Schreibvorgang (intern im Eeprom) ein paar ms sein, Bei FlashKernen egal ob nur ein Byte modifiziert wird oder die ganze Seite, bei "echten"EEPROM pro Byte. Gemessen am Befehlstakt eines µC sind das "Ewigkeiten". Selbst wenn man über Interrupt mitgeteilt bekommt wann der EEPROM wieder Aufnahmebereit ist (z.B. bei internem Speicher im µC) wartet man doch die meiste Zeit. Es ist daher immer Sinnvoll gut abzuwägen ob ein WErt jetzt hier und sofort unbedingt abgespeichert werden soll, oder ob es nicht reicht den einfach nur im RAM zu haben und z.B. beim Ausschalten zu speichern. (Liegt natürlich an den Daten, wenn die NICHT, unter keinen Umständen vergessen werden dürfen muss man natürlich immer sofort speichern.) Bei einer Anwendung wo man häufig die daten erfassen will, aber es gut möglich ist das sich lange nichts tut, da ist eine Überprüfung auf änderung dann das mindeste. ICh weiß ja welchen Wert ich als letztes "Geschrieben" habe. Und da ist es doch kein Problem einen einfaches "if (Wert_Alt!=Wert_Neu) WRITEEEPROM(Wert_Neu)" in den Code einzubauen. Nur mal so zur Anregung ;-) Gruß Carsten
Carsten Sch. schrieb: > Captain Subtext schrieb: >> Ich habe häufig EEPROMs gesehen, die beim Schreiben eines Werts die >> gesamte Page auffrischen, zum Beispiel das 24LC256 von Microchip. > > JA- das wird man immer häufiger sehen... Ist wohl schon der absolute > Standart! Das stimmt nur so nicht. Einfach mal ins Datenblatt schaun. 1. Es gibt ein Byte Write 2. Bei einem Pagewrite wird der Datenblock erst zwischengespeichert und erst mit der Stop-Condition ins EEPROM geschrieben. Um die Schriebzugriffe auf eine Speicherzelle zu minimieren kann man die Daten auch über den gesamten Speicher verteilen. Hat man z.B. einen Datenblock von 100Byte dann landen die Daten beim erstenschrieben an Adresse 0 beim zweiten schreiben an Adresse 100 usw. Erst wenn der gesammte Speicher voll ist wird er komplett gelöscht und wieder bei Adresse 0 geschrieben.
>Daten auch über den gesamten Speicher verteilen
Hehe.. und wie merkst Du Dir, wo die letzten gültigen Daten stehen?
Das erste Byte welches ich schreibe ist die länge des Datenblocks. Also schaue ich ist das erste Byte 0xff (Zelle gelöscht=Datenblock nicht vorhanden). Ist der Datenblock vorhanden springe ich um die Länge des Datenblocks im Speicher nach hinten. Ist dort ein gültiger Datenblock schaue weiter hinten im Speicher. Ist dort kein gültiger Datenblock verwende den letzten den du gefunden hast. Ich hoffe, es ist einigermaßen verständlich erklärt.
Matthias Lipinsky schrieb: > Hehe.. und wie merkst Du Dir, wo die letzten gültigen Daten stehen? Nachgucken, wo der letzte bescchriebene Block steht?
Hi Gibt es auch von Atmel: http://www.atmel.com/dyn/resources/prod_documents/doc2526.pdf http://www.atmel.com/dyn/resources/prod_documents/AVR101.zip MfG Spess
Es gibt da auch einen kleinen Trick, um die Lebensdauer eines EEPROMs zu erhöhen: 1. Man überprüft, ob die EEPROM-Zelle den gewünschten Wert hat. 2. Wenn nicht, schreibt man den Wert in die Zelle und springt zu 1. 3. Fertig! Ist die Zelle kaputt, wird einfach so lange drauf "rumgeprügelt", bis der Wert dann doch mal drin ist. Ist der Wert bereits vor dem Schreiben drin, wird nicht geschrieben. Je kaputter die Zellen, desto länger die Schreibezeit - korrekt geschrieben wird es trotzdem. Gruß Jonathan
>Ich hoffe, es ist einigermaßen verständlich erklärt.
Ja das ist soweit klar. Und wenn du einmal durch den vorhandenen
Speicher durch bist?
@Matthias Lipinsky Dann löscht du den Eeprom und beginnst wieder am Anfang. @Jonathan Strobl Durch das Verifizieren nach dem Schreiben stellt du aber nur sicher das du die Zelle JETZT auslesen kannst. Wie es in einer Stunde, einer Woche oder einem Jahr ist weist du nicht. Je älter eine Zelle ist um so vergesslicher wird sie. Wenige Millisekunden nach dem Schreiben zu überprüfen ob in der Zelle das richtige steht bringt also nichts.
Martin schrieb: > Carsten Sch. schrieb: >> Captain Subtext schrieb: >>> Ich habe häufig EEPROMs gesehen, die beim Schreiben eines Werts die >>> gesamte Page auffrischen, zum Beispiel das 24LC256 von Microchip. >> >> JA- das wird man immer häufiger sehen... Ist wohl schon der absolute >> Standart! > > Das stimmt nur so nicht. Einfach mal ins Datenblatt schaun. > 1. Es gibt ein Byte Write > 2. Bei einem Pagewrite wird der Datenblock erst zwischengespeichert und > erst mit der Stop-Condition ins EEPROM geschrieben. Bist du dir da auch ganz sicher ;-) Es gibt durchaus einen Unterschied zwischen den nach aussen hin "SIMULIERTEN" Verhalten und dem Internen... Bei vielen "NEUEN" EEPROM Revisionen gibst du halt einen "ByteWrite" im Auftrag, für dien Programm verhält sich ALLES wie ein Bytewrite, INTERN, OHNE DAS DU ES MERKST wird aber ein Zyklus, AUSLESEN, Zwischenspeichern, GESAMTE PAGE Löschen, IM SPEICHER das eine Byte Modifizieren, PAGE ZURÜCKSCHREIBEN ausgelöst. Du MERKST es halt nur nicht... Der Befehl "PageWrite" hat damit nichts zu tun, der mein etwas völlig anderes, das ist der Befehl welche den EEPROM dazu veranlasst erst auf mehrere Daten zu warten um nicht nach jedem einzelnen Byte in diesem Zyklus zu springen. Aber egal ob "ByteWrite" oder "PageWrite" in "neuen" EEPROM mit Flash Kern wird immer eine gesamte Seite bearbeitet. Wie gesagt: Das gilt natürlich nur für EEPROM mit Flash Kern die "ALTE, Baugleiche" EEPROM ersetzen sollen. Ein heute Gebauter 24c08 wird wahrscheinlich fast bei jedem Hersteller so arbeiten. Ein 24c08 von 1995 desselben Herstellers wird bei Bytewrite tatsächlich auch intern nur ein Byte bearbeiten. In sofern sind "Sparversuche" nur durch VErschieben um ein paar Bytestellen "Müssig". Wenn dann gleich um ganze Pages verschieben. Aber das ist sowieso nur eine Krücke, die nur geht wenn ich immer wieder denselben Datensatz fester Länge - der auch noch viel kleiner ist als der Gesamtspeicher, ablegen will. Sobald ich einen haufen verschiedener Datensaätze ablegen oder große Teile des Speichers gleich zu anfang belegen will ist das einfach nur Mumpitz. Gruß Carsten Gruß Carsten
Matthias Lipinsky schrieb: > Ja das ist soweit klar. Und wenn du einmal durch den vorhandenen > Speicher durch bist? Einfach meinen Beitrag lesen.
Eine andere Möglichkeit ist ein Akkugepuffertes RAM zu verwenden oder mal bei den FRAMs schauen: http://www.ramtron.com/products/nonvolatile-memory/serial-product.aspx?id=128
Carsten Sch. schrieb: > Bei vielen "NEUEN" EEPROM Revisionen gibst du halt einen "ByteWrite" im > Auftrag, für dien Programm verhält sich ALLES wie ein Bytewrite, INTERN, > OHNE DAS DU ES MERKST wird aber ein Zyklus, AUSLESEN, Zwischenspeichern, > GESAMTE PAGE Löschen, IM SPEICHER das eine Byte Modifizieren, PAGE > ZURÜCKSCHREIBEN ausgelöst. Du MERKST es halt nur nicht... Noch ein Satz von mir dazu - Ich glaube nicht das es so läuft. 1. Es würde dann ja effektiv keine Möglichkeit geben ein einzelnes Byte zu schreiben also müsste ja auf jeden Fall die Anzahl der Schreibvorgänge durch die Größe der Page geteilt werden. 2. Es Geht doch bei den Flash-Kernen eher um die Anzahl der Schreib/Löschvorgänge. Also einmal beschreiben und dann wieder löschen ist ein Zyklus. Man kann aber nur Pageweise löschen. Ich kann allso die Page löschen, dann schreibe ich etwas an Adresse 0 und danach an Adresse 1. Zwischen diesen beiden Schreibvorgängen muss die Page aber nicht gelöscht werden, das alle Bytes schon gelöscht sind. Dazu mal ein auszug aus einem anderen Datenblatt (R8C13 interner Dataflash): "The program/erase times are defined to be per-block erase times. When the program/erase times are n times (n=1,000 or 10,000 times), to erase n times per block is possible. For example, if performing one-byte write to the distinct addresses on the Block A of 2K-byte block 2,048 times and then erasing that block, the number of the program/erase cycles is one time. if rewriting more than 1,000 times, run the program until the vacant areas are all used to reduce the substantial rewrite times and then erase. Avoid rewriting only particular blocks and rewrite to average the program and erase times to each block. Also keep the erase times as inrformation and set up the limit times."
Martin schrieb: > Das stimmt nur so nicht. Einfach mal ins Datenblatt schaun. > 1. Es gibt ein Byte Write > 2. Bei einem Pagewrite wird der Datenblock erst zwischengespeichert und > erst mit der Stop-Condition ins EEPROM geschrieben. Okay, dann schauen wir "einfach mal" ins Datenblatt: http://ww1.microchip.com/downloads/en/DeviceDoc/21203R.pdf >6.1) Byte Write >... >... >... >Note: When doing a write of less than 64 bytes >the data in the rest of the page is refreshed >along with the data bytes being written. >This will force the entire page to endure a >write cycle, for this reason endurance is >specified per page. Gruß, Subtext
Wenn du nach dem Erasen also alles auf 0xFF setzen selber noch mal eine 0xFF reinschreibst ohne nochmal zu Erasen passiert eigentlich nichts.
Es werden nur Bits gelöscht also auf 0 gesetzt eine 1 wird nicht nochmal auf 1 gesetzt.
Captain Subtext schrieb: > Okay, dann schauen wir "einfach mal" ins Datenblatt: Ok dann hast du recht. Dann bleibt nur eine Möglichkeit übrig, solch ein Schrott IC nicht kaufen. Ist zumindest meine Meinung.
Alex schrieb: > Captain Subtext schrieb: >> Okay, dann schauen wir "einfach mal" ins Datenblatt: > > Ok dann hast du recht. Dann bleibt nur eine Möglichkeit übrig, solch ein > Schrott IC nicht kaufen. Ist zumindest meine Meinung. GENAU!!! Wozu brauche ich günstigen EEPROM mit mehr als 1 000 000 zulässigen Schreibzugriffen pro Seite,kleiner <5ms Write Time für die gesamte Page und datenhaltigkeit von über 200Jahren... IST DOCH MIST DAS MEIN ABSTRUSES LEBENSVERLÄNGERUNGSGEDÖNS Unsinnig ist! Bleiben wir doch besser bei dem Althergebrachten, mit 1000 bis maximal 10000 zulässigen SChreibzugriffen pro Byte, 10 Jahren Datenhaltigkeit und 20ms WriteTime pro Byte... Im Antquariat deines Vertrauens wirst du garantiert noch fündig. Aber hergestellt wird soetwas seit bestimmt 10JAhren nicht mehr, habe gerade mal in meine Alten Datenblätter -noch auf totem Baum- geschaut, der Wechsel fing so um 91/92 an. Ich habe kein Datenblatt das jünger als 98 ist für einen noch "ECHTEN" EEPROM. NOCH EINMAL: ALLES was mit 100K oder noch viel mehr zulässigen Schreibzugriffen/Speicherzelle daherkommt arbeitet nach dem beschriebenen Verfahren. Es wird intern immer die ganze Page neu beschrieben/ein Refresh durchgeführt. GRuß Carsten
Carsten Sch. schrieb: > Wozu brauche ich günstigen EEPROM mit mehr als 1 000 000 zulässigen Es sind ja nicht 1.000.000 sondern nur ein 64stel davon.
Noch ein Nachtrag: OK, mit einer vernümpftigen Schreibstrategie wird aus den 1M z.B. im durchschnitt 100k. Abber bei den "alten" EEPROMS wird mit einer vernümpftigen Schreibstrategie aus den 10k im Durchschnitt auch 100k. (eh sich jemand aufregt so wie Carsten, ich habe und kann dies nicht wissenschaftlich belegen. Also immer ruhig bleiben. Mein Antiquariat hat sowas jedenfalls noch.)
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.