Lib-electronic-components similarity-memory

Use when working with memory IC similarity calculations - comparing EEPROM/Flash MPNs, understanding I2C/SPI interface matching, equivalent groups across manufacturers, or memory-specific similarity logic.

install
source · Clone the upstream repo
git clone https://github.com/Cantara/lib-electronic-components
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/Cantara/lib-electronic-components "$T" && mkdir -p ~/.claude/skills && cp -r "$T/.claude/skills/similarity-memory" ~/.claude/skills/cantara-lib-electronic-components-similarity-memory && rm -rf "$T"
manifest: .claude/skills/similarity-memory/SKILL.md
source content

Memory Similarity Calculator Skill

Guidance for working with

MemorySimilarityCalculator
in the lib-electronic-components library.


For metadata-driven similarity architecture, see

/similarity-metadata
:

  • SpecImportance levels (CRITICAL, HIGH, MEDIUM, LOW, OPTIONAL)
  • ToleranceRule types (exactMatch, percentageTolerance, minimumRequired, etc.)
  • SimilarityProfile contexts (DESIGN_PHASE, REPLACEMENT, COST_OPTIMIZATION, etc.)
  • Calculator integration patterns and gotchas

Overview

The

MemorySimilarityCalculator
compares memory ICs based on:

  • Equivalent groups - Cross-manufacturer equivalents
  • Memory type - EEPROM, Flash, etc.
  • Interface - I2C, SPI
  • Capacity - Must match for high similarity
  • Voltage range - Operating voltage compatibility

Applicable Types

ComponentType.MEMORY
// Any type starting with "MEMORY_"
// Returns true for null to handle unrecognized memory devices

Similarity Thresholds

HIGH_SIMILARITY = 0.9;   // Equivalent parts
MEDIUM_SIMILARITY = 0.7; // Same type/interface, close specs
LOW_SIMILARITY = 0.3;    // Different capacity or interface

I2C EEPROM Equivalents

CapacityEquivalent Parts
256Kbit24LC256, AT24C256, M24C256, CAT24C256
512Kbit24LC512, AT24C512, M24C512, CAT24C512
1Mbit24LC1024, AT24C1024, M24C1024
calculator.calculateSimilarity("24LC256", "AT24C256", registry);
// Returns >= 0.7 (equivalent I2C EEPROMs)

SPI EEPROM Equivalents

CapacityEquivalent Parts
256Kbit25LC256, 25AA256, AT25256, M95256
512Kbit25LC512, 25AA512, AT25512, M95512

SPI Flash Equivalents

CapacityEquivalent Parts
32MbitW25Q32JV, W25Q32FW, MX25L3233F, S25FL032P, IS25LP032
64MbitW25Q64JV, W25Q64FW, MX25L6433F, S25FL064P, IS25LP064
128MbitW25Q128JV, W25Q128FW, MX25L12833F, S25FL128, IS25LP128
calculator.calculateSimilarity("W25Q32JV", "MX25L3233F", registry);
// Returns >= 0.3 (same capacity SPI Flash)

Interface Rules

I2C and SPI memory have lower similarity due to different interfaces:

calculator.calculateSimilarity("24LC256", "25LC256", registry);
// Returns <= 0.7 (same capacity, different interface)

Capacity Rules

Different capacities return LOW_SIMILARITY:

calculator.calculateSimilarity("W25Q32JV", "W25Q128JV", registry);
// Returns 0.3 (same family, different size)

Package Handling

Package codes don't significantly affect similarity for memory:

  • Same memory, different package = HIGH_SIMILARITY (0.9)
  • Same memory, compatible package = HIGH_SIMILARITY (0.9)
  • Same memory, different package type = ~0.8

Manufacturer Prefixes

PrefixManufacturerType
24LCMicrochipI2C EEPROM
AT24CAtmel/MicrochipI2C EEPROM
M24CSTI2C EEPROM
CAT24CON SemiI2C EEPROM
25LC/25AAMicrochipSPI EEPROM
AT25Atmel/MicrochipSPI EEPROM
M95STSPI EEPROM
W25QWinbondSPI Flash
MX25LMacronixSPI Flash
S25FLSpansion/CypressSPI Flash
IS25LPISSISPI Flash

Test Examples

// Same I2C EEPROM
calculator.calculateSimilarity("24LC256", "24LC256", registry);
// Returns 1.0

// Cross-manufacturer I2C EEPROM
calculator.calculateSimilarity("24LC256", "AT24C256", registry);
// Returns >= 0.7

// Same Flash, different manufacturer
calculator.calculateSimilarity("W25Q64JV", "MX25L6433F", registry);
// Returns >= 0.3

// Different capacity
calculator.calculateSimilarity("24LC256", "24LC512", registry);
// Returns 0.3

Metadata-Driven Implementation (January 2026)

Status: ✅ Converted (PR #117)

The

MemorySimilarityCalculator
now uses a metadata-driven approach with spec-based comparison.

Specs Compared

SpecImportanceTolerance RuleDescription
memoryTypeCRITICALexactMatchEEPROM, Flash, SRAM, etc.
capacityCRITICALexactMatch256Kbit, 512Kbit, 1Mbit, etc.
interfaceHIGHexactMatchI2C, SPI, Parallel
packageLOWexactMatchSOIC, DIP, TSSOP, etc.

Implementation Pattern

// Short-circuit check for CRITICAL incompatibility
if (!memoryType1.isEmpty() && !memoryType2.isEmpty() && !memoryType1.equals(memoryType2)) {
    return LOW_SIMILARITY;
}
if (!capacity1.isEmpty() && !capacity2.isEmpty() && !capacity1.equals(capacity2)) {
    return LOW_SIMILARITY;
}

// Weighted spec scoring
// memoryType: CRITICAL (1.0 weight)
// capacity: CRITICAL (1.0 weight)
// interface: HIGH (0.7 weight)
// package: LOW (0.2 weight)

Behavior Changes

ComparisonLegacy ResultMetadata ResultNotes
24LC256 vs 24LC2561.01.0Identical
24LC256 vs AT24C2560.7+0.85Equivalent I2C EEPROM
W25Q32JV vs MX25L3233F0.3+0.61Same capacity Flash
24LC256 vs 24LC5120.30.3Short-circuit on capacity
W25Q32JVSSIQ vs W25Q32JVSFIQ0.7+0.93Same Flash, different package

Why more accurate: Metadata approach prioritizes capacity and type matching, with interface as secondary concern.


Learnings & Quirks

Part Number Patterns

  • 24xx
    = I2C interface,
    25xx
    = SPI interface
  • C
    often indicates CMOS
  • Capacity in Kbits: 256 = 32KB, 512 = 64KB, 1024 = 128KB

Revision Suffixes

  • JV
    ,
    FW
    ,
    JW
    on Winbond = package/voltage variants
  • A
    ,
    B
    ,
    C
    suffixes = revisions (usually compatible)

Voltage Compatibility

  • Standard: 2.7V-5.5V
  • Low voltage: 1.7V-3.6V (check compatibility)
<!-- Add new learnings above this line -->