metronome/hardware/eda
Me Here edb736c1d3 PM_K-1 hardware: RP2350 core (MCU + flash + crystal + USB + boot/reset + SWD)
circuits/mcu_core.py using the authoritative KiCad MCU_RaspberryPi:RP2350A symbol.
Minimal design per RP "Hardware design with RP2350" (RP-008280):
- Core SMPS: VREG_VIN<-3V3, VREG_LX->3.3uH->DVDD, VREG_FB senses DVDD; VREG_AVDD via
  33ohm+4.7uF RC filter; ADC_AVDD filtered; 100nF per power pin.
- 12MHz crystal, MCLK-LESS (RP2350 makes I2S BCK/LRCK/DIN; PCM5102A uses its internal
  PLL) -- no audio oscillator, no MCLK net. Cheaper/simpler/robust; inaudible difference
  for a metronome (decided with the user).
- W25Q128JVS QSPI flash (Fig-8 pinout); BOOTSEL = QSPI_SS via 1k + button; RUN 10k
  pull-up + reset button; SWD header; USB D+/D- via 27ohm series.
- Full GPIO map assigned (DESIGN.md s7.1 + audio control: SPI/I2C/ADC/buttons/LED +
  I2S + relay-enable/mute/gnd-lift + DAC_XSMT).
ERC 0 errors; netlist 0 errors. CONFIRM at layout: crystal load caps, QFN-60 footprint,
and the USB-C connector + USBLC6-2 ESD + CC resistors (USB sub-block; D+/D- exit on 27R).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-30 21:56:12 -05:00
..
circuits PM_K-1 hardware: RP2350 core (MCU + flash + crystal + USB + boot/reset + SWD) 2026-05-30 21:56:12 -05:00
sim PM_K-1 hardware: Stage 4 -- balanced output driver (completes the audio chain) 2026-05-30 20:27:04 -05:00
Containerfile PM_K-1 hardware: Stage 1 input receiver as SKiDL (code-defined schematic) 2026-05-30 19:43:07 -05:00
README.md PM_K-1 hardware: reproducible EDA container (KiCad 9 + ngspice) 2026-05-30 19:17:54 -05:00
run.sh PM_K-1 hardware: reproducible EDA container (KiCad 9 + ngspice) 2026-05-30 19:17:54 -05:00

PM_K-1 EDA environment

A reproducible container with the tools to design, check, and simulate the core board — so the work doesn't depend on whatever happens to be installed on a given machine, now or in 50 years.

What's inside

  • KiCad 9 — schematic capture + PCB layout, and a CLI (kicad-cli) that can run ERC (Electrical Rules Check) and DRC, and export netlists/PDF/Gerbers.
  • ngspice — SPICE simulator for validating the analog audio circuits before we commit copper (op-amp stages, filters, input loading, etc.).
  • python3 — scripting, BOM munging, optional code-defined-schematic helpers.

Why a container?

The system KiCad here is 7.0, whose CLI can't run ERC (that arrived in KiCad 8). Rather than fight the host, we pin a known toolchain. Anyone — including future-you — rebuilds the exact environment with one command.

Use it

cd hardware/eda
./run.sh                                   # interactive shell, lands in hardware/kicad/
./run.sh kicad-cli version                 # confirm KiCad 9
./run.sh kicad-cli sch erc pm_k1_core.kicad_sch   # run ERC on the schematic
./run.sh ngspice -b ../eda/sim/input_loading.cir  # run a simulation (cwd is kicad/)

run.sh builds the image on first use, then mounts the whole repo at /work (so KiCad sees hardware/). Use RUNTIME=docker ./run.sh … to use Docker instead of Podman.

Layout

eda/
  Containerfile      # the pinned toolchain (KiCad 9 + ngspice + python)
  run.sh             # build-if-needed + run with the repo mounted
  sim/               # ngspice decks (SPICE simulations of the analog circuits)