0hmX/am3352-zcz-footprint

This code defines the physical footprint and pin layout for an 18x18 ball grid array (BGA) package of a Texas Instruments AM3352 microprocessor, including pad positions and outline drawing commands for PCB design.

Version
1.0.2
License
unset
Stars
0

index.tsx

PCBPCB preview for index.tsx
SchematicSchematic preview for index.tsx
import { Fragment } from "react"

/** TI ZCZ0324A, top view: A1 upper left, numbers right, letters down.
 * Source: https://www.ti.com/lit/ds/symlink/am3352.pdf
 * Package outline / example board layout: PDF pages 260–261.
 * 15 × 15 mm body; 18 × 18 balls; 0.8 mm pitch; Ø0.40 mm NSMD lands.
 */
const rows = ["A", "B", "C", "D", "E", "F", "G", "H", "J", "K", "L", "M", "N", "P", "R", "T", "U", "V"] as const
type Column = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18
export type AM3352Ball = `${typeof rows[number]}${Column}`

// Preserve the import's numeric pin convention: 1=A1, 2=B1, 19=A2.
// Numeric pins are tscircuit identifiers; the package uses ball names.
export const am3352Balls = Array.from({ length: 324 }, (_, index) => {
  const row = index % 18
  const column = Math.floor(index / 18)
  return {
    pin: `pin${index + 1}` as `pin${number}`,
    ball: `${rows[row]}${column + 1}` as AM3352Ball,
    x: Number(((column - 8.5) * 0.8).toFixed(3)),
    y: Number(((8.5 - row) * 0.8).toFixed(3)),
  }
})

export const am3352BallLabels = Object.fromEntries(
  am3352Balls.map(({ pin, ball }) => [pin, [ball]]),
) as Record<`pin${number}`, [AM3352Ball]>

export function AM3352ZCZFootprint() {
  return (
    <footprint>
      {am3352Balls.map(({ pin, ball, x, y }) => (
        <Fragment key={ball}>
          <smtpad
            portHints={[pin, ball]}
            pcbX={x}
            pcbY={y}
            layer="top"
            shape="circle"
            radius={0.2}
            solderMaskMargin={0.05}
            solderPasteMargin={0}
          />
        </Fragment>
      ))}
      {/* Nominal body outline, chamfer identifies A1. */}
      <fabricationnotepath strokeWidth={0.1} route={[
        { x: -6.7, y: 7.5 }, { x: 7.5, y: 7.5 },
        { x: 7.5, y: -7.5 }, { x: -7.5, y: -7.5 },
        { x: -7.5, y: 6.7 }, { x: -6.7, y: 7.5 },
      ]} />
      <silkscreenpath strokeWidth={0.15} route={[
        { x: -6.85, y: 7.65 }, { x: 7.65, y: 7.65 },
        { x: 7.65, y: -7.65 }, { x: -7.65, y: -7.65 },
        { x: -7.65, y: 6.85 }, { x: -6.85, y: 7.65 },
      ]} />
      {/* 0.25 mm clearance from the maximum 15.1 mm body. */}
      <courtyardoutline outline={[
        { x: -7.8, y: 7.8 }, { x: 7.8, y: 7.8 },
        { x: 7.8, y: -7.8 }, { x: -7.8, y: -7.8 },
        { x: -7.8, y: 7.8 },
      ]} />
    </footprint>
  )
}

export default AM3352ZCZFootprint