Spansion (now Infineon) MPN encoding patterns for Flash memory and MCUs. Use when working with Spansion components or SpansionHandler.
Spansion was a leading manufacturer of Flash memory and microcontrollers, formed as a joint venture between AMD and Fujitsu in 2003. The company specialized in:
Acquisition History:
Spansion MPNs follow product-family-specific structures:
[PREFIX][FAMILY][DENSITY][SPEED][CONFIG][PACKAGE]
│ │ │ │ │ │
│ │ │ │ │ └── Package code (F, T, V, S, W, N, L, P)
│ │ │ │ └── Configuration/feature code
│ │ │ └── Speed grade
│ │ └── Memory density (128=128Mbit, 256=256Mbit)
│ └── Memory family (FL=Serial, GL=Parallel)
└── S = Spansion prefix
[PREFIX][FAMILY][DENSITY][CONFIG][PACKAGE]
│ │ │ │ │
│ │ │ │ └── Package code
│ │ │ └── Configuration
│ │ └── Density in Gbits
│ └── ML = Multi-Level/Single-Level NAND
└── S34/S35 = NAND prefix
[PREFIX][FAMILY][VARIANT][SIZE][PACKAGE]
│ │ │ │ │
│ │ │ │ └── Package code
│ │ │ └── Flash/RAM size indicator
│ │ └── Feature variant (A, B, etc.)
│ └── Family letter
└── MB9 = FM MCU prefix
| Pattern | Family | Description |
|---|---|---|
| S29AL | Parallel NOR | Low-density parallel NOR |
| S29GL | Parallel NOR | High-density parallel NOR (GL=GLUE Logic) |
| S25FL | Serial NOR | Standard serial NOR (SPI) |
| S25FS | Serial NOR | High-performance serial NOR |
| Pattern | Family | Description |
|---|---|---|
| S34ML | SLC NAND | Single-Level Cell NAND (higher endurance) |
| S35ML | MLC NAND | Multi-Level Cell NAND (higher density) |
| Pattern | Family | Core | Description |
|---|---|---|---|
| MB9AF | FM3 | ARM Cortex-M3 | General purpose MCU |
| MB9BF | FM4 | ARM Cortex-M4 | High performance MCU |
| Pattern | Type | Description |
|---|---|---|
| GL850 | USB Hub | USB 2.0 Hub Controller |
| FL1K | USB Controller | USB Flash Controller |
| Code | Package | Description |
|---|---|---|
| F | FBGA | Fine-pitch Ball Grid Array |
| T | TSOP | Thin Small Outline Package |
| V | VFBGA | Very Fine-pitch BGA |
| S | SO | Small Outline (SOIC) |
| W | WSON | Very thin plastic quad flat no-lead |
| N | PBGA | Plastic Ball Grid Array |
| L | PLCC | Plastic Leaded Chip Carrier |
| P | PDIP | Plastic Dual In-line Package |
S25FL128SAGMFI00
│ │ │ │ │ │ │
│ │ │ │ │ │ └── 00 = Ordering code
│ │ │ │ │ └── I = Industrial temperature (-40 to +85C)
│ │ │ │ └── F = FBGA package
│ │ │ └── SAGM = Product variant (Speed/Config)
│ │ └── 128 = 128 Mbit density
│ └── FL = Serial Flash family
└── S25 = Spansion serial NOR prefix
S29GL128P90TFI01
│ │ │ │ │ │ │
│ │ │ │ │ │ └── 01 = Ordering variant
│ │ │ │ │ └── I = Industrial temperature
│ │ │ │ └── TF = TSOP/FBGA package variant
│ │ │ └── 90 = 90ns access time
│ │ └── 128P = 128 Mbit, P variant
│ └── GL = Parallel (GLUE Logic) Flash family
└── S29 = Spansion parallel NOR prefix
S34ML01G200TFI00
│ │ │ │ │ │
│ │ │ │ │ └── 00 = Ordering code
│ │ │ │ └── TFI = Package + temperature
│ │ │ └── 200 = Page size variant
│ │ └── 01G = 1 Gbit density
│ └── ML = SLC NAND
└── S34 = Spansion NAND prefix
MB9AF314NPMC
│ │ │ │ │ │
│ │ │ │ │ └── C = Variant
│ │ │ │ └── PM = Package code
│ │ │ └── N = Configuration
│ │ └── 314 = Series number
│ └── AF = FM3 ARM Cortex-M3 family
└── MB9 = Spansion MCU prefix
The handler extracts series based on prefix patterns:
| Prefix | Series Extraction | Example |
|---|---|---|
| S29xxx | First 4 characters | S29GL128P → "S29G" |
| S25xxx | First 4 characters | S25FL128S → "S25F" |
| S34xxx | First 5 characters | S34ML01G → "S34ML" |
| S35xxx | First 5 characters | S35ML02G → "S35ML" |
| MB9xxx | MB9 + following letters | MB9AF314 → "MB9AF" |
The handler implements isOfficialReplacement() to determine if two parts are compatible replacements:
Two Flash parts are considered replacements if:
// Example: S25FL128SAGMFI00 ≈ S25FL128LAGMFI01
// Both are 128Mbit S25FL, different variant letters
Two MCUs are considered replacements if:
getSupportedTypes() returns:
- ComponentType.MEMORY // Base memory type
- ComponentType.MEMORY_FLASH // Flash-specific type
- ComponentType.MICROCONTROLLER // FM3/FM4 MCUs
Note: The handler also registers patterns for ComponentType.IC (USB controllers) but does not include it in getSupportedTypes(). This is a known inconsistency.
// NOR Flash
registry.addPattern(ComponentType.MEMORY, "^S29[A-Z][A-Z].*"); // Parallel NOR
registry.addPattern(ComponentType.MEMORY, "^S25FL.*"); // Serial NOR
registry.addPattern(ComponentType.MEMORY, "^S25FS.*"); // High-perf Serial
// NAND Flash
registry.addPattern(ComponentType.MEMORY, "^S34ML.*"); // SLC NAND
registry.addPattern(ComponentType.MEMORY, "^S35ML.*"); // MLC NAND
// Microcontrollers
registry.addPattern(ComponentType.MICROCONTROLLER, "^MB9[A-Z].*"); // FM3
registry.addPattern(ComponentType.MICROCONTROLLER, "^MB9B.*"); // FM4
// Interface ICs
registry.addPattern(ComponentType.IC, "^GL850.*"); // USB Hub
registry.addPattern(ComponentType.IC, "^FL1K.*"); // USB Flash
// Extracts suffix after alphanumeric base
String suffix = mpn.replaceAll("^[A-Z0-9]+", "");
// Maps single letter to package name
switch (suffix) {
case "F" -> "FBGA";
case "T" -> "TSOP";
case "V" -> "VFBGA";
case "S" -> "SO";
case "W" -> "WSON";
case "N" -> "PBGA";
case "L" -> "PLCC";
case "P" -> "PDIP";
default -> suffix; // Return as-is if unknown
}
Known Issue: The regex ^[A-Z0-9]+ removes all leading alphanumerics, which may not correctly isolate the package suffix in complex MPNs like "S25FL128SAGMFI00" where "00" is returned, not the package code embedded in the middle.
| Part Number | Density | Bytes |
|---|---|---|
| S25FL016 | 16 Mbit | 2 MB |
| S25FL032 | 32 Mbit | 4 MB |
| S25FL064 | 64 Mbit | 8 MB |
| S25FL128 | 128 Mbit | 16 MB |
| S25FL256 | 256 Mbit | 32 MB |
| S25FL512 | 512 Mbit | 64 MB |
| Part Number | Density | Bytes |
|---|---|---|
| S34ML01G | 1 Gbit | 128 MB |
| S34ML02G | 2 Gbit | 256 MB |
| S34ML04G | 4 Gbit | 512 MB |
Since Spansion is now part of Infineon, many parts have Infineon equivalents:
| Spansion Part | Infineon Equivalent | Notes |
|---|---|---|
| S25FL128S | S25FL128SAGMFIG03 | Same part, different suffix |
| MB9AF314N | - | Obsolete, no direct replacement |
| S34ML01G2 | - | End of life |
manufacturers/SpansionHandler.javaMEMORY, MEMORY_FLASH, MICROCONTROLLERComponentType.IC but IC is not in getSupportedTypes() - this is a handler bug.extractPackageCode() method uses a regex that strips too much, returning incorrect suffixes for complex MPNs.HashSet instead of immutable Set.of() - should be fixed for consistency with other handlers.