Accessing the Atmel AT24c164 FAQ (Frequently Asked Questions)

How can I Access the Atmel AT24c164

From my reading of the AT24C164 data sheet on the Atmel web site, it appears that this device is organized into eight (8) blocks, with each block holding 256 bytes.

From my reading, I believe each block has a different I2C Bus slave address.
When you transmit to the device, the I2C Bus address that crosses the bus selects the block. The first data byte in the message specifies the byte within the block. Additional message data bytes are written into memory starting at the specified block and byte.

To read from a specific block/byte, you must first master write a single data byte to the device to set up its "internal data work address counter" (page 7, Current Read Address). This sets up the block and byte address inside the EEPROM. Then you can do a master read to read the specified data.

Please also note that some EEPROMs restrict the number of bytes you can write in a single operation. Check the data sheet!

Can't find the answer to your question here? Then e-mail your question to us at

I2C is just a mouse click away TM