

The 25LC160 is a 16K-bit (2K x 8) serial EEPROM manufactured by Microchip Technology. It is designed for non-volatile data storage, meaning it retains data even when power is removed. The device communicates using the Serial Peripheral Interface (SPI) protocol, making it suitable for a wide range of applications requiring reliable and compact memory solutions.








The following table outlines the key technical details of the 25LC160:
| Parameter | Value |
|---|---|
| Memory Size | 16 Kbits (2K x 8) |
| Interface | SPI (Serial Peripheral Interface) |
| Operating Voltage Range | 2.5V to 5.5V |
| Maximum Clock Frequency | 10 MHz (at 4.5V to 5.5V) |
| Write Cycle Time (tWC) | 5 ms (typical) |
| Endurance | 1,000,000 write/erase cycles |
| Data Retention | 200 years |
| Operating Temperature Range | -40°C to +85°C |
| Package Options | PDIP, SOIC, TSSOP, MSOP |
The 25LC160 is available in an 8-pin package. The pinout and descriptions are as follows:
| Pin | Name | Type | Description |
|---|---|---|---|
| 1 | CS | Input | Chip Select: Activates the device when pulled low. |
| 2 | SO | Output | Serial Data Output: Outputs data during read operations. |
| 3 | WP | Input | Write Protect: Disables all write operations when pulled low. |
| 4 | VSS | Power | Ground: Connect to system ground. |
| 5 | SI | Input | Serial Data Input: Receives data during write operations. |
| 6 | SCK | Input | Serial Clock: Synchronizes communication between the master and the EEPROM. |
| 7 | HOLD | Input | Hold: Pauses communication without resetting the SPI bus when pulled low. |
| 8 | VCC | Power | Power Supply: Connect to a voltage source (2.5V to 5.5V). |
Below is an example of interfacing the 25LC160 with an Arduino UNO to write and read data:
#include <SPI.h>
// Pin definitions
const int CS_PIN = 10; // Chip Select pin connected to Arduino pin 10
void setup() {
Serial.begin(9600);
SPI.begin();
pinMode(CS_PIN, OUTPUT);
digitalWrite(CS_PIN, HIGH); // Ensure CS is high initially
}
void loop() {
// Write data to EEPROM
writeEEPROM(0x0000, 0x42); // Write 0x42 to address 0x0000
delay(10); // Wait for write cycle to complete
// Read data from EEPROM
byte data = readEEPROM(0x0000);
Serial.print("Read Data: 0x");
Serial.println(data, HEX);
while (1); // Stop execution
}
void writeEEPROM(unsigned int address, byte data) {
digitalWrite(CS_PIN, LOW); // Select the EEPROM
SPI.transfer(0x02); // Send WRITE instruction
SPI.transfer((address >> 8) & 0xFF); // Send high byte of address
SPI.transfer(address & 0xFF); // Send low byte of address
SPI.transfer(data); // Send data byte
digitalWrite(CS_PIN, HIGH); // Deselect the EEPROM
}
byte readEEPROM(unsigned int address) {
digitalWrite(CS_PIN, LOW); // Select the EEPROM
SPI.transfer(0x03); // Send READ instruction
SPI.transfer((address >> 8) & 0xFF); // Send high byte of address
SPI.transfer(address & 0xFF); // Send low byte of address
byte data = SPI.transfer(0x00); // Read data byte
digitalWrite(CS_PIN, HIGH); // Deselect the EEPROM
return data;
}
No Data Read/Write:
Corrupted Data:
Device Not Responding:
Q1: Can I use the 25LC160 with a 3.3V microcontroller?
A1: Yes, the 25LC160 operates within a voltage range of 2.5V to 5.5V, making it compatible with 3.3V systems.
Q2: How many write/erase cycles can the 25LC160 handle?
A2: The device supports up to 1,000,000 write/erase cycles, ensuring long-term reliability.
Q3: What happens if power is lost during a write operation?
A3: The data being written may be corrupted. It is recommended to use a power-fail detection circuit to prevent such issues.
Q4: Can I use multiple 25LC160 devices on the same SPI bus?
A4: Yes, multiple devices can share the same SPI bus. Assign a unique CS pin for each device to select them individually.