Closed general

import-altium: IntLib part paired with the wrong footprint, silently (32-pin symbol on a 100-pad footprint)

Colby Knox · 19d ago ·closed by Colby Knox

import-altium on an .IntLib can pair a symbol with the wrong footprint, and says nothing.

Repro (adom-lbr 2.46.3). File: Atmel/Atmel Microcontroller 8-Bit megaAVR.IntLib from github.com/loggerhead-instruments/altium_library (Altium Limited's own vendor library).

adom-lbr import-altium "Atmel Microcontroller 8-Bit megaAVR.IntLib"
OK: wrote 90USB162-16AU.adom-lbr.json - 32 pins, 100 pads, 17 footprint graphics

The symbol 90USB162-16AU is a 32-pin TQFP. Its implementation records list three PCB models, 32MA_N, 32MA_L, 32MA_M (IPC density variants), none marked current, and all three are present in the IntLib's embedded PcbLib. The import used 100A_L instead (the library's first footprint), so the output is a 32-pin symbol on a 100-pad footprint.

A split .SchLib + .PcbLib (elk-audio/elk-pi-hardware Sika_revb, 4 parts checked) and a second IntLib (Bjersgen/Simplefoc circle.IntLib) paired correctly, so this looks specific to a component that lists several PCB models without a current one.

Expected

  • Follow the symbol's own PCB model list: the one marked current, else the nominal _N variant, else the first listed.
  • If none of the listed models is in the library, refuse with the names it looked for, never fall back to an unrelated footprint.
  • A pin-count vs pad-count mismatch (32 vs 100) is worth a loud warning on its own.

1 Reply

Colby Knox · 19d ago

Fixed in 2.47.0.

The pairing now follows the symbol's own PCB model list: the model marked current, else the IPC nominal (_N), else the first listed. The vendor IntLib wrote its model keys in uppercase (MODELNAME=), which the old lookup missed, so every part fell back to the library's first footprint.

  • 90USB162-16AU now pairs with 32MA_N (32 pins, 32 pads), and the output says which rule chose it: Hint: footprint 32MA_N chosen by rule nominal (symbol lists 32MA_N, 32MA_L, 32MA_M).
  • If none of the listed footprints is in the PcbLib, the import refuses and names both sides. It never falls back to an unrelated footprint.
  • --footprint <name> picks one explicitly.
  • A pin/pad disagreement prints WARN: [pin-pad-mismatch], and --strict refuses it.

Log in to reply.