
Quick Specs Summary
EN25QH128 = 128Mbit (16MB) SPI NOR Flash memory chip manufactured by EON Silicon Solution.
At-a-Glance:
| Specification | Value |
|---|---|
| Capacity | 128Mbit (16,777,216 bytes) |
| Interface | SPI, Dual SPI, Quad SPI |
| Speed | 133 MHz (Quad SPI max) |
| Voltage | 2.7V - 3.6V |
| Package | SOIC-8 (208mil), WSON-8 |
| Temp Range | -40°C to +85°C (industrial) |
| Manufacturer | EON Silicon Solution (Taiwan) |
| Similar To | W25Q128, GD25Q128 |
Quick use cases: Firmware storage, BIOS chips, embedded systems, IoT devices, router/modem firmware.
Key Features & Applications
Main Features
✅ Large Capacity: 16MB storage (enough for complex firmware) ✅ Fast SPI: 133 MHz Quad SPI (50+ MB/s read speed) ✅ Wide Voltage: 2.7-3.6V (compatible with 3.3V systems) ✅ Low Power: <1µA deep power-down, 15mA active ✅ High Reliability: 100,000 program/erase cycles, 20-year retention ✅ Pin-Compatible: Drop-in replacement for W25Q128/GD25Q128
Target Applications
1. Embedded Firmware Storage
- Microcontroller external program storage
- ESP32/ESP8266 firmware
- Arduino projects requiring large storage
2. BIOS/UEFI Flash
- Motherboard BIOS chips
- Embedded computer BIOS
- Industrial PC firmware
3. Networking Equipment
- Router firmware
- Switch boot code
- Modem configuration storage
4. IoT Devices
- Smart home controllers
- Sensor data logging
- OTA (Over-The-Air) firmware update staging
5. Consumer Electronics
- Set-top boxes
- IP cameras
- Smart displays
Detailed Technical Specifications
Memory Organization
Total Capacity: 128Mbit = 16,777,216 bytes = 16MB
Organization:
├─ 65,536 programmable pages × 256 bytes/page
├─ 2,048 erasable sectors × 4KB/sector
└─ 256 erasable blocks × 64KB/block
Address Space: 0x000000 to 0xFFFFFF (24-bit addressing)
Bank Structure:
├─ 16 banks × 4 groups = 64 banks total
└─ Page buffer: 256 bytes
Performance Specifications
Read Performance:
| Mode | Clock Speed | Throughput |
|---|---|---|
| Standard SPI | 104 MHz max | ~13 MB/s |
| Dual SPI | 104 MHz max | ~22 MB/s |
| Quad SPI | 133 MHz max | ~50 MB/s |
Write Performance:
| Operation | Typical | Maximum |
|---|---|---|
| Page Program (256B) | 0.8 ms | 3 ms |
| Sector Erase (4KB) | 45 ms | 200 ms |
| Block Erase (32KB) | 120 ms | 800 ms |
| Block Erase (64KB) | 150 ms | 1000 ms |
| Chip Erase (16MB) | 30 sec | 100 sec |
Endurance & Retention:
- Program/Erase Cycles: 100,000 typical
- Data Retention: 20 years @ 85°C, 100 years @ 25°C
Electrical Characteristics
Supply Voltage:
- Operating Range: 2.7V - 3.6V
- Recommended: 3.0V - 3.3V (most common)
Current Consumption:
| Mode | Condition | Current |
|---|---|---|
| Active Read | 50 MHz SPI | 15 mA typ, 25 mA max |
| Active Write | Page program | 20 mA typ, 30 mA max |
| Standby | /CS high | 10 µA typ, 20 µA max |
| Deep Power-Down | Low-power sleep | 1 µA typ, 3 µA max |
Temperature Range:
- Industrial: -40°C to +85°C
- Extended (EN25QH128A-104HIP): -40°C to +105°C
Pinout Diagram & Pin Functions
SOIC-8 / WSON-8 Pinout
EN25QH128
┌───────────────┐
/CS │1 ● 8│ VCC (2.7-3.6V)
DO │2 7│ /HOLD (or /RESET)
/WP │3 6│ CLK (SPI Clock)
GND │4 5│ DI (Data In)
└───────────────┘
SOIC-8
Note: Pin 1 marked with dot (●)
Pin Functions (Standard SPI Mode)
| Pin # | Name | Type | Function |
|---|---|---|---|
| 1 | /CS | Input | Chip Select (active low) - enables device |
| 2 | DO (IO1) | Output/IO | Data Output in SPI mode / IO1 in Dual/Quad |
| 3 | /WP (IO2) | Input/IO | Write Protect (active low) / IO2 in Quad mode |
| 4 | GND | Power | Ground (0V) |
| 5 | DI (IO0) | Input/IO | Data Input in SPI mode / IO0 in Dual/Quad |
| 6 | CLK | Input | SPI Clock input (max 133 MHz) |
| 7 | /HOLD (IO3) | Input/IO | Hold/Pause transfers (active low) / IO3 in Quad |
| 8 | VCC | Power | Power supply (2.7-3.6V) |
Pin Functions in Different SPI Modes
Standard SPI (Single I/O):
- DI (pin 5): Data input only
- DO (pin 2): Data output only
- /WP (pin 3): Write protect control
- /HOLD (pin 7): Pause operation
Dual SPI (2× I/O):
- IO0 (pin 5): Bidirectional data
- IO1 (pin 2): Bidirectional data
- /WP (pin 3): Not used (pull high)
- /HOLD (pin 7): Not used (pull high)
Quad SPI (4× I/O):
- IO0 (pin 5): Bidirectional data
- IO1 (pin 2): Bidirectional data
- IO2 (pin 3): Bidirectional data
- IO3 (pin 7): Bidirectional data
Performance Characteristics
Read Speed Comparison (vs Competitors)
Quad SPI Read @ 133 MHz:
EN25QH128: ~50 MB/s (EON)
W25Q128: ~50 MB/s (Winbond) ✓ Identical
GD25Q128: ~50 MB/s (GigaDevice) ✓ Identical
MX25L128: ~45 MB/s (Macronix) ← Slightly slower
Verdict: EN25QH128 matches industry leaders
Erase Speed Comparison
Sector Erase (4KB):
EN25QH128: 45 ms typical ✓ Fast
W25Q128: 45 ms typical ✓ Same
GD25Q128: 50 ms typical ← Slightly slower
Chip Erase (16MB):
EN25QH128: 30 sec typical ✓ Excellent
W25Q128: 30 sec typical ✓ Same
GD25Q128: 40 sec typical ← Slower
Power Consumption Comparison
Active Read (50 MHz):
EN25QH128: 15 mA ✓ Good
W25Q128: 15 mA ✓ Same
GD25Q128: 12 mA ← More efficient
Deep Power-Down:
EN25QH128: 1 µA ✓ Good
W25Q128: 0.1 µA ← Best (10× lower)
GD25Q128: 1 µA ✓ Same as EN25QH128
Verdict: EN25QH128 offers competitive performance matching W25Q128 in most metrics.
Compatibility Analysis
EN25QH128 vs W25Q128 (Pin-Compatible)
Compatibility: ✅ 98% (Excellent)
| Aspect | Compatible? | Notes |
|---|---|---|
| Pinout | ✅ Yes | Identical SOIC-8/WSON-8 |
| Voltage | ✅ Yes | Both 2.7-3.6V |
| Speed | ✅ Yes | Both 133 MHz Quad SPI |
| Capacity | ✅ Yes | Both 128Mbit (16MB) |
| Commands | ✅ Yes | Standard JEDEC SPI commands |
| Manufacturer ID | ⚠️ Different | EN: 0x1C, Winbond: 0xEF |
| Device ID | ✅ Same | Both: 0x4018 |
JEDEC ID Comparison:
EN25QH128: 1C 70 18
├─ 1C = EON manufacturer
├─ 70 = Memory type
└─ 18 = 128Mbit capacity
W25Q128: EF 40 18
├─ EF = Winbond manufacturer
├─ 40 = Memory type
└─ 18 = 128Mbit capacity
Drop-In Replacement: Yes, if firmware accepts manufacturer ID 0x1C or doesn't check ID.
EN25QH128 vs GD25Q128 (Also Compatible)
Compatibility: ✅ 95% (Excellent)
Both use same pinout, voltage, and capacity. Main difference: Manufacturer ID (EN: 0x1C, GD: 0xC8).
Compatibility Checklist
✅ EN25QH128 works as direct replacement if:
- System doesn't check Manufacturer ID
- OR firmware updated to accept 0x1C (EON)
- PCB has SOIC-8 or WSON-8 footprint
- Power supply provides 2.7-3.6V
⚠️ May need firmware update if:
- System validates Manufacturer ID
- Only accepts W25Q128 (0xEF) or GD25Q128 (0xC8)
Solution: Update firmware to accept multiple IDs:
if (mfgID == 0xEF || mfgID == 0x1C || mfgID == 0xC8) {
// Accept Winbond, EON, or GigaDevice
flashOK = true;
}
Design Guidelines
PCB Layout Recommendations
Trace Routing:
SPI Signal Traces:
├─ Impedance: 50Ω single-ended (CLK, DI, DO)
├─ Length matching: ±5 mm between signals
├─ Keep traces short: <100 mm ideal, <150 mm acceptable
└─ Avoid vias: Route on single layer if possible
Spacing:
├─ Minimum trace-to-trace: 0.2 mm (8 mils)
└─ Ground plane clearance: 0.3 mm (12 mils)
Power Supply Design:
Decoupling Capacitors (Critical!):
Place near EN25QH128 VCC pin (pin 8):
├─ 0.1 µF ceramic (X7R) ← Primary, closest to pin (<5 mm)
├─ 10 µF ceramic (X7R) ← Bulk, within 10 mm
└─ Optional: 47 µF electrolytic for system supply
ESR requirement: <100 mΩ for 0.1µF cap
Voltage rating: 6.3V minimum (10V recommended for 3.3V supply)
Pull-Up Resistors (for unused Quad SPI pins):
If using Standard SPI only:
├─ /WP (pin 3): 10kΩ pull-up to VCC
└─ /HOLD (pin 7): 10kΩ pull-up to VCC
Reason: Prevents floating inputs, reduces noise
Signal Integrity Considerations
Clock Signal (CLK - Pin 6):
- Most critical signal (affects data integrity)
- Route as 50Ω controlled impedance
- Add series termination resistor (22-33Ω) if trace >50mm
- Avoid crossing other signals
Data Signals (DI, DO, IO2, IO3):
- Less critical than CLK, but keep short
- Match lengths within ±5mm of CLK
- Avoid sharp bends (use 45° or curved traces)
Chip Select (/CS - Pin 1):
- Can be slower (not clock-synchronized)
- Standard trace routing sufficient
- Add 10kΩ pull-up if master SPI may tri-state /CS
Programming Guide
Command Set Overview
Essential Commands:
| Command | Code | Function |
|---|---|---|
| Write Enable | 0x06 | Enable write/erase operations |
| Write Disable | 0x04 | Disable write/erase |
| Read Status | 0x05 | Read status register |
| Write Status | 0x01 | Write status register |
| Read Data | 0x03 | Standard read (up to 104 MHz) |
| Fast Read | 0x0B | Fast read with dummy byte |
| Dual Read | 0x3B | Dual output fast read |
| Quad Read | 0x6B | Quad output fast read |
| Page Program | 0x02 | Write up to 256 bytes |
| Sector Erase | 0x20 | Erase 4KB sector |
| Block Erase 32KB | 0x52 | Erase 32KB block |
| Block Erase 64KB | 0xD8 | Erase 64KB block |
| Chip Erase | 0xC7 or 0x60 | Erase entire chip |
| Read ID | 0x9F | Read JEDEC manufacturer/device ID |
Read Operation Example (Arduino)
// Read data from EN25QH128
// Requires SPI library
#include <SPI.h>
#define CS_PIN 10 // Chip select pin
void setup() {
pinMode(CS_PIN, OUTPUT);
digitalWrite(CS_PIN, HIGH); // Deselect initially
SPI.begin();
SPI.setClockDivider(SPI_CLOCK_DIV4); // 4 MHz for Arduino Uno
}
// Read 1 byte from address
uint8_t flashRead(uint32_t address) {
digitalWrite(CS_PIN, LOW);
SPI.transfer(0x03); // Read Data command
SPI.transfer((address >> 16) & 0xFF); // Address byte 2
SPI.transfer((address >> 8) & 0xFF); // Address byte 1
SPI.transfer(address & 0xFF); // Address byte 0
uint8_t data = SPI.transfer(0x00); // Read data
digitalWrite(CS_PIN, HIGH);
return data;
}
// Read JEDEC ID to verify chip
void readJEDEC() {
digitalWrite(CS_PIN, LOW);
SPI.transfer(0x9F); // Read ID command
uint8_t mfg = SPI.transfer(0x00); // Should be 0x1C for EON
uint8_t type = SPI.transfer(0x00); // Should be 0x70
uint8_t cap = SPI.transfer(0x00); // Should be 0x18 for 128Mbit
digitalWrite(CS_PIN, HIGH);
Serial.print("JEDEC ID: ");
Serial.print(mfg, HEX);
Serial.print(" ");
Serial.print(type, HEX);
Serial.print(" ");
Serial.println(cap, HEX);
}
Write Operation Example (Page Program)
// Write data to EN25QH128
// Note: Must erase sector first!
void flashWriteEnable() {
digitalWrite(CS_PIN, LOW);
SPI.transfer(0x06); // Write Enable command
digitalWrite(CS_PIN, HIGH);
delayMicroseconds(1);
}
void flashPageProgram(uint32_t address, uint8_t* data, uint16_t length) {
if (length > 256) length = 256; // Max 256 bytes per page
flashWriteEnable();
digitalWrite(CS_PIN, LOW);
SPI.transfer(0x02); // Page Program command
SPI.transfer((address >> 16) & 0xFF);
SPI.transfer((address >> 8) & 0xFF);
SPI.transfer(address & 0xFF);
for (uint16_t i = 0; i < length; i++) {
SPI.transfer(data[i]);
}
digitalWrite(CS_PIN, HIGH);
// Wait for write to complete (~1-3 ms)
delay(3);
}
void flashSectorErase(uint32_t address) {
flashWriteEnable();
digitalWrite(CS_PIN, LOW);
SPI.transfer(0x20); // Sector Erase (4KB) command
SPI.transfer((address >> 16) & 0xFF);
SPI.transfer((address >> 8) & 0xFF);
SPI.transfer(address & 0xFF);
digitalWrite(CS_PIN, HIGH);
// Wait for erase (~45-200 ms)
delay(200);
}
Alternative Parts & Cross-Reference
Direct Pin-Compatible Replacements
| Manufacturer | Part Number | Compatibility | Speed | Power | Notes |
|---|---|---|---|---|---|
| Winbond | W25Q128JVSIQ | ✅ 98% | Same | Similar | Industry standard |
| GigaDevice | GD25Q128CSIG | ✅ 95% | Same | Slightly better | Cost-effective |
| Macronix | MX25L12835F | ✅ 90% | Same | Same | Good alternative |
| ISSI | IS25LP128 | ⚠️ 85% | Faster | Better | Different power modes |
Recommendation: W25Q128 or GD25Q128 as primary alternatives.
Upgrade Options (Higher Capacity)
| Part Number | Capacity | Upgrade Path |
|---|---|---|
| EN25QH256 | 256Mbit (32MB) | 2× capacity, same pinout |
| W25Q256 | 256Mbit (32MB) | Industry standard 32MB |
| GD25Q256 | 256Mbit (32MB) | Cost-effective 32MB |
Note: 256Mbit chips require 4-byte addressing mode (different commands).
Common Issues & Solutions
Issue 1: Chip Not Detected
Symptom: JEDEC ID reads as 0xFF FF FF or 0x00 00 00
Possible Causes:
- Power supply not stable (check decoupling caps)
- SPI clock too fast (reduce to <10 MHz for testing)
- /CS not toggling properly
- Bad solder joints
Solution:
- Check VCC: must be 2.7-3.6V stable
- Add 0.1µF cap close to VCC pin
- Verify /CS goes LOW during communication
- Re-flow solder joints
Issue 2: Data Corruption After Write
Symptom: Written data reads back incorrectly
Possible Causes:
- Sector not erased before write
- Write enable not sent
- Voltage drops during write
Solution:
- Always erase sector with 0x20 command first
- Send 0x06 (Write Enable) before every write/erase
- Ensure stable power supply (check for voltage sags)
Issue 3: Slow Read Speed
Symptom: Read speed <5 MB/s
Possible Causes:
- Using Standard SPI Read (0x03) instead of Fast Read (0x0B)
- SPI clock too slow
- Poor PCB layout (long traces)
Solution:
- Use Fast Read (0x0B) or Quad Read (0x6B) commands
- Increase SPI clock to 40-80 MHz (if MCU supports)
- Optimize PCB: shorter traces, proper impedance
Issue 4: Firmware Rejects EN25QH128
Symptom: System doesn't boot with EN25QH128, works with W25Q128
Cause: Firmware checks Manufacturer ID and only accepts 0xEF (Winbond)
Solution: Update firmware to accept EN25QH128's ID (0x1C):
// Before:
if (mfgID != 0xEF) return ERROR;
// After:
if (mfgID != 0xEF && mfgID != 0x1C) return ERROR;
Datasheet Resources
Official Documentation
📄 EN25QH128 Datasheet (PDF):
- Search: "EN25QH128 datasheet PDF" on manufacturer website
- Version: Check for latest revision (Rev. 2.0 or newer)
📊 Application Notes:
- AN-001: SPI Flash Layout Guide
- AN-002: Power Supply Design for Serial Flash
Development Tools
🔧 Software Libraries:
- Arduino SPIFlash Library (compatible with EN25QH128)
- ESP32 SPI Flash Driver (ESP-IDF)
- STM32 HAL SPI examples
🛠️ Programming Hardware:
- CH341A USB Programmer (budget option)
- SEGGER J-Flash (professional)
- Dedicated SPI Flash programmers
Cross-Reference Databases
🔍 Part Number Search:
- Octopart: Component cross-reference
- FindChips: Availability checker
- AiChipLink: Technical comparison tool
Conclusion
EN25QH128 is a capable 128Mbit SPI Flash chip offering excellent compatibility with industry-standard parts like W25Q128, making it a viable choice for embedded system firmware storage, BIOS applications, and IoT devices. With 133 MHz Quad SPI support (50+ MB/s read), wide voltage range (2.7-3.6V), and high reliability (100K cycles, 20-year retention), EN25QH128 delivers solid performance for most applications.
Key advantages:
- ✅ Pin-compatible with W25Q128/GD25Q128
- ✅ Fast erase performance (30sec chip erase)
- ✅ Standard JEDEC command set
- ✅ Wide availability
- ✅ Competitive specifications
Considerations:
- ⚠️ Requires firmware update if system validates Manufacturer ID
- ⚠️ Higher deep power-down current than W25Q128 (1µA vs 0.1µA)
Recommendation: EN25QH128 works excellently as W25Q128/GD25Q128 alternative. Update firmware to accept Manufacturer ID 0x1C for seamless integration.
For technical support, cross-reference guides, and embedded design resources, visit AiChipLink.com.

