Interfacing multiple external EEPROM with Arduino through I2C

Published by MKDas on

EEPROM is a very fundamental feature of Arduino and it has internal EEPROM for this purpose. But sometimes, we need some more to use. In that situation, some dedicated EEPROM ICs like 24Cxxx ICs. In this article, we are going to interface external EEPROM with Arduino. So let’s start!

Disclaimer: Electricity is always dangerous. Skill required to work with electricity. Do work at your own risk. The author will not be responsible for any misuse or harmful act. This website contents are also copyright protected. Anything copied and directly posted on your website and claiming it as yours is prohibited and nonsensical. The author published all the articles as open source to help you to make your project and learning purpose only. Learn and make one for yourself. If need any help feel free to ask the author. The author will be helpful to you. Thanks.

EEPROM ICs:

There are different types of EEPROM ICs in the market from a range of memory capacities. Most of these ICs use the I2C protocol for communication.

Here, SCL & SDA are for I2C communication, A0, A1, A2 are for address. WP is Write Protection, if it is connected to VDD, EEPROM is is write-protected, and if it is connected to GND, no Write Protection.

Circuit diagram:

Here is the circuit diagram with 3 external EEPROMs with Arduino.

external EEPROM with Arduino Uno

This article can be useful too: How to remove noise/garbage from the HD44780 LCD display

U1, U2, U3 are EEPROM ICs. If you need more memory, then you can add ICs up to 8 in total. The base address for EEPROM is 0x50. With this base address, you need to add the EEPROM IC address.

A2A1A0Address (Decimal, HEX) EEPROM ADDRESS
0000 , 0x000x50
0011 , 0x010x51
0102 , 0x020x52
0113 , 0x030x53
1004 , 0x04 0x54
1015 , 0x050x55
1106 , 0x060x56
1117 , 0x070x57
EEPROMs and its address

You can use this hex calculator here.

Arduino Code:

//eeprom
#include <Wire.h>
#define eeprom1 0x50 //for eeprom1
#define eeprom2 0x51 //for eeprom2
#define eeprom2 0x52 //for eeprom2
//basic address for eeprom is 0x50. 
//You need to add the eeprom ic address (A0,A1,A2) with this value
unsigned int address = 0;//start address

void setup()
{
  Serial.println("Writing at eeprom1: 66666");
  for (address = 0; address < 5; address++)
  {
    writeEEPROM(eeprom1, address, 6);
  }
  Serial.println("EEPROM1 read:");
  for (address = 0; address < 5; address++)
  {
    Serial.print(readEEPROM(eeprom1, address));
  }
  Serial.println();
  Serial.println("Writing at eeprom2: 44444");
  for (address = 0; address < 5; address++)
  {
    writeEEPROM(eeprom2, address, 4);
  }
  Serial.println("EEPROM2 read:");
  for (address = 0; address < 5; address++)
  {
    Serial.print(readEEPROM(eeprom2, address));
  }

}

void loop()
{
 //other codes here

}

//defines the writeEEPROM function
void writeEEPROM(int dev_address, unsigned int eeaddress, byte data )
{
  Wire.beginTransmission(dev_address);
  Wire.write((int)(eeaddress >> 8)); //writes the MSB
  Wire.write((int)(eeaddress & 0xFF)); //writes the LSB
  Wire.write(data);
  Wire.endTransmission();
  delay(5);//this is important to save data
}

//defines the readEEPROM function
byte readEEPROM(int dev_address, unsigned int eeaddress )
{
  byte readdata = 0xFF;
  Wire.beginTransmission(dev_address);
  Wire.write((int)(eeaddress >> 8)); //writes the MSB
  Wire.write((int)(eeaddress & 0xFF)); //writes the LSB
  Wire.endTransmission();
  Wire.requestFrom(dev_address, 1);
  if (Wire.available())
    readdata = Wire.read();
  return readdata;
}

Output:

As you see, we saved data to two different EEPROMs, and then we read from those.

Conclusion:

This way, we can add external EEPROM ICs to cover our memory requirements. I hope this will help you a lot in EEPROM interfacing. Thanks for reading, don’t forget to subscribe.


MKDas

I'm Mithun K. Das; B.Sc. in EEE from KUET, Bangladesh. Blog: https://labprojectsbd.com. "First, electronics was my passion, then it was my education, and finally, electronics is now my profession." I run my own electronics lab, M's Lab (https://mlabsbd.com). Where I work with the creation of new products from ideas to something in real life. Besides this is my personal blog where I write for hobbyists and newcomers in the electronics arena. I also have a YouTube channel where I publish other helpful videos, you can find the link inside the articles. I always try to keep it simple so that it becomes easy to understand. I hope these will help them to learn electronics and apply the knowledge in their real life.

0 Comments

Leave a Reply

Avatar placeholder

Your email address will not be published. Required fields are marked *