diff --git a/docs/hardware-plan.md b/docs/hardware-plan.md index 0f6e15f..780369e 100644 --- a/docs/hardware-plan.md +++ b/docs/hardware-plan.md @@ -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) +``` + diff --git a/hardware/netlist.net b/hardware/netlist.net new file mode 100644 index 0000000..8a3783c --- /dev/null +++ b/hardware/netlist.net @@ -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")) + ) + ) +)