(export (version "E") (design (source "resound-carrier") (date "2026-06-11") (tool "blue-agent netlist-first bootstrap") (sheet (number "1") (name "/") (tstamps "/") (title_block (title "Resound Small Build Carrier PCB") (company "Resound") (rev "A") (date "2026-06-11") (comment (number "1") (value "ONE board, two assembly variants: SINK / BROADCASTER")) (comment (number "2") (value "ESP32-WROOM-32E carrier with 26-pin stacking bus")) (comment (number "3") (value "Netlist-first: schematic still to be drawn. See README.md")) (comment (number "4") (value "CAVEAT: LED_DAT/LED_CLK pin assignment to be confirmed by EE"))))) (components ;; ---- MCU ---- (comp (ref "U1") (value "ESP32-WROOM-32E") (footprint "RF_Module:ESP32-WROOM-32") (datasheet "https://www.espressif.com/sites/default/files/documentation/esp32-wroom-32e_esp32-wroom-32ue_datasheet_en.pdf") (fields (field (name "MPN") "ESP32-WROOM-32E") (field (name "JLCPCB") "C701343")) (tstamps "00000001")) ;; ---- Stacking connector (2x13 pass-through, top + bottom mirrored = same net per position) ---- (comp (ref "J1") (value "Stack_2x13") (footprint "Connector_PinHeader_2.54mm:PinHeader_2x13_P2.54mm_Vertical") (fields (field (name "Notes") "2.54mm 2x13 pass-through; mirror header on bottom shares nets")) (tstamps "00000002")) ;; ---- Programming header 1x6 ---- (comp (ref "J2") (value "PROG_1x6") (footprint "Connector_PinHeader_2.54mm:PinHeader_1x06_P2.54mm_Vertical") (fields (field (name "Pinout") "1=GND 2=+5V 3=RX/IO3 4=TX/IO1 5=DTR 6=RTS")) (tstamps "00000003")) ;; ---- HUD connector SH1.0 1x6 (TOP board only) ---- (comp (ref "J3") (value "HUD_SH1.0_1x6") (footprint "Connector_JST:JST_SH_BM06B-SRSS-TB_1x06-1MP_P1.00mm_Vertical") (fields (field (name "Pinout") "1=+5V 2=GND 3=SDA 4=SCL 5=SPARE 6=NC") (field (name "MPN") "BM06B-SRSS-TB") (field (name "Notes") "Populate on TOP board only")) (tstamps "00000004")) ;; ---- Auto reset/boot transistors ---- (comp (ref "Q1") (value "MMBT3904") (footprint "Package_TO_SOT_SMD:SOT-23") (fields (field (name "Func") "DTR->EN reset") (field (name "JLCPCB") "C20526")) (tstamps "00000005")) (comp (ref "Q2") (value "MMBT3904") (footprint "Package_TO_SOT_SMD:SOT-23") (fields (field (name "Func") "RTS->IO0 boot") (field (name "JLCPCB") "C20526")) (tstamps "00000006")) ;; ---- Tactile buttons ---- (comp (ref "SW1") (value "EN/RESET") (footprint "Button_Switch_SMD:SW_SPST_PTS645") (fields (field (name "Notes") "EN to GND")) (tstamps "00000007")) (comp (ref "SW2") (value "BOOT/IO0") (footprint "Button_Switch_SMD:SW_SPST_PTS645") (fields (field (name "Notes") "IO0 to GND")) (tstamps "00000008")) ;; ---- I2S role jumpers (0R, two columns) ---- ;; SINK column (comp (ref "JP1") (value "0R") (footprint "Resistor_SMD:R_0603_1608Metric") (fields (field (name "Func") "I2S_BCK = GPIO5 (SINK)")) (tstamps "00000010")) (comp (ref "JP2") (value "0R") (footprint "Resistor_SMD:R_0603_1608Metric") (fields (field (name "Func") "I2S_WS = GPIO25 (SINK)")) (tstamps "00000011")) (comp (ref "JP3") (value "0R") (footprint "Resistor_SMD:R_0603_1608Metric") (fields (field (name "Func") "I2S_DATA = GPIO23 (SINK)")) (tstamps "00000012")) ;; BROADCASTER column (comp (ref "JP4") (value "0R") (footprint "Resistor_SMD:R_0603_1608Metric") (fields (field (name "Func") "I2S_BCK = GPIO19 (BROADCASTER)")) (tstamps "00000013")) (comp (ref "JP5") (value "0R") (footprint "Resistor_SMD:R_0603_1608Metric") (fields (field (name "Func") "I2S_WS = GPIO18 (BROADCASTER)")) (tstamps "00000014")) (comp (ref "JP6") (value "0R") (footprint "Resistor_SMD:R_0603_1608Metric") (fields (field (name "Func") "I2S_DATA = GPIO22 (BROADCASTER)")) (tstamps "00000015")) ;; ---- I2S series termination (option) ---- (comp (ref "R1") (value "33R") (footprint "Resistor_SMD:R_0402_1005Metric") (fields (field (name "Func") "I2S_BCK series term") (field (name "DNP") "y")) (tstamps "00000020")) (comp (ref "R2") (value "33R") (footprint "Resistor_SMD:R_0402_1005Metric") (fields (field (name "Func") "I2S_WS series term") (field (name "DNP") "y")) (tstamps "00000021")) (comp (ref "R3") (value "33R") (footprint "Resistor_SMD:R_0402_1005Metric") (fields (field (name "Func") "I2S_DATA series term") (field (name "DNP") "y")) (tstamps "00000022")) ;; ---- I2C pull-ups (on every board, DNP except SINK) ---- (comp (ref "R4") (value "4.7k") (footprint "Resistor_SMD:R_0402_1005Metric") (fields (field (name "Func") "SDA pull-up") (field (name "DNP") "y (populate on SINK only)")) (tstamps "00000023")) (comp (ref "R5") (value "4.7k") (footprint "Resistor_SMD:R_0402_1005Metric") (fields (field (name "Func") "SCL pull-up") (field (name "DNP") "y (populate on SINK only)")) (tstamps "00000024")) ;; ---- Reset / boot RC + pull-ups ---- (comp (ref "R6") (value "10k") (footprint "Resistor_SMD:R_0402_1005Metric") (fields (field (name "Func") "EN pull-up to 3V3")) (tstamps "00000025")) (comp (ref "C1") (value "1uF") (footprint "Capacitor_SMD:C_0603_1608Metric") (fields (field (name "Func") "EN to GND")) (tstamps "00000026")) (comp (ref "R7") (value "10k") (footprint "Resistor_SMD:R_0402_1005Metric") (fields (field (name "Func") "IO0 pull-up to 3V3")) (tstamps "00000027")) (comp (ref "C2") (value "100nF") (footprint "Capacitor_SMD:C_0402_1005Metric") (fields (field (name "Func") "IO0 to GND")) (tstamps "00000028")) ;; ---- Auto reset/boot coupling caps + base resistors ---- (comp (ref "C3") (value "100nF") (footprint "Capacitor_SMD:C_0402_1005Metric") (fields (field (name "Func") "DTR coupling to Q1")) (tstamps "00000029")) (comp (ref "C4") (value "100nF") (footprint "Capacitor_SMD:C_0402_1005Metric") (fields (field (name "Func") "RTS coupling to Q2")) (tstamps "0000002A")) (comp (ref "R8") (value "10k") (footprint "Resistor_SMD:R_0402_1005Metric") (fields (field (name "Func") "Q1 base series")) (tstamps "0000002B")) (comp (ref "R9") (value "10k") (footprint "Resistor_SMD:R_0402_1005Metric") (fields (field (name "Func") "Q2 base series")) (tstamps "0000002C")) ;; ---- Address straps (GPIO13/14/27/26): 10k to 3V3 OR 0R to GND ---- (comp (ref "R10") (value "10k") (footprint "Resistor_SMD:R_0402_1005Metric") (fields (field (name "Func") "ADDR0/GPIO13 -> 3V3 strap")) (tstamps "00000030")) (comp (ref "R11") (value "0R") (footprint "Resistor_SMD:R_0402_1005Metric") (fields (field (name "Func") "ADDR0/GPIO13 -> GND strap") (field (name "DNP") "y (pick one)")) (tstamps "00000031")) (comp (ref "R12") (value "10k") (footprint "Resistor_SMD:R_0402_1005Metric") (fields (field (name "Func") "ADDR1/GPIO14 -> 3V3 strap")) (tstamps "00000032")) (comp (ref "R13") (value "0R") (footprint "Resistor_SMD:R_0402_1005Metric") (fields (field (name "Func") "ADDR1/GPIO14 -> GND strap") (field (name "DNP") "y (pick one)")) (tstamps "00000033")) (comp (ref "R14") (value "10k") (footprint "Resistor_SMD:R_0402_1005Metric") (fields (field (name "Func") "ADDR2/GPIO27 -> 3V3 strap")) (tstamps "00000034")) (comp (ref "R15") (value "0R") (footprint "Resistor_SMD:R_0402_1005Metric") (fields (field (name "Func") "ADDR2/GPIO27 -> GND strap") (field (name "DNP") "y (pick one)")) (tstamps "00000035")) (comp (ref "R16") (value "10k") (footprint "Resistor_SMD:R_0402_1005Metric") (fields (field (name "Func") "ADDR3/GPIO26 -> 3V3 strap")) (tstamps "00000036")) (comp (ref "R17") (value "0R") (footprint "Resistor_SMD:R_0402_1005Metric") (fields (field (name "Func") "ADDR3/GPIO26 -> GND strap") (field (name "DNP") "y (pick one)")) (tstamps "00000037")) ;; ---- Decoupling ---- (comp (ref "C5") (value "10uF") (footprint "Capacitor_SMD:C_0805_2012Metric") (fields (field (name "Func") "3V3 bulk at WROOM pad")) (tstamps "00000040")) (comp (ref "C6") (value "100nF") (footprint "Capacitor_SMD:C_0402_1005Metric") (fields (field (name "Func") "3V3 decap at WROOM pad")) (tstamps "00000041")) (comp (ref "C7") (value "100nF") (footprint "Capacitor_SMD:C_0402_1005Metric") (fields (field (name "Func") "3V3 decap at WROOM pad")) (tstamps "00000042")) (comp (ref "C8") (value "10uF") (footprint "Capacitor_SMD:C_0805_2012Metric") (fields (field (name "Func") "+5V bulk at connector")) (tstamps "00000043")) (comp (ref "C9") (value "22uF") (footprint "Capacitor_SMD:C_0805_2012Metric") (fields (field (name "Func") "3V3 bulk rail")) (tstamps "00000044")) ;; ---- Mounting holes (M3) ---- (comp (ref "H1") (value "MountingHole_M3") (footprint "MountingHole:MountingHole_3.2mm_M3") (tstamps "00000050")) (comp (ref "H2") (value "MountingHole_M3") (footprint "MountingHole:MountingHole_3.2mm_M3") (tstamps "00000051")) (comp (ref "H3") (value "MountingHole_M3") (footprint "MountingHole:MountingHole_3.2mm_M3") (tstamps "00000052")) (comp (ref "H4") (value "MountingHole_M3") (footprint "MountingHole:MountingHole_3.2mm_M3") (tstamps "00000053"))) (libparts) (libraries) (nets ;; ================= POWER ================= (net (code "1") (name "+5V") (node (ref "J1") (pin "1")) (node (ref "J1") (pin "2")) (node (ref "J2") (pin "2")) (node (ref "J3") (pin "1")) (node (ref "C8") (pin "1"))) (net (code "2") (name "+3V3") (node (ref "U1") (pin "2")) (node (ref "J1") (pin "5")) (node (ref "J1") (pin "6")) (node (ref "R4") (pin "1")) (node (ref "R5") (pin "1")) (node (ref "R6") (pin "1")) (node (ref "R7") (pin "1")) (node (ref "R10") (pin "1")) (node (ref "R12") (pin "1")) (node (ref "R14") (pin "1")) (node (ref "R16") (pin "1")) (node (ref "C5") (pin "1")) (node (ref "C6") (pin "1")) (node (ref "C7") (pin "1")) (node (ref "C9") (pin "1"))) (net (code "3") (name "GND") (node (ref "U1") (pin "1")) (node (ref "U1") (pin "15")) (node (ref "U1") (pin "38")) (node (ref "J1") (pin "3")) (node (ref "J1") (pin "4")) (node (ref "J1") (pin "7")) (node (ref "J1") (pin "9")) (node (ref "J1") (pin "11")) (node (ref "J1") (pin "13")) (node (ref "J1") (pin "14")) (node (ref "J1") (pin "26")) (node (ref "J2") (pin "1")) (node (ref "J3") (pin "2")) (node (ref "C1") (pin "2")) (node (ref "C2") (pin "2")) (node (ref "C5") (pin "2")) (node (ref "C6") (pin "2")) (node (ref "C7") (pin "2")) (node (ref "C8") (pin "2")) (node (ref "C9") (pin "2")) (node (ref "R11") (pin "2")) (node (ref "R13") (pin "2")) (node (ref "R15") (pin "2")) (node (ref "R17") (pin "2")) (node (ref "Q1") (pin "2")) (node (ref "Q2") (pin "2")) (node (ref "SW1") (pin "2")) (node (ref "SW2") (pin "2")) (node (ref "H1") (pin "1")) (node (ref "H2") (pin "1")) (node (ref "H3") (pin "1")) (node (ref "H4") (pin "1"))) ;; ================= RESET / BOOT ================= ;; EN: WROOM pin3, pull-up R6, cap C1, button SW1, reset transistor Q1 collector (net (code "4") (name "EN") (node (ref "U1") (pin "3")) (node (ref "R6") (pin "2")) (node (ref "C1") (pin "1")) (node (ref "SW1") (pin "1")) (node (ref "Q1") (pin "3"))) ;; IO0: WROOM pin25 (GPIO0), pull-up R7, cap C2, button SW2, boot transistor Q2 collector (net (code "5") (name "IO0") (node (ref "U1") (pin "25")) (node (ref "R7") (pin "2")) (node (ref "C2") (pin "1")) (node (ref "SW2") (pin "1")) (node (ref "Q2") (pin "3"))) ;; ================= PROGRAMMING UART0 + AUTO RESET/BOOT ================= ;; UART0 RX into ESP = GPIO3 (pad34); prog header pin3 labelled RX (host TX -> ESP RX/IO3) (net (code "6") (name "IO3_RXD0") (node (ref "U1") (pin "34")) (node (ref "J2") (pin "3"))) ;; UART0 TX out of ESP = GPIO1 (pad35); prog header pin4 labelled TX (ESP TX/IO1 -> host RX) (net (code "7") (name "IO1_TXD0") (node (ref "U1") (pin "35")) (node (ref "J2") (pin "4"))) ;; DTR -> C3 -> Q1 base via R8 (reset) (net (code "8") (name "DTR") (node (ref "J2") (pin "5")) (node (ref "C3") (pin "1"))) (net (code "9") (name "Q1_BASE") (node (ref "C3") (pin "2")) (node (ref "R8") (pin "1")) (node (ref "Q1") (pin "1"))) ;; RTS -> C4 -> Q2 base via R9 (boot) (net (code "10") (name "RTS") (node (ref "J2") (pin "6")) (node (ref "C4") (pin "1"))) (net (code "11") (name "Q2_BASE") (node (ref "C4") (pin "2")) (node (ref "R9") (pin "1")) (node (ref "Q2") (pin "1"))) ;; Base resistors pull the bases; classic NodeMCU auto-reset cross-couples R8 to RTS-side and ;; R9 to DTR-side so simultaneous DTR+RTS does not assert. Implemented as cross bias below. (net (code "12") (name "R8_BIAS") (node (ref "R8") (pin "2")) (node (ref "J2") (pin "6"))) (net (code "13") (name "R9_BIAS") (node (ref "R9") (pin "2")) (node (ref "J2") (pin "5"))) ;; ================= I2S ROLE JUMPER FIELD ================= ;; ESP source pins feed jumper input side; jumper output side ties to the I2S bus net. ;; SINK col: GPIO5=BCK(pad29), GPIO25=WS(pad10), GPIO23=DATA(pad37) ;; BCAST col: GPIO19=BCK(pad31), GPIO18=WS(pad30), GPIO22=DATA(pad36) (net (code "20") (name "GPIO5") (node (ref "U1") (pin "29")) (node (ref "JP1") (pin "1"))) (net (code "21") (name "GPIO25") (node (ref "U1") (pin "10")) (node (ref "JP2") (pin "1"))) (net (code "22") (name "GPIO23") (node (ref "U1") (pin "37")) (node (ref "JP3") (pin "1"))) (net (code "23") (name "GPIO19") (node (ref "U1") (pin "31")) (node (ref "JP4") (pin "1"))) (net (code "24") (name "GPIO18") (node (ref "U1") (pin "30")) (node (ref "JP5") (pin "1"))) (net (code "25") (name "GPIO22") (node (ref "U1") (pin "36")) (node (ref "JP6") (pin "1"))) ;; I2S bus nets: jumper outputs from BOTH columns land on the same bus node, ;; then through optional series term R1/R2/R3 to the stacking connector. (net (code "26") (name "I2S_BCK_PRE") (node (ref "JP1") (pin "2")) (node (ref "JP4") (pin "2")) (node (ref "R1") (pin "1"))) (net (code "27") (name "I2S_BCK") (node (ref "R1") (pin "2")) (node (ref "J1") (pin "8"))) (net (code "28") (name "I2S_WS_PRE") (node (ref "JP2") (pin "2")) (node (ref "JP5") (pin "2")) (node (ref "R2") (pin "1"))) (net (code "29") (name "I2S_WS") (node (ref "R2") (pin "2")) (node (ref "J1") (pin "10"))) (net (code "30") (name "I2S_DATA_PRE") (node (ref "JP3") (pin "2")) (node (ref "JP6") (pin "2")) (node (ref "R3") (pin "1"))) (net (code "31") (name "I2S_DATA") (node (ref "R3") (pin "2")) (node (ref "J1") (pin "12"))) ;; ================= I2C ================= ;; GPIO32=SDA(pad8), GPIO33=SCL(pad9) (net (code "40") (name "I2C_SDA") (node (ref "U1") (pin "8")) (node (ref "R4") (pin "2")) (node (ref "J1") (pin "15")) (node (ref "J3") (pin "3"))) (net (code "41") (name "I2C_SCL") (node (ref "U1") (pin "9")) (node (ref "R5") (pin "2")) (node (ref "J1") (pin "16")) (node (ref "J3") (pin "4"))) ;; ================= UART (bus, GPIO17=TX pad28 / GPIO16=RX pad27) ================= (net (code "50") (name "UART_TX") (node (ref "U1") (pin "28")) (node (ref "J1") (pin "17"))) (net (code "51") (name "UART_RX") (node (ref "U1") (pin "27")) (node (ref "J1") (pin "18"))) ;; ================= UART2 second bus pair (19,20 on connector) ================= ;; No dedicated second hardware UART pins routed from MCU on this rev; bus pass-through ;; for daisy-chained boards. Left as connector-only nets (flag for EE if MCU tap needed). (net (code "52") (name "UART2_TX") (node (ref "J1") (pin "19"))) (net (code "53") (name "UART2_RX") (node (ref "J1") (pin "20"))) ;; ================= LED (APA102) ================= ;; CAVEAT: original note said GPIO13 but GPIO13 is an ADDR strap. Reassigned to spare GPIOs: ;; LED_DAT = GPIO21 (pad33), LED_CLK = GPIO4 (pad26). EE to confirm. (net (code "60") (name "LED_DAT") (node (ref "U1") (pin "33")) (node (ref "J1") (pin "21"))) (net (code "61") (name "LED_CLK") (node (ref "U1") (pin "26")) (node (ref "J1") (pin "22"))) ;; ================= ADDRESS STRAPS ================= ;; Each GPIO -> two strap pads: R(10k) to 3V3 OR R(0R) to GND. Populate exactly one. ;; ADDR0 GPIO13 = pad16 (net (code "70") (name "ADDR0_GPIO13") (node (ref "U1") (pin "16")) (node (ref "R10") (pin "2")) (node (ref "R11") (pin "1"))) ;; ADDR1 GPIO14 = pad13 (net (code "71") (name "ADDR1_GPIO14") (node (ref "U1") (pin "13")) (node (ref "R12") (pin "2")) (node (ref "R13") (pin "1"))) ;; ADDR2 GPIO27 = pad12 (net (code "72") (name "ADDR2_GPIO27") (node (ref "U1") (pin "12")) (node (ref "R14") (pin "2")) (node (ref "R15") (pin "1"))) ;; ADDR3 GPIO26 = pad11 (net (code "73") (name "ADDR3_GPIO26") (node (ref "U1") (pin "11")) (node (ref "R16") (pin "2")) (node (ref "R17") (pin "1"))) ;; ================= ADDR CHAIN (connector pass-through 23/24) ================= (net (code "74") (name "ADDR_CHAIN_IN") (node (ref "J1") (pin "23"))) (net (code "75") (name "ADDR_CHAIN_OUT") (node (ref "J1") (pin "24"))) ;; ================= SPARE ================= (net (code "80") (name "SPARE_CONN25") (node (ref "J1") (pin "25")) (node (ref "J3") (pin "5"))) ;; J3 pin6 = NC (HUD), intentionally unconnected ) )