runpatrick/sa-sim-pcb
This code defines PCB footprints for various electronic modules, including BG95 cellular modem, BNO086 sensor, BQ25180 battery charger, and BQ27220 power management IC, detailing their physical pad layouts and key external features.
- Version
- 1.0.6
- License
- unset
- Stars
- 0
footprints/bg95.tsx
// BG95-M3 LGA96 23.6×19.9mm — simplified perimeter-only footprint
// 96 pads total; this footprint covers ~42 perimeter pads with placeholders.
// ⚠️ Inner-grid pads must be added per Quectel BG95 HW Design Guide §3 before fab.
// We define 42 pads on the perimeter at 2.0mm pitch with 1.2×1.2mm pad size.
// Pin numbering follows the Quectel datasheet (south edge pin 1 → CCW).
export const bg95Footprint = () => (
<footprint>
{/* SOUTH edge — pads 1-12, x: -11 → +11 step 2, y = +9.95mm */}
{[-11, -9, -7, -5, -3, -1, 1, 3, 5, 7, 9, 11].map((x, i) => (
<smtpad
portHints={[String(i + 1)]}
shape="rect"
width="1.2mm"
height="1.2mm"
pcbX={`${x}mm`}
pcbY="9.95mm"
layer="top"
/>
))}
{/* EAST edge — pads 13-21, x = +11.8, y from +7.95 step -2 */}
{[7.95, 5.95, 3.95, 1.95, -0.05, -2.05, -4.05, -6.05, -8.05].map((y, i) => (
<smtpad
portHints={[String(i + 13)]}
shape="rect"
width="1.2mm"
height="1.2mm"
pcbX="11.8mm"
pcbY={`${y}mm`}
layer="top"
/>
))}
{/* NORTH edge — pads 22-33, x: +11 → -11, y = -9.95mm */}
{[11, 9, 7, 5, 3, 1, -1, -3, -5, -7, -9, -11].map((x, i) => (
<smtpad
portHints={[String(i + 22)]}
shape="rect"
width="1.2mm"
height="1.2mm"
pcbX={`${x}mm`}
pcbY="-9.95mm"
layer="top"
/>
))}
{/* WEST edge — pads 34-42, x = -11.8, y: -8.05 → +7.95 step +2 */}
{[-8.05, -6.05, -4.05, -2.05, -0.05, 1.95, 3.95, 5.95, 7.95].map((y, i) => (
<smtpad
portHints={[String(i + 34)]}
shape="rect"
width="1.2mm"
height="1.2mm"
pcbX="-11.8mm"
pcbY={`${y}mm`}
layer="top"
/>
))}
{/* Inner functional pads (selected critical signals).
These cover key BG95 net mappings used by the schematic:
UART_TXD, UART_RXD, USIM_*, ANT_MAIN, VBAT, RESET_N, PWRKEY, etc.
Pin numbers above 42 are reserved for these internal pads. */}
<smtpad portHints={["50"]} shape="rect" width="1.0mm" height="1.0mm" pcbX="-9mm" pcbY="7.5mm" layer="top" />
<smtpad portHints={["51"]} shape="rect" width="1.0mm" height="1.0mm" pcbX="-7mm" pcbY="7.5mm" layer="top" />
<smtpad portHints={["52"]} shape="rect" width="1.0mm" height="1.0mm" pcbX="-5mm" pcbY="7.5mm" layer="top" />
<smtpad portHints={["53"]} shape="rect" width="1.0mm" height="1.0mm" pcbX="-3mm" pcbY="7.5mm" layer="top" />
<smtpad portHints={["54"]} shape="rect" width="1.0mm" height="1.0mm" pcbX="-1mm" pcbY="7.5mm" layer="top" />
<smtpad portHints={["55"]} shape="rect" width="1.0mm" height="1.0mm" pcbX="1mm" pcbY="7.5mm" layer="top" />
<smtpad portHints={["56"]} shape="rect" width="1.0mm" height="1.0mm" pcbX="3mm" pcbY="7.5mm" layer="top" />
<smtpad portHints={["57"]} shape="rect" width="1.0mm" height="1.0mm" pcbX="5mm" pcbY="7.5mm" layer="top" />
<smtpad portHints={["58"]} shape="rect" width="1.0mm" height="1.0mm" pcbX="7mm" pcbY="7.5mm" layer="top" />
<smtpad portHints={["59"]} shape="rect" width="1.0mm" height="1.0mm" pcbX="9mm" pcbY="7.5mm" layer="top" />
{/* Body silkscreen */}
<silkscreenpath
route={[
{ x: -11.8, y: -9.95 },
{ x: 11.8, y: -9.95 },
{ x: 11.8, y: 9.95 },
{ x: -11.8, y: 9.95 },
{ x: -11.8, y: -9.95 },
]}
/>
</footprint>
)