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)
```
+520
View File
@@ -0,0 +1,520 @@
(export (version "E")
(components
(comp (ref "U1") (value "RP2040") (footprint "MCU_RaspberryPi:RP2040_QFN-56"))
(comp (ref "U2") (value "W25Q32JV") (footprint "Package_SO:SOIC-8_3.9x4.9mm_P1.27mm"))
(comp (ref "MOD1") (value "RM2_RMC20452T") (footprint "RF_Module:RaspberryPi_RM2"))
(comp (ref "U3") (value "RT6150B-33GQW") (footprint "Package_DFN_QFN:DFN-10-1EP_2x2mm_P0.5mm"))
(comp (ref "U4") (value "TPS61088") (footprint "Package_DFN_QFN:QFN-20-1EP_4x4mm_P0.5mm"))
(comp (ref "U5") (value "TPS63700") (footprint "Package_TO_SOT_SMD:SOT-23-6"))
(comp (ref "U6") (value "REF3040") (footprint "Package_TO_SOT_SMD:SOT-23-3"))
(comp (ref "U7") (value "REF2040") (footprint "Package_TO_SOT_SMD:SOT-23-3"))
(comp (ref "U8") (value "DAC8568") (footprint "Package_SO:TSSOP-16_4.4x5mm_P0.65mm"))
(comp (ref "U9") (value "OPA4192") (footprint "Package_SO:TSSOP-14_4.4x5mm_P0.65mm"))
(comp (ref "U10") (value "OPA4192") (footprint "Package_SO:TSSOP-14_4.4x5mm_P0.65mm"))
(comp (ref "U11") (value "6N138") (footprint "Package_DIP:DIP-8_W7.62mm"))
(comp (ref "DISP1") (value "SSD1306_OLED_64x32") (footprint "Display:OLED_64x32"))
(comp (ref "J1") (value "USB-C") (footprint "Connector_USB:USB_C_Receptacle_GCT_USB4105"))
(comp (ref "J2") (value "SWD_2x3") (footprint "Connector_PinHeader_2.54mm:PinHeader_2x03_P2.54mm_Vertical"))
(comp (ref "J3") (value "TRS_3.5mm_MIDI_IN") (footprint "Connector_Audio:Jack_3.5mm_CUI_SJ1-3523N"))
(comp (ref "J4") (value "TRS_3.5mm_MIDI_OUT") (footprint "Connector_Audio:Jack_3.5mm_CUI_SJ1-3523N"))
(comp (ref "J5") (value "TRS_3.5mm_CV1") (footprint "Connector_Audio:Jack_3.5mm_CUI_SJ1-3523N"))
(comp (ref "J6") (value "TRS_3.5mm_CV2") (footprint "Connector_Audio:Jack_3.5mm_CUI_SJ1-3523N"))
(comp (ref "J7") (value "TRS_3.5mm_CV3") (footprint "Connector_Audio:Jack_3.5mm_CUI_SJ1-3523N"))
(comp (ref "J8") (value "TRS_3.5mm_CV4") (footprint "Connector_Audio:Jack_3.5mm_CUI_SJ1-3523N"))
(comp (ref "J9") (value "Keypad_2x5") (footprint "Connector_PinHeader_2.54mm:PinHeader_2x05_P2.54mm_Vertical"))
(comp (ref "SW1") (value "Up") (footprint "Button_Switch_SMD:SW_SPST_B3SN_6x6mm"))
(comp (ref "SW2") (value "Down") (footprint "Button_Switch_SMD:SW_SPST_B3SN_6x6mm"))
(comp (ref "SW3") (value "Select") (footprint "Button_Switch_SMD:SW_SPST_B3SN_6x6mm"))
(comp (ref "SW4") (value "Back") (footprint "Button_Switch_SMD:SW_SPST_B3SN_6x6mm"))
(comp (ref "FB1") (value "Polyfuse_500mA") (footprint "Fuse:Fuse_1206"))
(comp (ref "L1") (value "22uH") (footprint "Inductor_SMD:L_0805"))
(comp (ref "L2") (value "22uH") (footprint "Inductor_SMD:L_0805"))
(comp (ref "D1") (value "TVS_bidir") (footprint "Diode_SMD:D_SOD-323"))
(comp (ref "D2") (value "TVS_bidir") (footprint "Diode_SMD:D_SOD-323"))
(comp (ref "D3") (value "TVS_bidir") (footprint "Diode_SMD:D_SOD-323"))
(comp (ref "D4") (value "TVS_bidir") (footprint "Diode_SMD:D_SOD-323"))
(comp (ref "D5") (value "TVS_bidir") (footprint "Diode_SMD:D_SOD-323"))
(comp (ref "D6") (value "TVS_bidir") (footprint "Diode_SMD:D_SOD-323"))
(comp (ref "D7") (value "TVS_bidir") (footprint "Diode_SMD:D_SOD-323"))
(comp (ref "D8") (value "TVS_bidir") (footprint "Diode_SMD:D_SOD-323"))
;; Per-channel subtractor resistors (Rin=10.0k, Rfb=Rgnd=48.7k, Rser=1.0k)
(comp (ref "RIN1A") (value "10.0k") (footprint "Resistor_SMD:R_0603"))
(comp (ref "RIN1B") (value "10.0k") (footprint "Resistor_SMD:R_0603"))
(comp (ref "RFB1") (value "48.7k") (footprint "Resistor_SMD:R_0603"))
(comp (ref "RGND1") (value "48.7k") (footprint "Resistor_SMD:R_0603"))
(comp (ref "RSER1") (value "1.0k") (footprint "Resistor_SMD:R_0603"))
(comp (ref "RIN2A") (value "10.0k") (footprint "Resistor_SMD:R_0603"))
(comp (ref "RIN2B") (value "10.0k") (footprint "Resistor_SMD:R_0603"))
(comp (ref "RFB2") (value "48.7k") (footprint "Resistor_SMD:R_0603"))
(comp (ref "RGND2") (value "48.7k") (footprint "Resistor_SMD:R_0603"))
(comp (ref "RSER2") (value "1.0k") (footprint "Resistor_SMD:R_0603"))
(comp (ref "RIN3A") (value "10.0k") (footprint "Resistor_SMD:R_0603"))
(comp (ref "RIN3B") (value "10.0k") (footprint "Resistor_SMD:R_0603"))
(comp (ref "RFB3") (value "48.7k") (footprint "Resistor_SMD:R_0603"))
(comp (ref "RGND3") (value "48.7k") (footprint "Resistor_SMD:R_0603"))
(comp (ref "RSER3") (value "1.0k") (footprint "Resistor_SMD:R_0603"))
(comp (ref "RIN4A") (value "10.0k") (footprint "Resistor_SMD:R_0603"))
(comp (ref "RIN4B") (value "10.0k") (footprint "Resistor_SMD:R_0603"))
(comp (ref "RFB4") (value "48.7k") (footprint "Resistor_SMD:R_0603"))
(comp (ref "RGND4") (value "48.7k") (footprint "Resistor_SMD:R_0603"))
(comp (ref "RSER4") (value "1.0k") (footprint "Resistor_SMD:R_0603"))
(comp (ref "RIN5A") (value "10.0k") (footprint "Resistor_SMD:R_0603"))
(comp (ref "RIN5B") (value "10.0k") (footprint "Resistor_SMD:R_0603"))
(comp (ref "RFB5") (value "48.7k") (footprint "Resistor_SMD:R_0603"))
(comp (ref "RGND5") (value "48.7k") (footprint "Resistor_SMD:R_0603"))
(comp (ref "RSER5") (value "1.0k") (footprint "Resistor_SMD:R_0603"))
(comp (ref "RIN6A") (value "10.0k") (footprint "Resistor_SMD:R_0603"))
(comp (ref "RIN6B") (value "10.0k") (footprint "Resistor_SMD:R_0603"))
(comp (ref "RFB6") (value "48.7k") (footprint "Resistor_SMD:R_0603"))
(comp (ref "RGND6") (value "48.7k") (footprint "Resistor_SMD:R_0603"))
(comp (ref "RSER6") (value "1.0k") (footprint "Resistor_SMD:R_0603"))
(comp (ref "RIN7A") (value "10.0k") (footprint "Resistor_SMD:R_0603"))
(comp (ref "RIN7B") (value "10.0k") (footprint "Resistor_SMD:R_0603"))
(comp (ref "RFB7") (value "48.7k") (footprint "Resistor_SMD:R_0603"))
(comp (ref "RGND7") (value "48.7k") (footprint "Resistor_SMD:R_0603"))
(comp (ref "RSER7") (value "1.0k") (footprint "Resistor_SMD:R_0603"))
(comp (ref "RIN8A") (value "10.0k") (footprint "Resistor_SMD:R_0603"))
(comp (ref "RIN8B") (value "10.0k") (footprint "Resistor_SMD:R_0603"))
(comp (ref "RFB8") (value "48.7k") (footprint "Resistor_SMD:R_0603"))
(comp (ref "RGND8") (value "48.7k") (footprint "Resistor_SMD:R_0603"))
(comp (ref "RSER8") (value "1.0k") (footprint "Resistor_SMD:R_0603"))
;; MIDI
(comp (ref "RMIDIIN") (value "220R") (footprint "Resistor_SMD:R_0603"))
(comp (ref "RPULLRX") (value "1.0k") (footprint "Resistor_SMD:R_0603"))
(comp (ref "RMIDIOUT") (value "220R") (footprint "Resistor_SMD:R_0603"))
)
(nets
(net (code "1") (name "+5V")
(node (ref "J1") (pin "VBUS"))
(node (ref "FB1") (pin "1"))
(node (ref "U3") (pin "VIN"))
(node (ref "U4") (pin "VIN"))
(node (ref "U5") (pin "VIN"))
)
(net (code "2") (name "VBUS_FUSED")
(node (ref "FB1") (pin "2"))
;; downstream after fuse (same as +5V in effect; split for clarity)
)
(net (code "3") (name "+3V3")
(node (ref "U3") (pin "VOUT"))
(node (ref "U1") (pin "3V3"))
(node (ref "U2") (pin "VDD"))
(node (ref "MOD1") (pin "VDD"))
(node (ref "U6") (pin "VDD"))
(node (ref "U7") (pin "VDD"))
(node (ref "U8") (pin "VDD"))
(node (ref "DISP1") (pin "VDD"))
(node (ref "J9") (pin "VDD"))
(node (ref "RPULLRX") (pin "1"))
(node (ref "J4") (pin "ring"))
)
(net (code "4") (name "+12V")
(node (ref "U4") (pin "VOUT"))
(node (ref "L1") (pin "1"))
(node (ref "U9") (pin "V+"))
(node (ref "U10") (pin "V+"))
)
(net (code "5") (name "-12V")
(node (ref "U5") (pin "VOUT"))
(node (ref "L2") (pin "1"))
(node (ref "U9") (pin "V-"))
(node (ref "U10") (pin "V-"))
)
(net (code "6") (name "VREF4V096")
(node (ref "U6") (pin "VOUT"))
(node (ref "U8") (pin "VREF"))
)
(net (code "7") (name "VMID2V048")
(node (ref "U7") (pin "VOUT"))
(node (ref "RIN1B") (pin "1"))
(node (ref "RIN2B") (pin "1"))
(node (ref "RIN3B") (pin "1"))
(node (ref "RIN4B") (pin "1"))
(node (ref "RIN5B") (pin "1"))
(node (ref "RIN6B") (pin "1"))
(node (ref "RIN7B") (pin "1"))
(node (ref "RIN8B") (pin "1"))
)
(net (code "8") (name "GND")
(node (ref "J1") (pin "GND"))
(node (ref "U1") (pin "GND"))
(node (ref "U2") (pin "GND"))
(node (ref "MOD1") (pin "GND"))
(node (ref "U3") (pin "GND"))
(node (ref "U4") (pin "GND"))
(node (ref "U5") (pin "GND"))
(node (ref "U6") (pin "GND"))
(node (ref "U7") (pin "GND"))
(node (ref "U8") (pin "VSS"))
(node (ref "U9") (pin "GND"))
(node (ref "U10") (pin "GND"))
(node (ref "U11") (pin "emitter"))
(node (ref "DISP1") (pin "GND"))
(node (ref "J2") (pin "GND"))
(node (ref "J9") (pin "GND"))
(node (ref "SW1") (pin "2"))
(node (ref "SW2") (pin "2"))
(node (ref "SW3") (pin "2"))
(node (ref "SW4") (pin "2"))
(node (ref "RGND1") (pin "2"))
(node (ref "RGND2") (pin "2"))
(node (ref "RGND3") (pin "2"))
(node (ref "RGND4") (pin "2"))
(node (ref "RGND5") (pin "2"))
(node (ref "RGND6") (pin "2"))
(node (ref "RGND7") (pin "2"))
(node (ref "RGND8") (pin "2"))
)
;; ---- RM2 radio (Pico-W gSPI) ----
(net (code "10") (name "RM2_CLK")
(node (ref "MOD1") (pin "CLK"))
(node (ref "U1") (pin "GPIO29"))
)
(net (code "11") (name "RM2_DAT")
(node (ref "MOD1") (pin "DAT"))
(node (ref "U1") (pin "GPIO24"))
)
(net (code "12") (name "RM2_CS")
(node (ref "MOD1") (pin "CS"))
(node (ref "U1") (pin "GPIO25"))
)
(net (code "13") (name "RM2_PWR")
(node (ref "MOD1") (pin "PWR"))
(node (ref "U1") (pin "GPIO23"))
)
;; ---- USB + flash + SWD ----
(net (code "20") (name "USB_DP")
(node (ref "J1") (pin "DP"))
(node (ref "U1") (pin "GPIO15"))
)
(net (code "21") (name "USB_DM")
(node (ref "J1") (pin "DM"))
(node (ref "U1") (pin "GPIO14"))
)
(net (code "22") (name "FLASH_CS")
(node (ref "U2") (pin "CS"))
(node (ref "U1") (pin "QSPI_CS"))
)
(net (code "23") (name "FLASH_SCK")
(node (ref "U2") (pin "CLK"))
(node (ref "U1") (pin "QSPI_SCK"))
)
(net (code "24") (name "FLASH_SD0")
(node (ref "U2") (pin "DQ0"))
(node (ref "U1") (pin "QSPI_SD0"))
)
(net (code "25") (name "FLASH_SD1")
(node (ref "U2") (pin "DQ1"))
(node (ref "U1") (pin "QSPI_SD1"))
)
(net (code "26") (name "FLASH_SD2")
(node (ref "U2") (pin "DQ2"))
(node (ref "U1") (pin "QSPI_SD2"))
)
(net (code "27") (name "FLASH_SD3")
(node (ref "U2") (pin "DQ3"))
(node (ref "U1") (pin "QSPI_SD3"))
)
(net (code "28") (name "SWDIO")
(node (ref "J2") (pin "SWDIO"))
(node (ref "U1") (pin "SWDIO"))
)
(net (code "29") (name "SWCLK")
(node (ref "J2") (pin "SWCLK"))
(node (ref "U1") (pin "SWCLK"))
)
;; ---- CV DAC (SPI1) ----
(net (code "30") (name "DAC_SCLK")
(node (ref "U8") (pin "SCLK"))
(node (ref "U1") (pin "GPIO10"))
)
(net (code "31") (name "DAC_DIN")
(node (ref "U8") (pin "DIN"))
(node (ref "U1") (pin "GPIO11"))
)
(net (code "32") (name "DAC_CS")
(node (ref "U8") (pin "CS"))
(node (ref "U1") (pin "GPIO13"))
)
(net (code "33") (name "DAC_LDAC")
(node (ref "U8") (pin "LDAC"))
(node (ref "U1") (pin "GPIO20"))
)
(net (code "34") (name "DAC_RSTB")
(node (ref "U8") (pin "RSTB"))
(node (ref "U1") (pin "GPIO21"))
)
(net (code "35") (name "DAC_VOUTA")
(node (ref "U8") (pin "VOUTA"))
(node (ref "RIN1A") (pin "1"))
)
(net (code "36") (name "DAC_VOUTB")
(node (ref "U8") (pin "VOUTB"))
(node (ref "RIN2A") (pin "1"))
)
(net (code "37") (name "DAC_VOUTC")
(node (ref "U8") (pin "VOUTC"))
(node (ref "RIN3A") (pin "1"))
)
(net (code "38") (name "DAC_VOUTD")
(node (ref "U8") (pin "VOUTD"))
(node (ref "RIN4A") (pin "1"))
)
(net (code "39") (name "DAC_VOUTE")
(node (ref "U8") (pin "VOUTE"))
(node (ref "RIN5A") (pin "1"))
)
(net (code "40") (name "DAC_VOUTF")
(node (ref "U8") (pin "VOUTF"))
(node (ref "RIN6A") (pin "1"))
)
(net (code "41") (name "DAC_VOUTG")
(node (ref "U8") (pin "VOUTG"))
(node (ref "RIN7A") (pin "1"))
)
(net (code "42") (name "DAC_VOUTH")
(node (ref "U8") (pin "VOUTH"))
(node (ref "RIN8A") (pin "1"))
)
;; ---- CV channels (subtractor outputs -> series -> TVS -> TRS) ----
;; U9 channels 1-4, U10 channels 5-8.
(net (code "50") (name "OP1A_MINUS")
(node (ref "RIN1A") (pin "2"))
(node (ref "RFB1") (pin "1"))
(node (ref "U9") (pin "1IN-"))
)
(net (code "51") (name "OP1A_PLUS")
(node (ref "RIN1B") (pin "2"))
(node (ref "RGND1") (pin "1"))
(node (ref "U9") (pin "1IN+"))
)
(net (code "52") (name "OP1A_OUT")
(node (ref "U9") (pin "1OUT"))
(node (ref "RFB1") (pin "2"))
(node (ref "RSER1") (pin "1"))
)
(net (code "53") (name "CV1_T")
(node (ref "RSER1") (pin "2"))
(node (ref "D1") (pin "1"))
(node (ref "J5") (pin "tip"))
)
(net (code "54") (name "OP1B_MINUS")
(node (ref "RIN2A") (pin "2"))
(node (ref "RFB2") (pin "1"))
(node (ref "U9") (pin "2IN-"))
)
(net (code "55") (name "OP1B_PLUS")
(node (ref "RIN2B") (pin "2"))
(node (ref "RGND2") (pin "1"))
(node (ref "U9") (pin "2IN+"))
)
(net (code "56") (name "OP1B_OUT")
(node (ref "U9") (pin "2OUT"))
(node (ref "RFB2") (pin "2"))
(node (ref "RSER2") (pin "1"))
)
(net (code "57") (name "CV1_R")
(node (ref "RSER2") (pin "2"))
(node (ref "D2") (pin "1"))
(node (ref "J5") (pin "ring"))
)
(net (code "58") (name "OP1C_MINUS")
(node (ref "RIN3A") (pin "2"))
(node (ref "RFB3") (pin "1"))
(node (ref "U9") (pin "3IN-"))
)
(net (code "59") (name "OP1C_PLUS")
(node (ref "RIN3B") (pin "2"))
(node (ref "RGND3") (pin "1"))
(node (ref "U9") (pin "3IN+"))
)
(net (code "60") (name "OP1C_OUT")
(node (ref "U9") (pin "3OUT"))
(node (ref "RFB3") (pin "2"))
(node (ref "RSER3") (pin "1"))
)
(net (code "61") (name "CV2_T")
(node (ref "RSER3") (pin "2"))
(node (ref "D3") (pin "1"))
(node (ref "J6") (pin "tip"))
)
(net (code "62") (name "OP1D_MINUS")
(node (ref "RIN4A") (pin "2"))
(node (ref "RFB4") (pin "1"))
(node (ref "U9") (pin "4IN-"))
)
(net (code "63") (name "OP1D_PLUS")
(node (ref "RIN4B") (pin "2"))
(node (ref "RGND4") (pin "1"))
(node (ref "U9") (pin "4IN+"))
)
(net (code "64") (name "OP1D_OUT")
(node (ref "U9") (pin "4OUT"))
(node (ref "RFB4") (pin "2"))
(node (ref "RSER4") (pin "1"))
)
(net (code "65") (name "CV2_R")
(node (ref "RSER4") (pin "2"))
(node (ref "D4") (pin "1"))
(node (ref "J6") (pin "ring"))
)
;; channels 5-8 mirror on U10 (same pattern, J7/J8)
(net (code "66") (name "OP2A_MINUS")
(node (ref "RIN5A") (pin "2"))
(node (ref "RFB5") (pin "1"))
(node (ref "U10") (pin "1IN-"))
)
(net (code "67") (name "OP2A_PLUS")
(node (ref "RIN5B") (pin "2"))
(node (ref "RGND5") (pin "1"))
(node (ref "U10") (pin "1IN+"))
)
(net (code "68") (name "OP2A_OUT")
(node (ref "U10") (pin "1OUT"))
(node (ref "RFB5") (pin "2"))
(node (ref "RSER5") (pin "1"))
)
(net (code "69") (name "CV3_T")
(node (ref "RSER5") (pin "2"))
(node (ref "D5") (pin "1"))
(node (ref "J7") (pin "tip"))
)
(net (code "70") (name "OP2B_MINUS")
(node (ref "RIN6A") (pin "2"))
(node (ref "RFB6") (pin "1"))
(node (ref "U10") (pin "2IN-"))
)
(net (code "71") (name "OP2B_PLUS")
(node (ref "RIN6B") (pin "2"))
(node (ref "RGND6") (pin "1"))
(node (ref "U10") (pin "2IN+"))
)
(net (code "72") (name "OP2B_OUT")
(node (ref "U10") (pin "2OUT"))
(node (ref "RFB6") (pin "2"))
(node (ref "RSER6") (pin "1"))
)
(net (code "73") (name "CV3_R")
(node (ref "RSER6") (pin "2"))
(node (ref "D6") (pin "1"))
(node (ref "J7") (pin "ring"))
)
(net (code "74") (name "OP2C_MINUS")
(node (ref "RIN7A") (pin "2"))
(node (ref "RFB7") (pin "1"))
(node (ref "U10") (pin "3IN-"))
)
(net (code "75") (name "OP2C_PLUS")
(node (ref "RIN7B") (pin "2"))
(node (ref "RGND7") (pin "1"))
(node (ref "U10") (pin "3IN+"))
)
(net (code "76") (name "OP2C_OUT")
(node (ref "U10") (pin "3OUT"))
(node (ref "RFB7") (pin "2"))
(node (ref "RSER7") (pin "1"))
)
(net (code "77") (name "CV4_T")
(node (ref "RSER7") (pin "2"))
(node (ref "D7") (pin "1"))
(node (ref "J8") (pin "tip"))
)
(net (code "78") (name "OP2D_MINUS")
(node (ref "RIN8A") (pin "2"))
(node (ref "RFB8") (pin "1"))
(node (ref "U10") (pin "4IN-"))
)
(net (code "79") (name "OP2D_PLUS")
(node (ref "RIN8B") (pin "2"))
(node (ref "RGND8") (pin "1"))
(node (ref "U10") (pin "4IN+"))
)
(net (code "80") (name "OP2D_OUT")
(node (ref "U10") (pin "4OUT"))
(node (ref "RFB8") (pin "2"))
(node (ref "RSER8") (pin "1"))
)
(net (code "81") (name "CV4_R")
(node (ref "RSER8") (pin "2"))
(node (ref "D8") (pin "1"))
(node (ref "J8") (pin "ring"))
)
;; ---- MIDI TRS ----
(net (code "90") (name "MIDI_IN_TIP")
(node (ref "J3") (pin "tip"))
(node (ref "RMIDIIN") (pin "1"))
)
(net (code "91") (name "MIDI_IN_LED_A")
(node (ref "RMIDIIN") (pin "2"))
(node (ref "U11") (pin "anode"))
)
(net (code "92") (name "MIDI_IN_RING")
(node (ref "J3") (pin "ring"))
(node (ref "U11") (pin "cathode"))
)
(net (code "93") (name "MIDI_RX")
(node (ref "U11") (pin "collector"))
(node (ref "RPULLRX") (pin "2"))
(node (ref "U1") (pin "GPIO1"))
)
(net (code "94") (name "MIDI_OUT_TIP")
(node (ref "U1") (pin "GPIO0"))
(node (ref "RMIDIOUT") (pin "1"))
)
(net (code "95") (name "MIDI_OUT_DRIVE")
(node (ref "RMIDIOUT") (pin "2"))
(node (ref "J4") (pin "tip"))
)
;; ---- Display + UI + keypad ----
(net (code "100") (name "I2C1_SDA")
(node (ref "DISP1") (pin "SDA"))
(node (ref "U1") (pin "GPIO2"))
)
(net (code "101") (name "I2C1_SCL")
(node (ref "DISP1") (pin "SCL"))
(node (ref "U1") (pin "GPIO3"))
)
(net (code "102") (name "BTN_UP")
(node (ref "SW1") (pin "1"))
(node (ref "U1") (pin "GPIO6"))
)
(net (code "103") (name "BTN_DOWN")
(node (ref "SW2") (pin "1"))
(node (ref "U1") (pin "GPIO7"))
)
(net (code "104") (name "BTN_SELECT")
(node (ref "SW3") (pin "1"))
(node (ref "U1") (pin "GPIO8"))
)
(net (code "105") (name "BTN_BACK")
(node (ref "SW4") (pin "1"))
(node (ref "U1") (pin "GPIO9"))
)
(net (code "106") (name "I2C0_SDA")
(node (ref "J9") (pin "SDA"))
(node (ref "U1") (pin "GPIO4"))
)
(net (code "107") (name "I2C0_SCL")
(node (ref "J9") (pin "SCL"))
(node (ref "U1") (pin "GPIO5"))
)
(net (code "108") (name "KP_CS")
(node (ref "J9") (pin "CS"))
(node (ref "U1") (pin "GPIO17"))
)
(net (code "109") (name "KP_SCK")
(node (ref "J9") (pin "SCK"))
(node (ref "U1") (pin "GPIO18"))
)
(net (code "110") (name "KP_MOSI")
(node (ref "J9") (pin "MOSI"))
(node (ref "U1") (pin "GPIO19"))
)
)
)