AgentSkillsCN

atmel

适用于处理 Atmel/Microchip AVR 的 MPN 编码规则、后缀解码及处理器引导。当您需要对接 ATmega、ATtiny、SAM,或其他 Atmel 元件时,可选用此技能。

SKILL.md
--- frontmatter
name: atmel
description: Atmel/Microchip AVR MPN encoding patterns, suffix decoding, and handler guidance. Use when working with ATmega, ATtiny, SAM, or other Atmel components.

Atmel (now Microchip) Manufacturer Skill

MPN Structure

Atmel MPNs follow this general structure:

code
[FAMILY][SERIES][VARIANT]-[PACKAGE][TEMP]
   │       │        │         │      │
   │       │        │         │      └── Optional temperature grade
   │       │        │         └── Package code (after hyphen)
   │       │        └── Feature variant (P=picopower, A=automotive, etc.)
   │       └── Series number (flash size, pin count encoded)
   └── Product family (ATMEGA, ATTINY, ATSAM, etc.)

Example Decoding

code
ATMEGA328P-PU
│     │  │  ││
│     │  │  │└── (no temp suffix = commercial)
│     │  │  └── U in PU = standard grade
│     │  └── P = picoPower technology
│     └── 328 = 32KB flash, 8-bit
└── ATMEGA = AVR 8-bit megaAVR family

ATSAM3X8E-AU
│    │ ││  ││
│    │ ││  │└── U = standard grade
│    │ ││  └── A = TQFP package
│    │ │└── E = Ethernet variant
│    │ └── 8 = 512KB flash
│    └── 3X = Cortex-M3 SAM3X series
└── ATSAM = ARM-based SAM family

Package Codes (After Hyphen)

CodePackageDescription
PUPDIPPlastic Dual In-line Package (through-hole)
AUTQFPThin Quad Flat Pack (surface mount)
MUQFN/MLFQuad Flat No-leads / Micro Lead Frame
SUSOICSmall Outline IC
XUTSSOPThin Shrink Small Outline Package
TUQFPQuad Flat Pack (larger than TQFP)
CUWLCSP/UCSPWafer Level / Ultra Chip Scale Package
SSSSOPShrink Small Outline Package

Package Code Pattern

code
[PACKAGE_TYPE][GRADE]
      │          │
      │          └── U = Standard, C = Commercial, I = Industrial
      └── P=PDIP, A=TQFP, M=QFN, S=SOIC, X=TSSOP, T=QFP, C=WLCSP

Product Families

8-bit AVR Microcontrollers

FamilyDescriptionExample
ATmegaFeature-rich 8-bitATMEGA328P, ATMEGA2560
ATtinySmall footprint 8-bitATTINY85, ATTINY13A
AT90USB/CAN enabledAT90USB162, AT90CAN128
ATxmegaExtended 8/16-bitATXMEGA128A1U

32-bit ARM Microcontrollers

FamilyCoreExample
ATSAM3Cortex-M3ATSAM3X8E (Arduino Due)
ATSAM4Cortex-M4ATSAM4S16B
ATSAMDCortex-M0+ATSAMD21G18A
ATSAMECortex-M7ATSAME70Q21

Memory Products

FamilyTypeExample
AT24CI2C EEPROMAT24C256-PU (256Kbit)
AT25SPI EEPROM/FlashAT25SF041 (4Mbit Flash)
AT45DBDataFlashAT45DB321E

Security/Touch Products

FamilyTypeExample
ATECCCrypto AuthenticationATECC608A
ATSHASHA AuthenticationATSHA204A
AT42QTQTouch ControllerAT42QT1010
ATMXTmaXTouch ControllerATMXT336S

Series Number Encoding

ATmega Series Numbers

The number encodes flash size and sometimes pin count:

SeriesFlashSRAMEEPROMNotes
ATMEGA88KB1KB512BOriginal
ATMEGA888KB1KB512BImproved
ATMEGA16816KB1KB512BPin-compatible with 88
ATMEGA32832KB2KB1KBArduino Uno
ATMEGA1284128KB16KB4KBHigh memory
ATMEGA2560256KB8KB4KBArduino Mega

ATtiny Series Numbers

SeriesFlashPinsNotes
ATTINY131KB8Smallest
ATTINY252KB8
ATTINY454KB8
ATTINY858KB8Popular small MCU
ATTINY848KB14More I/O
ATTINY23132KB20UART included

Variant Suffixes (Before Hyphen)

SuffixMeaning
PpicoPower - Ultra low power modes
ARevision A / Automotive grade
VLow voltage operation (1.8V-5.5V)
PApicoPower + Automotive
PBpicoPower revision B
UUSB capable
LLow voltage (1.8V-3.6V only)

Example Variants