Written by Jack Elliott from AIChipLink.
AIChipLink, one of the fastest-growing global independent electronic components distributors in the world, offers millions of products from thousands of manufacturers, and many of our in-stock parts is available to ship same day.
We mainly source and distribute integrated circuit (IC) products of brands such as Broadcom, Microchip, Texas Instruments, Infineon, NXP, Analog Devices, Qualcomm, Intel, etc., which are widely used in communication & network, telecom, industrial control, new energy and automotive electronics.
Empowered by AI, Linked to the Future. Get started on AIChipLink.com and submit your RFQ online today!
Frequently Asked Questions
What is EN25QH128?
EN25QH128 is a 128Mbit (16MB) SPI NOR Flash memory chip from EON Silicon Solution. It supports Quad SPI up to 133 MHz, operates at 2.7–3.6V, and is widely used in embedded systems, BIOS storage, and IoT firmware.
Is EN25QH128 compatible with W25Q128?
Yes, they are pin-compatible and largely interchangeable. Both share the same package, command set, and performance. The only key difference is the JEDEC Manufacturer ID (0x1C vs 0xEF), which may require firmware updates.
Can EN25QH128 replace W25Q64?
No, because of different capacity. EN25QH128 is 16MB, while W25Q64 is 8MB. Although pin-compatible, firmware designed for 8MB will not automatically utilize the full 16MB.