Forum: Mikrocontroller und Digitale Elektronik EEPROM Bits und Bytes Was wie wo?


von Nadine (Gast)


Lesenswert?

Hallo.

Ich programmiere zur Zeit einen ATMega128 und muss nun wohl mit dem 
EEPROM arbeiten.

Ich verstehe den EEPROM aber nicht so ganz.

Also ich habe sichere 100.000 Zugriffe pro Byte wie ich das verstanden 
habe.

Der ATMega128 hat 4KB, also 1024 * 4, also 4096 Bytes EEPROM. Gesamt 
kann ich nun also 4096 * 100.000 den EEPROM beschreiben. Wenn ich also 
die Schreibzyklen zähle kann ich nach jedem 1024 * 100.000 Schreibzyklus 
die Adresse ändern.

Aber wieviel passt da nun rein?

Ein Byte besteht aus 8 Bits... Ok.

Gehe ich als nun richtig der Annahme, dass... Wenn ich ein Bitmuster 
nutze, 1 für an. 0 für aus kann ich als in einem Byte z.b. 8 Port 
Zustände speichern. Z.b. 11111111 wären alle ports an. 00001111 wären 
die ersten 4 aus, die ersten 4 an usw.

Verstehe ich das richtig?

Das könnte man auch z.b mit ganzzahligen Temperaturen machen und wenn 
z.B. nur positive Werte dann 4 Temperaturen im Bereich von 0-99Grad z.b. 
20349014 also (20)(34)(90)(14).

Ist das korrekt!?

Wenn man dies dann z.b. jede Std speichert und nach sagen wir 1000 
Schreibzyklen auf den nächsten Adressbereich geht könnte man das ganze 
somit

1000 mal 1 Byte * 100.000 Zyklen * 4 also 4.000.000.000.

Jede Std macht also 24 mal am Tag.

Das widerrum heisst also 4.000.000.000 / 8760 (24 * 365) also 456.621 
Jahre würde man nun sich diese Daten speichern.

Habe ich das richtig verstanden!?

Bei 2 Bitmustern wären es immernoch 228.310,5 Jahre.

Wieviel würde man dann in 1 Byte max an Daten bekommen!? Also ein A... 
wieviel Byte hat ein einzelner Buchstabe?

Ist vielleicht eine doofe Frage... Aber ich verstehe das nicht so 
ganz...

Wäre nett wenn mir das jemand beantworten könnte.

Nadine

von Reiner Gast (Gast)


Lesenswert?

Nadine schrieb:
> Das könnte man auch z.b mit ganzzahligen Temperaturen machen und wenn
> z.B. nur positive Werte dann 4 Temperaturen im Bereich von 0-99Grad z.b.
> 20349014 also (20)(34)(90)(14).
>
> Ist das korrekt!?
>
> Wenn man dies dann z.b. jede Std speichert und nach sagen wir 1000
> Schreibzyklen auf den nächsten Adressbereich geht könnte man das ganze
> somit
>
> 1000 mal 1 Byte * 100.000 Zyklen * 4 also 4.000.000.000.

Bei 4 Bytes die du schrieben willst ist die Rechnung:
1024 Bytes / 4 Bytes = 256 Frames á 4 bytes
256 Frames * 100.000 Zyklen = 25.600.000 mögliche Datenablagen 
(theoretisch)

In der Praxis scheitert es eher daran, dass du sicher feststellen 
müsstest (auch nach einen Controller Reset), welche EEPROM Zellen schon 
wie oft beschrieben wurden und wo gerade die letzten Daten abgelegt 
wurden...

