

The 24LC32 is a 32Kbit (4K x 8) I2C EEPROM (Electrically Erasable Programmable Read-Only Memory) designed for non-volatile data storage. It operates on a supply voltage range of 1.8V to 5.5V and communicates via a 2-wire I2C interface. This component is ideal for applications requiring reliable data retention without power, such as configuration storage, calibration data, or small-scale data logging.








| Parameter | Value |
|---|---|
| Memory Size | 32Kbit (4K x 8) |
| Interface | I2C (2-wire) |
| Operating Voltage Range | 1.8V to 5.5V |
| Maximum Clock Frequency | 400 kHz (Standard Mode) |
| Write Cycle Time | 5 ms (typical) |
| Data Retention | > 200 years |
| Endurance | 1,000,000 write/erase cycles |
| Operating Temperature | -40°C to +85°C |
The 24LC32 is typically available in an 8-pin package (e.g., PDIP, SOIC). Below is the pinout description:
| Pin Number | Pin Name | Description |
|---|---|---|
| 1 | A0 | Address input bit 0 (used for I2C addressing) |
| 2 | A1 | Address input bit 1 (used for I2C addressing) |
| 3 | A2 | Address input bit 2 (used for I2C addressing) |
| 4 | VSS | Ground (0V reference) |
| 5 | SDA | Serial Data (I2C data line, open-drain) |
| 6 | SCL | Serial Clock (I2C clock line) |
| 7 | WP | Write Protect (active HIGH; disables write operations when HIGH) |
| 8 | VCC | Power supply (1.8V to 5.5V) |
0x50, and the full address is determined by the state of A0, A1, and A2.Below is an example of how to connect and use the 24LC32 with an Arduino UNO:
#include <Wire.h> // Include the Wire library for I2C communication
#define EEPROM_I2C_ADDRESS 0x50 // Base I2C address of 24LC32
void setup() {
Wire.begin(); // Initialize I2C communication
Serial.begin(9600); // Initialize serial communication for debugging
writeEEPROM(0x0000, 42); // Write the value 42 to memory address 0x0000
int value = readEEPROM(0x0000); // Read the value from memory address 0x0000
Serial.print("Read value: ");
Serial.println(value); // Print the read value
}
void loop() {
// Main loop does nothing
}
// Function to write a byte to the EEPROM
void writeEEPROM(unsigned int address, byte 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();
delay(5); // Wait for the write cycle to complete (typical 5ms)
}
// Function to read a byte from the EEPROM
byte readEEPROM(unsigned int 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();
Wire.requestFrom(EEPROM_I2C_ADDRESS, 1); // Request 1 byte from the EEPROM
if (Wire.available()) {
return Wire.read(); // Return the received byte
}
return 0xFF; // Return 0xFF if no data is available
}
EEPROM Not Responding on I2C Bus:
Data Not Written to EEPROM:
Corrupted Data:
No Data Read from EEPROM:
Q: Can I use the 24LC32 with a 3.3V microcontroller?
Q: How many devices can I connect on the same I2C bus?
Q: What happens if I exceed the write endurance limit?
Q: Is the 24LC32 suitable for high-speed applications?