I2C-EEPROM (1 kBit bis 512 kBit)

Ich habe bereits bei meinen Projekten einen EEPROM-Monitor vorgestellt, mit dem ich EEPROMs mit I2C-Schnittstelle über den Seriellen Monitor oder von SD-Karte beschreiben und Funktion wie Auslesen, partiell oder vollständig Löschen und Testen kann. Da ich nun für weitere Projekte EEPROMs nutzen möchte, habe ich einige grundlegende Funktionen dieses Programms in eine Library verpackt. Geeignet ist die Library für EEPROMs mit Speichergrößen von 1 kBit bis 512 kBit (1.024 Byte bis 65.536 Byte). Eine Auswahl von mir getesteter EEPROM-Typen, die mit der Library funktionieren bzw. derzeit nicht funktionieren, habe ich im Text bzw. in der Tabelle weiter unten angegeben.

(Inzwischen habe ich den oben erwähnten EEPROM-Monitor etwas überarbeitet und die Library auch dort eingebaut: siehe EEPROM-Monitor).

 

Testaufbau:

Verwendete Bauteile:

  • 1 Arudino Uno
  • 1 EEPROM z.B. 64 kBit-EEPROM 24LC064
  • 2 Widerstände 10 kOhm

 

I2C-Adresse: Die I2C-Adresse kann hardwaremäßig an den Adresseingängen A0 - A2 des EEPROMs zwischen 0x50 und 0x57 eingestellte werden, es können also bis zu 8 EEPROMs am gleichen Bus verwendet werden.

 

Library MyEEPROM_I2C:

Folgende Funktionen stehen derzeit zur Verfügung:

 

  • Abfrage, ob der EEPROM über I2C-Schnittstelle ansprechbar ist
  • Setzen der jeweiligen Speichergröße des gerade verwendeten EEPROMs 1)
  • Schreiben eines einzelnen Bytes
  • Updaten eines einzelnen Bytes (das Byte wird nur bei einer Änderung geschrieben)
  • Schreiben eines Wortes (max. 16 Byte - Anfangsadresse muss ein ganzzahliges Vielfaches von 16 sein)
  • Lesen eines Bytes
  • Lesen eines Wortes (16 Byte)
  • Löschen des gesamten EEPROMs
  • Lesen von bis zu 32 Bytes (Standardeinstellung) von einer EEPROM-Startadresse bis zu einem definierbaren Begrenzungszeichen 


1) Achtung: Die Angabe der Speichergröße erfolgt in "kByte". Die Library überprüft nicht, ob die Angabe der Speichergröße richtig ist. Keine Angabe oder eine falsche Angabe der Speichergröße führt zu fehlerhaftem Lesen oder Beschreiben des EEPROMs und kann Speicherbereiche doppelt, mehrfach oder gar nicht anzeigen.


Bisher habe ich die Library mit folgenden EEPROMs getestet:

  • 1 kBit-EEPROM 24C01C
  • 2 kBit-EEPROM 24C02C
  • 2 kBit-EEPROM 24LC024
  • 32 kBit-EEPROM 24C32
  • 64 kBit-EEPROM 24LC64
  • 256 kBit-EEPROM 24LC256
  • 512 kBit-EEPROM 24LC512

Nicht geeignet sind z.B EEPROMs mit der Bezeichnung:

  • 24LCxxB   (xx .... Speichergröße in kByte)
  • 24AAnn     (nn .... Speichergröße 1 bis 16 kByte)

Diese EEPROMs haben andere interne Speicherorganisationen, die von der verwendeten EEPROM-Library nicht unterstützt wird.


Die nachfolgende Tabelle zeigt eine Auswahl von EEPROMs die für die Library geeignet bzw. nicht geeignet sind.

Die Nichteignung beruht entweder durch nicht einheitliche Speicherplatz-Adressierung (z.B. Speicherblockauswahl im "Control Byte" oder "Slave Address Byte" bei den B-Typen) oder durch einen nur 8 Byte großen EEPROM-internen Buffer.

Geeignet sind EEPROMS, die einen durchgehende Speicherplatz-Adressierung ermöglichen (z.B. A0...A14 für 256 kBit) und einen EEPROM-internen Buffer von mindestens 16 Byte (Data(n+15)) aufweisen.

Bei Unklarheit kann ein Blick ins Datenblatt des jeweiligen EEPROM-Typs helfen.


Tabelle: Beispiele für geeignete und nicht geeignete EEPROM-Typen. (In den Bytes "Word Address, Control und Slave Address" sind nur jene Bits bezeichnet, die Auswirkung auf die Speicherplatz-Adressierung haben.)


Die Library kann hier heruntergeladen werden:

Sollte die Library jemand verwenden oder testen, würde ich mich über eine Rückmeldung sehr freuen!

Version 2.2

MyEEPROM_I2C.cpp.txt

MyEEPROM_I2C.h.txt

keywords.txt

Leider kann ich hier keine "cpp"- oder "h"-Files hochladen, daher zum Verwenden der Library ".txt" aus den Dateinamen entfernen und in einem neuen Verzeichnis mit dem Namen "MyEEPROM_I2C" dort speichern, wo eure anderen Libraries gespeichert sind.


Zur Auflistung der Funktionen der Library und zu 2 Beispielen geht es hier: Funktionen,  Beispiel 1, Beispiel 2