Günstiger ist es eine Art Level Wearing zu implementieren, d.h. dass die 
Schreibvorgänge auf alle Zellen gleichmäßig verteilt werden 
(https://en.wikipedia.org/wiki/Wear_leveling)

Hängst du hier noch eine Markierung hintendran, dann kannst du bei einem 
Controller Neustart diese gezielt wieder suchen und das Schreiben dort 
fortsetzen

von Progra Mierer (Gast)


Lesenswert?

Reiner Gast schrieb:
> Bei 4 Bytes die du schrieben willst ist die Rechnung:

Diese Spekuliererei mit den Schreibzyklen tut man nicht.

Man speichert Daten im RAM und schreibt sie erst am Ende
einer "Session" ins EEPROM.

So wird es z.B. bei Kilometerzählern in Kraftfahrzeugen gemacht.

Ausserdem gibt es externe EEPROMs für SPI oder I2C die können
weitaus mehr Schreibzyklen (datenhaltig aushalten). Und die
sind so gross dass man sogar mit den vielen Schreibzyklen
spekulieren kann ....

von Nadine (Gast)


Lesenswert?

Reiner Gast schrieb:
> Bei 4 Bytes die du schrieben willst ist die Rechnung:
> 1024 Bytes / 4 Bytes = 256 Frames á 4 bytes
> 256 Frames * 100.000 Zyklen = 25.600.000 mögliche Datenablagen
> (theoretisch)

Wie kommst du denn jetzt zu den 4 Bytes? Und was sind das für Frames?

Also könnte man demnach 4 Temperaturen im Bereich von 0-99 Grad 
25.600.000 mal (Std) SICHER speichern. Was demnach theoretisch dann 2922 
Jahren entsprechen würde.

von Karl M. (Gast)


Lesenswert?

Hallo Nadine,

mit Frames meint er bestimmt die Page in dass das gesamte EEprom 
aufgeteilt ist.

Wie groß die sind steht im Datenblatt.

von Reiner Gast (Gast)


Lesenswert?

Nadine schrieb:
> Wie kommst du denn jetzt zu den 4 Bytes? Und was sind das für Frames?

Du schriebst, dass du 4 Temperatur Werte (also vier Bytes) gleichzeitig 
Schreiben möchtest. D.h. du schreibst einen Datenframe (oder auch 
Struct) von vier Bytes Größe und dementsprechend auch vier 
Speicherzellen gleichzeitig im EEPROM. D.h. die maximalen möglichen 
Schreibvorgänge für die komplette Datenstruktur auf das gesamte EEPROM 
reduziert sich entsprechend um den Faktor vier.

von Eric B. (beric)


Lesenswert?

Nadine schrieb:
> Wieviel würde man dann in 1 Byte max an Daten bekommen!? Also ein A...
> wieviel Byte hat ein einzelner Buchstabe?

1 Byte sind 8 bit, also 8x '0'/Aus/False/Nein oder '1'/Ein/True/Ja. Mehr 
nicht.
1 Byte kann somite 256 unterschiedliche Werte darstellen.

Ein 'A' belegt im Normallfall 1 Byte und zwar mit dem Bitmuster 
01000001, oder Dezimalwert 65.

Die Ziffer '0' (quasi als Buchstabe) belegt genauso 1 Byte, mit dem 
Bitmuster 00110000, oder Dezimalwert 48. Die Zahl 0, hat natürlich das 
Bitmuster 00000000, oder Dezimalwert 0.

von Falk B. (falk)


Lesenswert?


von Nadine (Gast)


Lesenswert?

Eric B. schrieb:
> Nadine schrieb:
>> Wieviel würde man dann in 1 Byte max an Daten bekommen!? Also ein A...
>> wieviel Byte hat ein einzelner Buchstabe?
>
> 1 Byte sind 8 bit, also 8x '0'/Aus/False/Nein oder '1'/Ein/True/Ja. Mehr
> nicht.
> 1 Byte kann somite 256 unterschiedliche Werte darstellen.
>
> Ein 'A' belegt im Normallfall 1 Byte und zwar mit dem Bitmuster
> 01000001, oder Dezimalwert 65.
>
> Die Ziffer '0' (quasi als Buchstabe) belegt genauso 1 Byte, mit dem
> Bitmuster 00110000, oder Dezimalwert 48. Die Zahl 0, hat natürlich das
> Bitmuster 00000000, oder Dezimalwert 0.

Super danke..... So habe ich das jetzt verstanden :) Vielen vielen 
Dank....

Reiner Gast schrieb:
> Du schriebst, dass du 4 Temperatur Werte (also vier Bytes) gleichzeitig
> Schreiben möchtest. D.h. du schreibst einen Datenframe (oder auch
> Struct) von vier Bytes Größe und dementsprechend auch vier
> Speicherzellen gleichzeitig im EEPROM. D.h. die maximalen möglichen
> Schreibvorgänge für die komplette Datenstruktur auf das gesamte EEPROM
> reduziert sich entsprechend um den Faktor vier.

Ah ok... Also 0-99 ist jeweils 1 Byte... mal 4 Temperaturen....

Logisch.. Danke auch dafür :)

Falk B. schrieb:
> 
https://www.mikrocontroller.net/articles/Speicher#EEPROM-Schreibzugriffe_minimieren
>

Ja... Wenn man vielleicht vorher dran gedacht hätte... Nun steht das 
ganze... Pcb ist fertig.... Da ist kein Umbau mehr möglich... Also muss 
jetzt möglichst effizient der eeprom mißbraucht werden....

von georg (Gast)


Lesenswert?

Nadine schrieb:
> Was demnach theoretisch dann 2922
> Jahren entsprechen würde.

Ob das jetzt 456000, 228000 oder nur 2922 Jahre sind halte ich für nicht 
so entscheidend, obwohl ich dir natürlich ein langes Leben wünsche. Aber 
vielleicht bist du diesbezüglich ja optimistischer als ich.

Meine Einwände liegen woanders: egal wo man Daten speichert sollte man 
sie gegen Fehler absichern, schon deshalb weil ja beim Schreiben was 
schief gehen kann. Man muss dazu korrekte von beschädigten Daten 
unterscheiden können, z.B. mit einer Prüfsumme oder mit CRC.

Leider kann man trotzdem nicht voraussagen, wann zuviele Speicherzyklen 
abgelaufen sind, weil selbst dann wahrscheinlich das Schreiben im Moment 
erfolgreich ist, die Daten aber später verloren gehen. Ich wäre daher 
auch dafür, die Daten gleichmässig über den ganzen Speicher zu 
verteilen, aber so trivial ist das auch nicht weil man sich dabei ja 
merken muss wo der letzte Speicherplatz war.

Wenn dann bei der Datenprüfung ein Fehler auftritt, muss man halt den 
Chip nach 1000 Jahren mal austauschen. Das wird dir niemand ankreiden.

Georg

von Reiner Gast (Gast)


Lesenswert?

Ich würde mir bei solchen Zeiträumen eher über folgendes Limit gedanken 
machen :-)

 Data retention: 20 years at 85°C/100 years at 25°C(

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.