Forum: Mikrocontroller und Digitale Elektronik eeprom löschen, Zugriffshäufigkeit bei 4KB


von EEPROM (Gast)


Lesenswert?

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

von Thomas E. (thomase)


Lesenswert?

Jede einzelne Bytestelle im EEPROM kann jeweils min. 100.000x 
beschrieben werden.

mfg.

von Captain S. (captainsubtext)


Lesenswert?

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!

von Carsten S. (dg3ycs)


Lesenswert?

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

von Martin (Gast)


Lesenswert?

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.

von Matthias L. (Gast)


Lesenswert?

>Daten auch über den gesamten Speicher verteilen

Hehe.. und wie merkst Du Dir, wo die letzten gültigen Daten stehen?

von Martin (Gast)


Lesenswert?

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.

von G a s t (Gast)


Lesenswert?

Matthias Lipinsky schrieb:
> Hehe.. und wie merkst Du Dir, wo die letzten gültigen Daten stehen?
Nachgucken, wo der letzte bescchriebene Block steht?

von spess53 (Gast)


Lesenswert?


von Jonathan S. (joni-st) Benutzerseite


Lesenswert?

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

von Matthias L. (Gast)


Lesenswert?

>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?

von Matze (Gast)


Lesenswert?

@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.

von Carsten S. (dg3ycs)


Lesenswert?

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

von Martin (Gast)


Lesenswert?

Matthias Lipinsky schrieb:
> Ja das ist soweit klar. Und wenn du einmal durch den vorhandenen
> Speicher durch bist?

Einfach meinen Beitrag lesen.

von Martin (Gast)


Lesenswert?

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

von Martin (Gast)


Lesenswert?

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."

von Captain S. (captainsubtext)


Lesenswert?

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

von Uwe (Gast)


Lesenswert?

Wenn du nach dem Erasen also alles auf 0xFF setzen selber noch mal eine 
0xFF reinschreibst ohne nochmal zu Erasen passiert eigentlich nichts.

von Uwe (Gast)


Lesenswert?

Es werden nur Bits gelöscht also auf 0 gesetzt eine 1 wird nicht nochmal 
auf 1 gesetzt.

von Alex (Gast)


Lesenswert?

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.

von Carsten S. (dg3ycs)


Lesenswert?

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

von Alex (Gast)


Lesenswert?

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.

von Alex (Gast)


Lesenswert?

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