Creative Commons images are CC BY-NC-SA 3.0

1.95

added to your
shopping cart

quantity
In stock 491 in stock
1.95 1+ units
1.76 10+ units
1.56 100+ units

Description: 2 Wire Serial Communication (I2C) EEPROM - The back bone of any microprocessor project. These 8 pin chips need only two wires to communicate and retain their data even with power failure. Use the 256K EEPROM for some serious data storage!

Check out the Portuguese Arduino Tutorial and accompanying Windows App, by Daniel Gonçalves.

Documents:

Comments 36 comments

  • What about the larger 512k or 1024k versions?

  • hello,
    Couple of things I would like to clear up before you guys go scratching your head like i did to get it working with arduino.
    1. Pull up resistors NOT required.
    2. Pins 4 & 5 are Analog pins NOT digital!
    3. Dont forget to include Wire.begin() in void Setup() function.
    4. try pastebin.com/f3a36644b code (thanks shinmai for the link! Saved me a ton!) and check for any output before you code your own!
    Thanks and hope these tips help. Good luck on your projects.
    -Alvin

  • Love the chip, has a few quirks. The biggest is the ‘page wrap’, where if you overwrite the end of a ‘page’ in memory on the chip, it will overwrite the data at the beginning of that ‘page’.
    http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1280095224

    • What he said. Easier to write individual bytes instead of a page read unless you are concerned about speed.

  • Nice ic, it helps a lot managing lot of data, and you can configure the i2c addr so you can use 8 of these in the same bus.
    Best chip to controle my bitmaps for the nokia lcd with the arduino.

  • Great little ic, got it working with my basic stamp in no time. Works well for data logging.

  • I don’t know if this is just me, or if I did something wrong, but I am unable to write more than 30 bytes to a page at a time, like this:

    void formatEEPROM(int deviceaddress) {
        for (int p = 0; p < 1067; p++) {
            Wire.beginTransmission(deviceaddress);
            Wire.write((int)((p*30) >> 8));   // MSB
            Wire.write((int)((p*30) & 0xFF)); // LSB
    
            for (int i = 0; i < 30; i++) {
                Wire.write(0x00);
            }
            Wire.endTransmission();
    
            delay(5);
        }
    }
    

    If I try to write 32 bytes at a time and print the first 64 bytes, gaps appear on bytes 31, 32, 63, and 64. Does anyone know what I did wrong?

  • For anyone who thinks these are cheap here, they are 44 cents apiece over at Newark/element14… just sayin'

  • http://www.hobbytronics.co.uk/arduino-external-eeprom is also a nice tutorial in english and I’m writing one in my arduino book; http://cprogrammingforarduino.com

  • This product should include the word “memory” somewhere in the product description. Not for those of us reading it, but for those trying to find it. If you search for “memory”, this doesn’t show up at all. Product 301 has the same problem.

  • So, just to make sure, this chip has 256,000 places it can store a number in the form 0bXXXXXXXX ?

  • I wrote a .Net Micro Framework that I’ve confirmed works with the 512 and 1024 bit versions of this chip, as far as I can tell (I only looked quickly) this uses the same protocol. All of that is to say that my driver should work for this part too;

  • If you’re having trouble with this IC, check out this tutorial.

  • Question - I’ve heard that these things will ‘page wrap’ around to the beginning of the page if you try and write too much data to ‘em. If you write it, like, one bit at a time, will it still wrap around to the next page? Or will it go onto the next one? Thanks!

  • Example : http://lusorobotica.com/index.php/topic,461.msg2738.html

    if eeaddress was 1101 1101 1100 0111

    eeaddress >> 8 = 0000 0000 1101 1101 and wire.send() which sends bytes would truncate it to 1101 1101 which is perfect. its sent the high byte. but i dont understand this. eeaddress & 0xFF = 1101 1101 0000 0000 so wire.send() would send 0000 0000 which fails to send the low byte. is the code wrong in the exmaple?

    • nvm. i worked it out. apparently there is attenuation on the MSB and the LSB is masked when masking 16bit int with 8bit mask.

  • Confused about the page write… note on page 9 says that pages start at integer multiples of the page size (64) and end at integer multiples of the page size - 1 (63). So the pages would be: 1st page starts at 0, ends at 63 2nd page starts at 64, ends at 126? 126 is a multiple of 63… then the third page would start at 64*2 = 128? what happened to address 127? Anyone from sparkfun know?

    • not multiples of 63. always multiples of 64. arithmetic precedence: (multiples of page size) - 1

      thus:

      page size = 64
      integer multiples of the page size = N * 64
      start page M = M*64
      start page M+1 = (M+1)*64
      end page M = (M+1)*64 - 1
      
      • Of course that is what makes sense, and what I though originally. But from the datasheet:

        Physical page boundaries start at addresses that are integer multiples of the page buffer size >(or ‘page size’) and end at addresses that are integer multiples of [page size – 1]

        So are we wrong, or are they wrong?

  • Awesome!

  • Is there a limitation in number of write cycles as it is for internal EEPORMs on Arduino boards ?

    • RTFM says : “1,000,000 erase/write cycles”

      • 100,000 for the arduino; 1M for this chip. But it is most likely more. John Boxall @ Tronixstuff tried to destry his Arduino’s EEPROM and, after 2 months, saw the first read error after 1230163 cycles. So if the Arduino can last 10x as long, maybe you could even get 10M cycles out of this one.

  • Nice looking chip… cheap, too! Note that it is only 32kB, but you can put a few of these on an I2C bus.

  • Unfortunately, I can’t seem to get to RyanD’s write-up anymore, but it was a good one. Here is a slight modification of his code. These are great little storage devices.
    https://sites.google.com/site/measuringstuff/data-storage-retrieval#TOC-Storing-Stuff-To-External-EEPROM-24

  • Have a ZIF socket on your led matrix game board and have a few different games on each memory chip

    • I thought about this, but how would you load code stored on the EEPROM into a microcontroller? I’m not sure this idea is feasible, but if it is, I would love to know the mechanism by which I could implement this. Most microcontrollers (MSP430s, Atmels) are

  • windows app. link ends up with a corrupt rar file, would’ve been nice to try it…

  • Any chance that you guys plan to bring this in an SOIC pinout?

  • no matter what i try i cant seem to get these eeproms to work. i followed the tutorial for my arduino. hooked everything up (1->4&7 to gnd,8 to 5v,4&5 to the i2c pins)
    yet i cant receive any data. ive folowed the code,tried other eeproms(in case of a broken one),other codes on the net,various pull-up resistors,various device adresses and yet it wont work. am i doing something wrong or is there something wrong with the wire lib?
    im using the latest arduino software(0017).
    any help would be very appreciated.

    • A couple of things to look for. The tutorial refers to pins 4 & 5 on the Arduino. These are the analog 4 & 5 pins, not digital.
      One of the tutorials mentions a 5ms delay between reads and writes. I added delay(5) in the loop and then the code started working.

    • @Chiel:
      I’m also using arduino IDE 0017, this chip and a duemilanove. I didn’t need any pull-up resistors (all I’ve got are eight jumper wires, a bread board and the IC), and used the code from pastebin.com/f3a36644b which is a complete sketch using the functions from arduino playground.
      Could it be you’ve got the I2C pins reversed, or have other I2C devices hooked up (I had a blinkM and a Wii Nunchuk on the same bus, all up and working, but later removed the blinkm initialization code from my sketch, but left the device connected to the breadboard which also broke functionality with the eeprom, just unplugging the smart led made everything fine)?


Related Products