I2C – EEPROM

Writing to an I2C Based EEPROM

The 24LC32AT is a 32KBit EEPROM that is accessed via the I2C bus.  If we look at page 7 of the EEPROM data sheet, we are given information about how to write to a specific address in the EEPROM.

mcp_24LC32AT_write

Source: 24LC32AT Data sheet

The control byte for the 24LC32AT requires us to specify a 7-bit address of 0x50 ( the 24LC32AT has no external chip select bits, so we set them to zero).  The next two bytes  contain the address being written to   The last byte of data sent is the data being written.

The screen capture below illustrates writing 0x01 to address 0x0001.  The addresses shown below are in 7-bit format.

24LC32AT_Write

Reading from an I2C Based EEPROM

If we look at page 10 of the 24LC32AT data sheet, we are given information about how to read  an address in the EEPROM.

mcp_24LC32AT_read

Source: 24LC32AT Data sheet

A read operation actually starts with a write.   The internal EEPROM address is set by writing the control byte followed by two bytes of address.  After the 2nd address byte has been transmitted, the master device sends a restart condition.

A restart condition occurs when the master sends a second start command prior to sending the stop condition.   The restart condition re-sends a control byte where  the 8th bit a a 1 (indicating a read operation).  The slave will then drive the data on SDA for the next 8 clock cycles.  The read operation is terminated when the master device does not ACK the data.

The following screen capture demonstrates reading from address 0x0001.

24LC32AT_Read

Taking a closer look at the restart, we see that the SDA is pulled low while SCL is high, indicating a second start condition

24LC32AT_ACK_Restart

The transaction terminates when the master device fails to ACK the last byte.  The master terminates the transaction by generating a stop condition.  The stop condition requires that the SDA line makes a low-to-high transition while SCL is high.  To do this, the master drives SDA to 0 and then releases SDA.

24LC32AT_No_Ack

Leave a Reply