code
ATMEGA328    → Original
ATMEGA328P   → picoPower (lower sleep current)
ATMEGA328PB  → picoPower revision B (more features)
ATMEGA328PA  → Automotive grade picoPower

Temperature Grades

GradeRangeSuffix Position
Commercial0°C to +70°C(no suffix)
Industrial-40°C to +85°COften implicit
Automotive-40°C to +125°CA in variant or separate

Common Arduino Mappings

Arduino BoardMCUFull MPN
UnoATmega328PATMEGA328P-PU
NanoATmega328PATMEGA328P-AU
Mega 2560ATmega2560ATMEGA2560-16AU
LeonardoATmega32U4ATMEGA32U4-AU
DueATSAM3X8EATSAM3X8E-AU
ZeroATSAMD21G18AATSAMD21G18A-AU

Handler Implementation Notes

Package Code Extraction

java
// Atmel package codes are AFTER the hyphen
// ATMEGA328P-PU → package = "PU"

String[] parts = mpn.split("-");
if (parts.length > 1) {
    String suffix = parts[parts.length - 1];
    return switch (suffix) {
        case "PU" -> "PDIP";
        case "AU" -> "TQFP";
        case "MU" -> "QFN/MLF";
        case "SU" -> "SOIC";
        case "XU" -> "TSSOP";
        case "TU" -> "QFP";
        case "CU" -> "WLCSP";
        default -> suffix;
    };
}

Series Extraction

java
// Extract family + number, stop at variant letter or hyphen
// ATMEGA328P-PU → series = "ATMEGA328"
// ATTINY85-20PU → series = "ATTINY85"

if (mpn.startsWith("ATMEGA")) {
    // Find end of digits after "ATMEGA"
    int end = "ATMEGA".length();
    while (end < mpn.length() && Character.isDigit(mpn.charAt(end))) {
        end++;
    }
    return mpn.substring(0, end);
}

Pattern Matching

java
// ATmega: ATMEGA + digits + optional letter variant + optional -package
"^ATMEGA[0-9]+[A-Z]?(?:-[A-Z]{2,4})?$"

// ATtiny: ATTINY + digits + optional variant + optional -package
"^ATTINY[0-9]+[A-Z]?(?:-[A-Z]{2,4})?$"

// SAM: ATSAM + series + variant + -package
"^ATSAM[A-Z0-9]+(?:-[A-Z]{2,4})?$"

Pin Compatibility Groups

28-pin PDIP/TQFP Compatible

  • ATMEGA8 / ATMEGA88 / ATMEGA168 / ATMEGA328
  • Direct drop-in replacements (different flash sizes)

8-pin DIP/SOIC Compatible

  • ATTINY13 / ATTINY25 / ATTINY45 / ATTINY85
  • Increasing flash sizes, same pinout

44-pin TQFP Compatible

  • ATMEGA16 / ATMEGA32 / ATMEGA644 / ATMEGA1284

Related Files

  • Handler: manufacturers/AtmelHandler.java
  • Component types: MICROCONTROLLER_ATMEL, MCU_ATMEL, MEMORY_ATMEL, TOUCH_ATMEL, CRYPTO_ATMEL
  • Package registry: PackageCodeRegistry.java (Atmel-specific codes: PU, AU, MU, SU, XU, CU)

Learnings & Edge Cases

  • Microchip acquisition: Atmel was acquired by Microchip in 2016. New parts may have Microchip branding but same MPN structure
  • Speed grades: Some parts have speed suffix before package (e.g., ATMEGA328P-20AU = 20MHz max)
  • PU vs AU: Same chip, different package. PU=DIP for prototyping, AU=TQFP for production
  • P suffix importance: ATMEGA328 and ATMEGA328P are different! The P version has lower power consumption
  • Memory in name: ATmega328 has 32KB flash (32), ATtiny85 has 8KB (8), but encoding isn't always consistent

Handler Cleanup Notes (TODO)

AtmelHandler needs the same cleanup as TIHandler (PR #77):

  • Replace HashSet with Set.of() in getSupportedTypes()
  • Handler doesn't use PackageCodeRegistry - has local switch statement
  • Pattern may not handle speed grades like -20AU (20MHz before package)
  • Case sensitivity - some methods use mpn.startsWith() without toUpperCase()

Test Notes

When creating AtmelHandlerTest:

  • Put in no.cantara.electronic.component.lib.handlers package (NOT manufacturers)
  • Use @BeforeAll with MPNUtils.getManufacturerHandler("ATMEGA328P")
  • Test categories: ATmega, ATtiny, AT90, XMEGA, SAM, Memory (AT24C, AT25), Touch (AT42QT), Crypto (ATECC, ATSHA)
<!-- Add new learnings above this line -->