

The 24LC64, manufactured by Microchip Technology, is a 64Kbit (8K x 8) EEPROM (Electrically Erasable Programmable Read-Only Memory) that communicates via the I2C (Inter-Integrated Circuit) interface. This non-volatile memory component is designed to retain data even when power is removed, making it ideal for applications requiring persistent data storage.








The following table outlines the key technical details of the 24LC64:
| Parameter | Value |
|---|---|
| Memory Size | 64 Kbits (8K x 8 bytes) |
| Interface | I2C (2-wire) |
| Operating Voltage Range | 2.5V to 5.5V |
| Maximum Clock Frequency | 400 kHz (Fast Mode I2C) |
| Write Cycle Time | 5 ms (typical) |
| Data Retention | > 200 years |
| Endurance | 1,000,000 write/erase cycles |
| Operating Temperature | -40°C to +85°C |
| Package Options | PDIP, SOIC, TSSOP, MSOP |
The 24LC64 is typically available in an 8-pin package. The pinout and descriptions are as follows:
| Pin Number | Pin Name | Description |
|---|---|---|
| 1 | A0 | Address input bit 0 (used for I2C slave address selection) |
| 2 | A1 | Address input bit 1 (used for I2C slave address selection) |
| 3 | A2 | Address input bit 2 (used for I2C slave address selection) |
| 4 | VSS | Ground (0V reference) |
| 5 | SDA | Serial Data (I2C bidirectional data line) |
| 6 | SCL | Serial Clock (I2C clock line) |
| 7 | WP | Write Protect (logic HIGH disables write operations, logic LOW enables writes) |
| 8 | VCC | Power supply (2.5V to 5.5V) |
0x50. The final address is determined by the states of A0, A1, and A2.Below is an example of how to interface the 24LC64 with an Arduino UNO to write and read data.
#include <Wire.h> // Include the Wire library for I2C communication
#define EEPROM_I2C_ADDRESS 0x50 // Base I2C address of the 24LC64
void setup() {
Wire.begin(); // Initialize I2C communication
Serial.begin(9600); // Initialize serial communication for debugging
// Write a byte to EEPROM
writeEEPROM(0x0000, 42); // Write the value 42 to memory address 0x0000
delay(10); // Wait for the write cycle to complete
// Read the byte back from EEPROM
uint8_t value = readEEPROM(0x0000);
Serial.print("Read value: ");
Serial.println(value); // Print the read value
}
void loop() {
// Nothing to do here
}
// Function to write a byte to the 24LC64
void writeEEPROM(uint16_t address, uint8_t data) {
Wire.beginTransmission(EEPROM_I2C_ADDRESS);
Wire.write((address >> 8) & 0xFF); // Send the high byte of the address
Wire.write(address & 0xFF); // Send the low byte of the address
Wire.write(data); // Send the data byte
Wire.endTransmission(); // End the I2C transmission
}
// Function to read a byte from the 24LC64
uint8_t readEEPROM(uint16_t address) {
Wire.beginTransmission(EEPROM_I2C_ADDRESS);
Wire.write((address >> 8) & 0xFF); // Send the high byte of the address
Wire.write(address & 0xFF); // Send the low byte of the address
Wire.endTransmission(); // End the I2C transmission
Wire.requestFrom(EEPROM_I2C_ADDRESS, 1); // Request 1 byte from the EEPROM
if (Wire.available()) {
return Wire.read(); // Read and return the byte
}
return 0; // Return 0 if no data is available
}
No Communication with the EEPROM:
Incorrect Data Read/Write:
Write Operations Failing:
Q: Can I use the 24LC64 with a 3.3V microcontroller?
A: Yes, the 24LC64 operates within a voltage range of 2.5V to 5.5V, making it compatible with 3.3V systems.
Q: How many devices can I connect on the same I2C bus?
A: Up to 8 24LC64 devices can be connected on the same I2C bus by configuring the A0, A1, and A2 pins to set unique addresses.
Q: What happens if power is lost during a write operation?
A: The data being written may be corrupted. It is recommended to implement power-failure detection mechanisms in critical applications.