RAM- / EEPROM-Größe

Hi Leute,

ich habe mal eine allgemeine Frage. Der von Arduino verwendete ATMega328P-PU hat einen RAM-Speicher von 2KB und EEPROM von 1KB.

Sind das in diesem Fall 2048 Bytes (bzw. 1024 Bytes)? Und können diese Hardwareabhängig um einige Bytes schwanken?
Der Flash-Speicher hat bei mit z.B. 32.256 KB anstatt 32.768 KB.

Ist es Möglich die exakte größe auszulesen oder andersweitig zu ermitteln?

viele Grüße,
SBond

Das sind wahrscheinlich die 0,5kB für den Bootloader. Der ist nötig damit man über USB programmieren kann.

Du kannst auch auf den Bootloader verzichten wenn du den Chip mit einem Programmiergerät oder einem zweiten UNO programmierst.

Nein die Größe schwankt nicht. Es können im FLASH Speicher bestimmte Bläcke als nicht beschreibbar gekennzeichnet werden damit ein dort abgespeicherter Bootloader nicht überschrieben werden kann. Darum kann es verschiedene Werte vom freien Flash geben.
Grüße Uwe

danke für die Antworten. :slight_smile:

besitzt der SRAM 2000 Bytes oder 2048 Bytes? Ich habe gerade mal das Handbuch des ATMega32 durchgeschaut, aber so richtig schlauer bin ich nicht daraus geworden.

viele Grüße,
SBond

  1. Das ist bei sowas immer 2^x, da Binär

Siehe auch Datenblatt Seite 18

oh... du hast recht.

ATMega32-Datasheet, S.18:

The lower 768/1280/1280/2303 data memory locations address both the Register File, the I/O memory, Extended
I/O memory, and the internal data SRAM. The first 32 locations address the Register File, the next 64 location the
standard I/O memory, then 160 locations of Extended I/O memory, and the next 512/1024/1024/2048 locations
address the internal data SRAM.

vielen Dank :slight_smile:

In der ComputerUmfeld ist kilo nicht 1000 sondern 1024, Mega nicht 100000 sondern 1024*1024 ecc. einzige Ausnahme sind Harddisk und Speicherkarten da wird wieder dezimal gerechnet da so die Speicher größer wirken.

Vorsätze für binäre Einheiten Vorsätze für Maßeinheiten – Wikipedia
Vorsetze für maßeinheiten: Vorsätze für Maßeinheiten – Wikipedia

Grüße Uwe

Allerdings sind die untersten RAM - Adressen für die Register, Ports, usw. belegt ...
Und wenn du die Arduino IDE (-1.0.5-r2) benutzt, fällt dir sicher auf, dass bereits ein leerer Sketch für den UNO 466 bytes Flash belegt. Erstaunlich wenig, wenn man ansieht, was da alles zusammenkompiliert wird.

Im Prinzip sind es immer 2 hoch n Speicherzellen und jede Zelle kann nur H oder L daher ist die Speichergröße auch 2 hoch n.
Nun zu den Ausnahmen: Inzwischen gibt es Speicher bis in den Giga-Bereich. Absolut fehlerfreie Speicher in dieser Größenordnung sind nahezu unmöglich. Dafür gibt es Reserveblöcke, die noch im Testfeld des Herstellers von defekten Bänken auf Intakte umgeroutet werden. Der nächste Punkt ist MLC Speicher (Multi Level Cell). Herkömmliche FLASH Zellen kennen nur zwei Zustände - H und L. MLC dagegen kennen 3 und mehr Zustände intern. Extern wird dann wieder auf H und L zurückübersetzt. Dadurch bedingt, ergeben sich von der Basis 2 abweichende Größen. MLC FLASH ist eine vielschichtige Herausforderung an die Hersteller. Zum einen ist die Kennline eines MOSFET und damit auch einer FLASH Zelle mit seinem Floating Gate nicht linear. Zum anderen beinflussen sich benachbarte Zellen gegenseitig. Bei Single Level ist das noch vergleichsweise easy. Wenn man 50% Schaltschwelle voraussetzt und 10% Reserve abzieht, ist 15% Übersprechen absolut kein Thema. Bei 3 Schaltzuständen hat jeder Zustand 33%, bei 4 Zuständen sind es 25% - wenn man davon jeweils 10% Sicherheitsabstand abzieht, wird es schon verdammt eng!
Der nächste Punkt ist die Geschwindigkeit. MLC langsamer, auf Grund von längeren Zugriffszeiten. Führt euch die Lade- Entladekurve eines Kondensators vor Augen. Bei Adresswechseln müssen die internen Kapazitäten der Leitungen umgeladen werden. Um 50% bei SLC sicher detektieren zu können, muß ich nicht so lange warten, wie bei MLC. Ein weiterer Punkt ist die Haltbarkeit der Zellen. Verliere ich bei SLC 10% Ladung im Laufe der Jahre ist das noch kein Problem - bei MLC schon!
Das nur mal so am Rande :wink:
MLC wird meines Wissens nach nur für FLASH in SSD's eingesetzt.
Eine weitere Spezialität ist analoges FLASH in Sprachspeicher IC's von ISD :smiley:

Gruß Gerald

michael_x:
Allerdings sind die untersten RAM - Adressen für die Register, Ports, usw. belegt ...

Nur im Adress-Raum. Man hat aber immer noch die vollen 2k RAM. Von 0x100 bis 0x08FF. 2303 - 256 = 2047

Das heißt lediglich, dass die erste RAM Zelle nicht die Adresse 0 hat

Serenifly:

michael_x:
Allerdings sind die untersten RAM - Adressen für die Register, Ports, usw. belegt …

Nur im Adress-Raum. Man hat aber immer noch die vollen 2k RAM. Von 0x100 bis 0x08FF. 2303 - 256 = 2047

Das heißt lediglich, dass die erste RAM Zelle nicht die Adresse 0 hat

Du mußt die Zelle 0X100 dazuzählen. Dann sind’s 2048 also volle 2KiBi.
Ob die volle Adresse 0x100 heißt ist für die Adressierung unerheblich da das RAM nur 11 Adressleitungen hat und die restlichen Adressleitungen von einem Adrresscontroller verwaltet wird.
Grüße Uwe