EEPROM AT24Cx - 32/64/128/256/512 kbit

EEPROM-Reihe von Atmel mit 32 kbit (AT24C32, 4 KB), 64 kbit (AT24C64, 8 KB), 128 kbit (AT24C128, 16 KB), 256 kbit (AT24C256, 32 KB) oder 512 kbit (AT24C512, 64 KB).

Arduino Bibliothek Quellcode, ZIP.

Eigenschaften

Datenblätter

Pinbelegung

Funktion Name Pin Pin Name Funktion
Adresse (VCC = 1, GND = 0) A0 1 8 VCC Versorgungsspannung
Adresse (VCC = 1, GND = 0) A1 2 7 WP Schreibschutz (VCC = An, GND = Aus)
Adresse (VCC = 1, GND = 0) A2 3 6 SCL I2C Takt
Masse GND 4 5 SDA I2C Daten

I2C Adressierung

Es können bis zu 8 EEPROM ICs am Bus angesprochen werden. Die Verdahtung der Pins A0 bis A2 bestimmt den Index und damit die I2C Adresse. Ax auf GND entspricht 0 (oder frei lassen = Standard), Ax auf Vcc entspricht 1.

Adresse (bin) Adresse (hex) Adresse (dez) A2 A1 A0
1010000 0x50 80 0 0 0
1010001 0x51 81 0 0 1
1010010 0x52 82 0 1 0
1010011 0x53 83 0 1 1
1010100 0x54 84 1 0 0
1010101 0x55 85 1 0 1
1010110 0x56 86 1 1 0
1010111 0x57 87 1 1 1

Speicheraufteilung

Es kann jeweils auf ein Byte (lesen oder schreiben) zugegriffen werden. Die Adresslänge ist damit 12 bit bzw. 13 bit lang.

Der Speicher ist jeweils in 32 Byte große Speicherseiten (page) unterteilt. Es können im Adressbereich einer Seite jeweils bis zu 32 Byte on einem Vorgang geschrieben werden. Wird über eine Seitengrenze hinweg geschrieben, werden die Daten am Anfang der Seite überschrieben.

EEPROM Speicher (bit) Speicher (Byte) Adresslänge (bit) Seitengröße (Byte) Seiten (pages)
AT24C32 32768 4096 12 32 128
AT24C64 65536 8192 13 32 256
AT24C128 131072 16384 14 64 256
AT24C256 262144 32768 15 64 512
AT24C512 524288 65536 16 128 512

Kommunikationstest

/*
*
* Search for an EEPROM.
* This sketch iterate the eight possible I2C addresses and 
* checks if an EEPROM is found.
*
* Written by Christian Paul, 2014-11-24
* 
* 
*/

// include libraries
#include <Wire.h>

// setup
void setup() {
  Serial.begin(115200);
  Serial.println("AT24CX search");
  Serial.println("-------------------------");

  Wire.begin();
  int i2c = 0x50;
  for (int i=0; i<8; i++) {
    Serial.print("Search at [");
    Serial.print(i2c, HEX);
    Serial.print("]: ");
    Wire.beginTransmission(i2c);
    int result = Wire.endTransmission();
    if (result==0)
      Serial.println("FOUND!");
    else
      Serial.println("not found");
    i2c++;
  }

}

// main loop
void loop() {}