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:
@@ -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)
|
||||
```
|
||||
|
||||
|
||||
Reference in New Issue
Block a user