Startseite>EEPROM-Speicher mit dem Raspberry Pi nutzen
Aus Raspberry Pi Geek 06/2015

EEPROM-Speicher mit dem Raspberry Pi nutzen

© Ktsdesign, 123RF

Langzeitgedächtnis

Marcus Nasarek

Obwohl ein RasPi mit einer entsprechenden SD-Karte über ausreichend Flash-Speicher verfügt, erweist sich ein zusätzlicher EEPROM manchmal als äußerst nützlich.

Als IT noch EDV hieß, gab es eine Vorliebe für ausführliche Umschreibungen neuer Technologien: EEPROM steht als Abkürzung für das englische “Electrically Erasable Programmable Read-only Memory”. Diese Beschreibung klingt wie ein Widerspruch in sich, denn er bedeutet, dass ein eigentlich nur zum Lesen gedachter Speicher sich elektrisch löschen und wieder programmieren lässt.

Die Beschreibung ist jedoch der chipinternen Funktionsweise geschuldet, bei der die Zugriffe beim Schreiben und Lesen auf die Bereiche des Speichers etliche Zwischenschritte erfordern. Wie auch immer – ein EEPROM kann Daten speichern und ohne anliegende Spannung dauerhaft halten. Die Firma Microchip gibt zum Beispiel eine Haltbarkeit der Daten auf dem Chip von mehr als 200 Jahren an. Allerdings gewährleisten die einschlägigen Hersteller üblicherweise die Beständigkeit gespeicherter Daten nur für einen Zeitraum von 10 Jahren.

EEPROMs verfügen über relativ geringe Speicherkapazitäten, typischerweise 128 bis 256 Byte (1 bis 2 Kbit). Das scheint wenig, reicht aber in der Welt der Mikrocontroller oft völlig aus – schließlich hat Twitter mit 140 Byte die Nachrichtenwelt auf den Kopf gestellt. Für den Fall des Falles gibt es jedoch auch EEPROM-Bausteine mit höheren Kapazitäten bis in den mehrstelligen Mbit-Bereich.

Aufgrund der internen Funktionsweise unterscheiden sich die Lese- und Schreibgeschwindigkeit bei einem EEPROM erheblich. Das EEPROM 24AA02 von Microchip liest beispielsweise 1 Byte in einigen Mikrosekunden, benötigt aber zum Schreiben von 1 Byte mindestens 5 Millisekunden – also tausendmal so lange.

Die Speicherchips kommen in Mikrocontroller-Schaltungen meist zum dauerhaften Speichern von Konfigurationsdaten zum Einsatz, quasi als winziger Ersatz für Festplatten. Selbst beim RasPi, der ja eigentlich über ausreichend Speicherkapazität auf der SD-Karte verfügt, lohnt sich unter Umständen der Einsatz eines solchen Bausteins. Liegt etwa die WLAN-Konfiguration auf einem externen EEPROM, steht sie einem neu eingerichteten System schnell und sicher zur Verfügung.

Hardware und Bus

Für erste Experimente mit EEPROMs am RasPi benötigen Sie ein Steckbrett und einige Bauteile. Die Tabelle “Einkaufsliste” nennt Beispiele für die Module und die ungefähren Preise. Alternativ zum Erwerb eines einzelnen I2C-EEPROM-Chips bietet es sich an, für einen kleinen Aufpreis gleich ein Echtzeituhr-Modul samt aufgelötetem EEPROM zu kaufen. Die via I2C ansteuerbaren Varianten auf Basis der RTCs DS1307 und DS3231 für jeweils etwa 5 Euro verfügen über einen 32 Kbit großen Speicherbaustein.

Einkaufsliste

Bauteil

Preis (ca.)

2 Stück 10 kOhm Widerstände

2 Euro für 30 Stück

Steckbrett halblang, Jumper-Kabel

5 Euro

I2C EEPROM 24AA02 oder 24C02

1 bis 3 Euro

SPI EEPROM 25A512

3 Euro

