
Both are 128 Mbit SPI NOR Flash. Both are 8-pin SOIC packages. Both run at 3.3V, support Quad SPI, and have the same 4KB sector / 64KB block / 16MB total layout. On a distributor line card, they look completely interchangeable.
Hundreds of engineers have thought the same thing. Some of them were right. Others found out the hard way during a supply shortage swap that their Quad SPI driver stopped working, their firmware's JEDEC ID check started failing, or their automotive customer rejected the lot because the new part had no AEC-Q100 qualification — even though it came in the same package from a reputable distributor.
This article does not just compare the numbers. It tells you exactly where the W25Q128 (Winbond) and MX25L128 (Macronix) diverge, which differences matter for firmware and hardware, which do not, and — critically — when you can swap one for the other without touching a line of code.
1.0 Which Exact Parts Are We Comparing?
"W25Q128" and "MX25L128" are family names, not single part numbers. Each family contains multiple variants with different voltage ratings, package options, and feature revisions. Before comparing anything, you need to know which specific variants are on your BOM.
Winbond W25Q128 family — current production variants:
| Part Number | VCC | Key Feature | Package |
|---|---|---|---|
| W25Q128JV | 2.7–3.6V | Latest revision, DTR support, 3× Security Registers | SOIC-8, WSON, TFBGA |
| W25Q128FV | 2.7–3.6V | Previous revision, widely deployed, no DTR | SOIC-8, WSON |
| W25Q128JW | 1.7–1.95V | 1.8V low-voltage version | SOIC-8, WSON |
| W25Q128FW | 1.7–1.95V | 1.8V, previous revision | SOIC-8, WSON |
Macronix MX25L128 family — current production variants:
| Part Number | VCC | Key Feature | Package |
|---|---|---|---|
| MX25L12835F | 2.7–3.6V | Current production, MXSMIO Quad I/O, 100K P/E | SOIC-8, WSON |
| MX25L12845E | 2.7–3.6V | Adds DTR read mode, slightly older | SOIC-8, WSON |
| MX25L12805D | 2.7–3.6V | Older, no Quad mode | SOIC-8 |
| MX25L12833F | 2.7–3.6V | Newer variant with automotive features | SOIC-8, WSON |
For this comparison, we are focusing on the most common pair that engineers try to substitute: the W25Q128JV (or W25Q128FV) versus the MX25L12835F (or MX25L12845E). These are the 3.3V standard-speed variants you will encounter most often on production boards.
2.0 Side-by-Side Specifications
| Parameter | W25Q128JV (Winbond) | MX25L12835F (Macronix) | Compatible? |
|---|---|---|---|
| Capacity | 128 Mbit (16 MB) | 128 Mbit (16 MB) | ✅ Identical |
| VCC | 2.7V – 3.6V | 2.7V – 3.6V | ✅ Identical |
| Page size | 256 bytes | 256 bytes | ✅ Identical |
| Sector size | 4 KB | 4 KB | ✅ Identical |
| Block size | 64 KB (also 32 KB) | 64 KB | ✅ Identical |
| Total sectors | 4,096 | 4,096 | ✅ Identical |
| P/E endurance | 100,000 cycles | 100,000 cycles | ✅ Identical |
| Data retention | 20 years | 20 years | ✅ Identical |
| Max SPI clock (standard) | 133 MHz | 86–133 MHz (variant dependent) | ⚠️ Verify per variant |
| Quad SPI max clock | 133 MHz (QSPI), 80 MHz (QPI) | 104–133 MHz | ⚠️ Verify per variant |
| Manufacturer JEDEC ID | 0xEF (Winbond) | 0xC2 (Macronix) | ❌ Different |
| Device ID (128Mbit) | 0x4018 (JV) / 0x4018 (FV) | 0x2018 (12835F) | ❌ Different |
| Deep power-down current | 1 µA typical | 1 µA typical | ✅ Identical |
| Standby current | 3 µA typical | 3 µA typical | ✅ Identical |
| Active read current | ~25 mA | ~25 mA | ✅ Essentially same |
| QE (Quad Enable) bit location | Status Register-2, bit 1 | Configuration Register, bit 6 | ❌ Different |
| Security registers | 3× 256-byte OTP | 2× 64-byte OTP (variant dependent) | ❌ Different |
| AEC-Q100 automotive | W25Q128JV-DTR (separate SKU) | MX25L12833F (separate SKU) | ⚠️ Requires separate SKU |
| Operating temperature (standard) | -40°C to +85°C | -40°C to +85°C | ✅ Identical |
| Package footprint (SOIC-8) | 5.27mm × 5.18mm | 5.27mm × 5.18mm | ✅ Pin-compatible |
| Pinout | CS#, DO, WP#, GND, DI, CLK, HOLD#, VCC | CS#, SO, WP#, VSS, SI, SCLK, HOLD#, VCC | ✅ Pin-for-pin compatible |
Summary: The hardware is almost perfectly compatible. The software is where problems appear.
3.0 Hardware Compatibility: Pinout, Package, and Electrical
The good news for PCB designers: the W25Q128 and MX25L12835F are pin-for-pin compatible in the same package. Standard 8-pin SOIC (JEDEC MS-012), WSON 6×5mm, and WSON 8×6mm footprints are shared across both families. You can place either part on the same PCB without any layout change.
Both operate from 2.7V to 3.6V with identical standby and active power profiles. Both support the same 4-wire SPI, 6-wire Dual SPI, and 6-wire Quad SPI physical interfaces. Both have WP# (Write Protect) and HOLD# (or RESET on JV) pins with the same logic polarity.
One hardware detail to verify: The W25Q128JV has a dedicated /RESET pin when the HOLD/RST bit in the Status Register is configured accordingly, while the MX25L12835F uses the HOLD# pin for hold only (no hardware reset pin). If your design uses the hardware reset function of the Winbond part, verify that the Macronix part's HOLD# pin behavior meets your requirement.
4.0 Performance: Where the Real Differences Are
Both parts run at 133 MHz maximum for standard SPI and Dual SPI reads. However, the Quad mode performance picture is more nuanced.
Winbond W25Q128JV Quad modes:
- Quad SPI (QSPI/QIO): Uses the standard JEDEC QSPI protocol. QE bit in Status Register-2 enables quad mode. Max frequency: 133 MHz → 532 Mbps effective throughput (133MHz × 4 data lines).
- QPI mode: All-quad command mode where even the instruction and address phases use 4 I/O lines. Enabled by issuing the Enter QPI (38h) command. Max frequency: 80 MHz in QPI mode.
- DTR (Double Transfer Rate): W25Q128JV supports DTR on both Dual and Quad reads, latching data on both rising and falling clock edges. This doubles effective bandwidth without increasing clock frequency.
Macronix MX25L12835F Quad modes:
- MXSMIO (Serial Multi I/O): Macronix's proprietary branding for their Quad I/O implementation. Functionally equivalent to JEDEC Quad SPI — uses the same 6 pins (CLK, CS#, IO0–IO3). Max frequency: 104 MHz in standard variants (some sub-variants reach 133 MHz — verify the specific ordering suffix).
- QPI equivalent: The MX25L12845E supports DTR high-performance read mode; the MX25L12835F supports standard Quad I/O but with slightly different command sequences.
- No QPI mode on 12835F: The MX25L12835F does not support Winbond's QPI "all-quad" command mode. If your firmware uses the 38h Enter QPI command and expects QPI mode behavior, it will not work on the MX25L12835F.
Erase performance:
| Operation | W25Q128JV | MX25L12835F |
|---|---|---|
| Page program (256B) | 700 µs typical | 1.4 ms typical |
| Sector erase (4KB) | 45 ms typical | 60 ms typical |
| Block erase (64KB) | 150 ms typical | 700 ms typical |
| Chip erase | 200 s typical | 80 s typical |
The Winbond part has a faster block erase and much faster chip erase. The Macronix part has a faster chip erase. For most applications these differences are irrelevant — erase operations happen infrequently. But if your firmware performs frequent 64KB block erases as part of a wear-leveled storage system, the 4.7× difference in block erase time (150 ms vs 700 ms) can affect real-time performance.
5.0 Software Compatibility: Where Most Swaps Break
This is where engineers get burned. The hardware swap takes five minutes; the software investigation takes hours.
The Quad Enable bit is in a different register.
On Winbond W25Q128: enabling Quad SPI requires setting the QE bit (bit 1) in Status Register-2. Your firmware writes to SR2 using the WRSR2 command (31h) or the two-byte WRSR command (01h followed by two bytes).
On Macronix MX25L12835F: enabling Quad SPI requires setting the QE bit (bit 6) in the Configuration Register. Your firmware writes to the Configuration Register using WRCR (01h + SR1 byte + Config byte).
These are completely different register locations with different write commands. A driver written for Winbond that directly writes to SR2 to enable Quad mode will fail silently on Macronix — the write will go to the wrong register, Quad mode will not be enabled, and reads will time out or return garbage data.
Most popular SPI flash libraries (SPIFlash library for Arduino, ESP-IDF's esp_flash component, STM32's QSPI HAL driver) handle this by detecting the JEDEC manufacturer ID and applying the correct register map. This detection relies on reading the RDID (9Fh) command:
- Winbond response: EF 40 18 (manufacturer 0xEF, device type 0x40, capacity 0x18 for 128Mbit)
- Macronix response: C2 20 18 (manufacturer 0xC2, device type 0x20, capacity 0x18 for 128Mbit)
If your firmware hardcodes the expected JEDEC ID value instead of using a lookup table, it will fail the identification check and refuse to initialize the Macronix part. This is the most common cause of "the substitute part doesn't work at all" reports.
6.0 ⚠️ Five Differences That Will Break Your Design If You Ignore Them
Pitfall 1: Hardcoded JEDEC ID check in firmware The most common failure mode. A firmware initialization function reads the JEDEC manufacturer ID and compares it against an expected value of 0xEF (Winbond). The Macronix part returns 0xC2, the check fails, and the driver returns an error — often silently, leaving the application with no storage and no obvious error message. Fix: update your flash driver to use a manufacturer lookup table that includes both 0xEF (Winbond) and 0xC2 (Macronix) with the appropriate register map for each.
Pitfall 2: Quad Enable bit location mismatch breaks QSPI As described in Section 5: Winbond's QE bit is in Status Register-2; Macronix's QE bit is in the Configuration Register. Any driver that writes QE without checking the manufacturer ID first will misconfigure the replacement part. Symptom: firmware initializes without errors, standard SPI reads work fine, but switching to Quad SPI mode causes read failures or bus hangs. Fix: manufacturer-conditional QE enable logic in the driver.
Pitfall 3: QPI mode commands are not supported on MX25L12835F Winbond's QPI mode (entered via command 38h, exited via FFh) puts the device into an all-quad command mode for maximum throughput. The MX25L12835F does not have an equivalent QPI mode. If your firmware issues the Enter QPI (38h) command to the Macronix part, the device will interpret it as an undefined command, ignore it, and remain in standard SPI mode — causing all subsequent QPI-format commands to produce garbage. Symptom: intermittent data corruption after initialization completes. Fix: never issue QPI mode commands unless the manufacturer ID confirms Winbond silicon.
Pitfall 4: Block erase time differences can violate real-time deadlines The W25Q128JV typical 64KB block erase is 150 ms. The MX25L12835F typical 64KB block erase is 700 ms — 4.7× longer. If your firmware has a watchdog timer set to 500 ms or a real-time task that must complete within 300 ms, this difference will cause watchdog resets or task deadline violations after the component swap. The failure is timing-dependent and may not appear in all usage patterns, making it difficult to diagnose. Fix: use the maximum erase time from the datasheet (not typical) when sizing watchdog timeouts, and ensure the flash driver runs erase operations asynchronously with status polling.
Pitfall 5: Security register capacity and OTP behavior differ The W25Q128JV has three 256-byte security registers (OTP areas) that can be individually locked. The MX25L12835F has a different OTP architecture with smaller per-register capacity. If your application stores a device certificate, a unique device key, or a manufacturer-locked serial number in the Winbond security registers and then tries to replicate this on Macronix, the available OTP space and the lock/read commands differ. Fix: do not use manufacturer-specific OTP features in production if you need interchangeability. Store device identity information in a designated area of the main flash array with application-layer protection instead.
7.0 When to Choose W25Q128, When to Choose MX25L128
Choose W25Q128JV (Winbond) when:
- Your firmware uses QPI mode (38h command) for maximum throughput — Macronix does not support this
- You use the W25Q128's security registers for OTP device identity storage and need the 3× 256-byte layout
- Your driver relies on Winbond-specific status register layout without manufacturer detection
- You need the W25Q128JV-DTR automotive AEC-Q100 variant specifically, or the wider ecosystem of Winbond-compatible SPI flash libraries
- Supply is constrained and you are sourcing the original W25Q128FV already validated in your design
Choose MX25L12835F (Macronix) when:
- W25Q128 is on allocation and you need a production alternative — provided you have updated the driver's manufacturer detection
- Your application runs at 104 MHz Quad SPI or below — the Macronix part performs identically at these frequencies
- You need the faster chip erase time (80 s vs 200 s) for factory programming throughput
- Your BOM already includes other Macronix parts and supply consolidation simplifies procurement
- Your driver already uses the JEDEC SFDP (Serial Flash Discoverable Parameters) protocol, which both parts support and which abstracts all manufacturer differences automatically
When NOT to substitute either one for the other without firmware changes:
- Any design using QPI mode commands (38h/FFh)
- Any firmware with hardcoded JEDEC ID validation
- Any application using security registers for OTP key storage
- Any system with watchdog timers or real-time constraints tuned to Winbond-specific erase timing
8.0 Sourcing, Pricing, and Authenticity
Both the W25Q128 and MX25L12835F are high-volume parts with generally good availability through authorized distributors. Typical pricing is $0.80–$1.50 per unit at 1,000-piece quantities, with MX25L12835F typically priced slightly below W25Q128JV in most market conditions.
Authorized distributors: DigiKey, Mouser, Arrow, Avnet, and LCSC all stock both families from their respective manufacturers. At these channels you can verify the manufacturer (Winbond or Macronix), date code, and country of origin.
Counterfeit risk: Both Winbond and Macronix 128Mbit parts are frequently counterfeited in the secondary market — typically as lower-capacity devices (64Mbit or 32Mbit) with remarked package markings. The most reliable field verification is reading the JEDEC ID (RDID command 9Fh) and comparing the response against the expected manufacturer/device/capacity bytes. A remarked 64Mbit device will return a capacity byte of 0x17 instead of 0x18.
For verified authentic Winbond W25Q128 and Macronix MX25L12835F inventory with full traceability and competitive pricing, visit aichiplink.com.
9.0 Quick Reference Card
Can I swap them without touching my firmware?
| Condition | Safe Swap? |
|---|---|
| Standard SPI reads/writes only | ✅ Yes |
| Dual SPI reads only | ✅ Yes |
| Quad SPI with JEDEC SFDP detection | ✅ Yes |
| Quad SPI with manufacturer-conditional QE code | ✅ Yes |
| Quad SPI with hardcoded QE register write | ❌ No — update QE enable code |
| QPI mode (38h command) used | ❌ No — QPI not supported on MX25L12835F |
| Firmware checks JEDEC ID | ❌ No — add MX ID (0xC2) to lookup table |
| Security registers used for OTP | ❌ No — register layout differs |
| Watchdog < 3.5 s during erase | ⚠️ Verify — MX max block erase = 3.5 s |
JEDEC IDs:
| Manufacturer | RDID Response (9Fh command) |
|---|---|
| Winbond W25Q128JV | EF 40 18 |
| Winbond W25Q128FV | EF 40 18 |
| Macronix MX25L12835F | C2 20 18 |
| Macronix MX25L12845E | C2 26 18 |
| Macronix MX25L12805D | C2 20 18 |
Erase Timing Quick Reference:
| Operation | W25Q128JV (typical/max) | MX25L12835F (typical/max) |
|---|---|---|
| Page program (256B) | 0.7 ms / 3 ms | 1.4 ms / 5 ms |
| Sector erase (4KB) | 45 ms / 400 ms | 60 ms / 300 ms |
| Block erase (64KB) | 150 ms / 800 ms | 700 ms / 3,500 ms |
| Chip erase | 200 s / 400 s | 80 s / 200 s |
For sourcing W25Q128JV, W25Q128FV, MX25L12835F, and MX25L12845E with verified authenticity and competitive pricing, 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
Why do Quad SPI reads return 0xFF after swapping W25Q128 with MX25L12835F?
The QE (Quad Enable) bit is set differently—your driver used a Winbond-specific command, so on Macronix the QE bit remains 0, causing the data lines to float and return 0xFF; fix by enabling QE using the correct manufacturer-specific register sequence.
Why does my ESP32 project hang during flash writes after switching to MX25L12835F?
The MX25L12835F has longer erase times (up to 3.5s) than Winbond, causing timeout issues in ESP-IDF—adjust flash timeout settings to match the slower erase timing.
Can I design one PCB and firmware for both W25Q128 and MX25L12835F?
Yes—use a shared footprint and detect the JEDEC ID at startup, then apply manufacturer-specific initialization (especially QE handling) so one firmware works for both.
Are Winbond and Macronix 100K P/E cycle ratings equivalent in practice?
Yes—in real-world use their endurance is comparable, and for most applications the difference is negligible unless you approach extreme write-cycle limits.
Can MX25L12845E replace W25Q128JV-DTR in BIOS chips?
Hardware-wise yes, but BIOS firmware often depends on manufacturer-specific behavior, so substitution may require firmware modification or full flash cloning.




