Hardware: connection table + KiCad netlist

docs/hardware-plan.md §11: authoritative connection table (refdes, all
nets by block — power, RM2 radio, USB/flash/SWD, CV DAC, 8 bipolar CV
channels, MIDI TRS, display/UI/keypad, spares).

hardware/netlist.net: machine-importable KiCad netlist (S-expr format)
derived from the table — components with footprints + all nets/pins.
Import: KiCad > File > Import Non-KiCad Netlist (or open as a netlist
to populate a board). Pins are logical (GPIO names, DAC/op-amp function
names); map physical QFN pins when placing footprints.
This commit is contained in:
2026-08-21 16:58:34 +02:00
parent afb07dd1c0
commit dfd79eb2e3
2 changed files with 659 additions and 0 deletions
+139
View File
@@ -200,3 +200,142 @@ Host PCB responsibilities (from the RM2 datasheet):
7. OLED + buttons.
8. Keypad header (the Pimoroni keypad connects via a header or is integrated).
9. PCB layout, DRC, review, fab.
## 11. Connection table (netlist source of truth)
Reference designators and net membership. RP2040 pins are logical GPIO names
(map to physical QFN pins in KiCad). A machine-importable KiCad netlist lives
at `hardware/netlist.net`.
### Reference designators
| Ref | Part | Role |
|-----|------|------|
| U1 | RP2040 | MCU |
| U2 | W25Q32JV | flash |
| MOD1 | RM2 (RMC20452T) | BLE/WiFi radio |
| U3 | RT6150B-33 | 3.3 V buck |
| U4 | TPS61088 | +12 V boost |
| U5 | TPS63700 | −12 V inverter |
| U6 | REF3040 | 4.096 V DAC reference |
| U7 | REF2040 | 2.048 V bipolar mid-reference |
| U8 | DAC8568 | 8-ch 16-bit SPI DAC |
| U9, U10 | OPA4192 | quad RRO op-amp ×2 (8 CV channels) |
| U11 | 6N138 | MIDI-in optocoupler |
| DISP1 | SSD1306 | 64×32 OLED (I2C) |
| J1 | USB-C | 5 V + USB data |
| J2 | 2×3 header | SWD (Picoprobe) |
| J3, J4 | 3.5 mm TRS | MIDI in / out |
| J5–J8 | 3.5 mm TRS | 4× stereo CV out |
| J9 | 2×5 header | Pimoroni keypad |
| SW1–SW4 | tact | UI (Up/Down/Select/Back) |
| FB1 | polyfuse | 5 V input protection |
| L1, L2 | inductors | boost/inverter LC filters |
| D1–D8 | bidirectional TVS | CV output protection |
| R_cal1–R_cal8 | — | per-channel calibration (see §4) |
### Power nets
```
J1.VBUS ── FB1 ── +5V
+5V ── U3 (RT6150B-33) ── +3V3
+5V ── U4 (TPS61088) + L1 LC ── +12V
+5V ── U5 (TPS63700) + L2 LC ── −12V
+3V3 ── U6 (REF3040) ── VREF4V096
+3V3 ── U7 (REF2040) ── VMID2V048
GND = J1.GND, all return paths
```
### RM2 radio (Pico-W-compatible gSPI)
```
MOD1.CLK ── U1.GPIO29 (PIO0 SPI CLK)
MOD1.DAT ── U1.GPIO24 (PIO0 SPI DOUT/MOSI)
MOD1.CS ── U1.GPIO25 (output, CS)
MOD1.PWR ── U1.GPIO23 (output, power enable)
MOD1.IO0 ── (onboard LED, CYW43 WL_GPIO0 — status)
MOD1.VDD ── +3V3
MOD1.GND ── GND
MOD1 bus driven by U1 PIO0 + DMA CH0/CH1 (firmware copies Pico W)
```
### USB + flash + SWD
```
J1.DP ── U1.GPIO15 (USB_DP)
J1.DM ── U1.GPIO14 (USB_DM)
U2.CS ── U1.QSPI_CS
U2.CLK ── U1.QSPI_SCK
U2.DQ0 ── U1.QSPI_SD0 ... DQ3 ── SD3 (QSPI flash)
U2.VDD ── +3V3
J2.SWDIO ── U1.SWDIO J2.SWCLK ── U1.SWCLK J2.GND ── GND
```
### CV DAC (SPI1)
```
U8.SCLK ── U1.GPIO10
U8.DIN ── U1.GPIO11
U8.CS ── U1.GPIO13 (output)
U8.LDAC ── U1.GPIO20 (output, immediate-update / strobe)
U8.RSTB ── U1.GPIO21 (output, reset)
U8.VREF ── VREF4V096
U8.VDD ── +3V3
U8.VSS ── GND
U8.VOUTA..VOUTH ── 8 CV difference-amp inputs (see below)
```
### CV analog (8 channels, bipolar ±10 V)
Per channel n (n=1..8): subtractor `Vout = (Rfb/Rin)*(Vdac − VMID2V048)`,
Rin=10.0 k, Rfb=48.7 k (ratio 4.87 → ±9.98 V span; firmware calibrates exact).
One op-amp = 1/4 of an OPA4192 (U9 = ch1-4, U10 = ch5-8).
```
Channel 1 (J5.tip = pitch, J5.ring = gate):
U8.VOUTA ── Rin1a ── U9.1IN- ; Vdac into subtractor V-
VMID2V048 ── Rin1b ── U9.1IN+ ; mid-ref into V+
U9.1OUT ── Rfb1 ── U9.1IN- ; feedback
Rgnd1 (48.7k) ── U9.1IN+ ── GND ; balance resistor
U9.1OUT ── Rser1 (1k) ── D1 ── J5.tip
U9.1OUT ── (rail) +12V / −12V ; OPA4192 supply
Channel 2 (J5.ring): U8.VOUTB → U9.2... → J5.ring
...channels 3,4 → U9.3/4 → J6.tip/ring
...channels 5-8 → U10.1-4 → J7.tip/ring, J8.tip/ring
```
Pattern repeats: VOUTx → Rin → subtractor → Rfb feedback, Rgnd on V+, output
→ 1 k series → TVS → TRS tip/ring. U9/U10 V+ = +12 V, V− = −12 V.
### MIDI TRS (3.5 mm, TRS-A)
```
MIDI in (J3):
J3.tip ── R_lim (220Ω) ── U11.LED-A (6N138 anode)
U11.LED-K ── J3.ring
U11.OC-collector ── +3V3 via R_pull (1k) ── U1.GPIO1 (UART0 RX)
U11.OC-emitter ── GND
U11.base ── 1N4148 + 1k speed-up ── GND/+3V3 (per 6N138 app note)
MIDI out (J4):
U1.GPIO0 (UART0 TX) ── R_lim (220Ω) ── J4.tip
J4.ring ── +3V3
```
### Display + UI + keypad
```
DISP1.SDA ── U1.GPIO2 (I2C1 SDA) DISP1.SCL ── U1.GPIO3 (I2C1 SCL)
DISP1.VDD ── +3V3 DISP1.GND ── GND
SW1 ── U1.GPIO6 SW2 ── U1.GPIO7 SW3 ── U1.GPIO8 SW4 ── U1.GPIO9
(each SW: other side to GND; internal pull-up)
Keypad header J9 (Pimoroni RGB Keypad):
J9.SDA ── U1.GPIO4 (I2C0 SDA) J9.SCL ── U1.GPIO5 (I2C0 SCL)
J9.CS ── U1.GPIO17 J9.SCK ── U1.GPIO18 J9.MOSI ── U1.GPIO19
J9.VDD ── +3V3 J9.GND ── GND
```
### Spare GPIOs
```
U1.GPIO16, GPIO22, GPIO26, GPIO27, GPIO28 ── unassigned (status LEDs / analog in / future)
```