Es gibt EEPROMs sowohl für den I2C- als auch für den SPI-Bus; der RasPi unterstützt beide Bussysteme. Eine Einführung in den I2C-Bus gibt bei Bedarf ein älterer RPG-Artikel [1], den Sie auch auf der Heft-DVD finden. Der Vorteil dieses Bussystems: Sie dürfen bis zu 128 Geräte an nur zwei Leitungen adressieren. Mit einer Taktrate von bis zu 400 kHz am RasPi ist der Bus für EEPROMs ausreichend schnell.

Bei SPI handelt es sich um das schnellere der beiden Systeme, mit bis zu 125 MHz taktet es mehr als dreihundertmal höher als I2C. Beim Schreiben allerdings muss der SPI-Bus auf das EEPROM warten und bietet dann gegenüber I2C keinen Geschwindigkeitsvorteil. Dafür gelingt das Lesen deutlich fixer: Je nach Chip erreichen Sie zwei- bis zehnmal höhere Datenraten. Der Nachteil: Jedes Gerät nimmt eine eigene Leitung in Anspruch, sodass der RasPi nur zwei parallel angeschlossene SPI-Komponenten unterstützt.

Erste Versuche mit I<+>2<+>C

EEPROMs für den I2C-Bus sind sehr verbreitet. Da sie sich ohne zusätzliche Leitungen an den Bus anschließen lassen, bringen einige Sensoren oder Erweiterungen sie quasi huckepack mit, wie etwa die schon erwähnten RTC-Module.

Ein Blog-Beitrag auf Raspilab.wordpress.com [2] beschreibt, wie Sie den I2C-Bus am RasPi einrichten und eine solche Uhr in Betrieb nehmen. Abbildung 1 zeigt, wie Sie das RTC-Modul am GPIO-Port anschließen, Abbildung 2 zeigt dazu im Vergleich den Anschluss eines I2C-EEPROMs.

Abbildung 1: Anschluss einer I»2«C-Echtzeituhr am GPIO-Port des RasPi.

Abbildung 1: Anschluss einer I»2«C-Echtzeituhr am GPIO-Port des RasPi.

Abbildung 2: Anschluss des I»2«C-EEPROMs 24C32N am GPIO-Port des RasPi.

Abbildung 2: Anschluss des I»2«C-EEPROMs 24C32N am GPIO-Port des RasPi.

Haben Sie alles verdrahtet und das Modul i2c_dev im Kernel geladen, steht das Modul bereit für den Einsatz. Ein Aufruf von lsmod | grep i2c_dev sollte das Modul anzeigen. Im Folgenden verwenden wir eine DS3231-RTC-Platine, auf der ein Atmel 24C32N mit 32 Kbit Speicher verbaut ist. Der I2cdetect-Aufruf aus Listing 1 listet konsequenterweise zwei Geräte am I2C-Bus auf.

Listing 1

 

$ sudo i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- 57 -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- 68 -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

Bei den ausgegebenen Werten handelt es sich um die Adressen, unter denen Sie die Uhr und den EEPROM ansprechen. Eine erste Kontaktaufnahme erfolgt mit den I2C-Tools. Dem Datenblatt [3] zufolge findet sich der Chip 24C32N im Adressbereich 0x50 bis 0x57. Die konkrete Adresse kodieren Sie durch den Anschluss der Pins A0, A1 und A2 an die Spannung Vcc. Sind alle drei Pins angeschlossen, wie bei der RTC DS3231 der Fall, hört der Chip auf die Adresse 0x57.

Der 24C32N erlaubt es, den Speicher byteweise oder in Blöcken von 32 Byte zu beschreiben. Das Schreiben in Blöcken beschleunigt den Vorgang erheblich, da hierbei interne Puffer zum Einsatz kommen. Für einen ersten Test genügen jedoch die Programme i2cset und i2cget aus den I2C-Tools. Im Folgenden ersparen wir uns mit einigen kleinen Skripten die Handarbeit, die ansonsten für das Vor- und Nachbereiten der Daten erforderlich wäre. Vergessen Sie nicht, die Skripte nach dem Abspeichern ausführbar zu machen.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 8 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
€0,99 – Kaufen
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS
Deutschland