Netlist-first KiCad-import package for the single carrier PCB (ESP32-WROOM-32E, SINK/BROADCASTER assembly variants): - hardware/carrier/resound-carrier.net : KiCad s-expr netlist, 44 components / 40 nets, real library footprints (RF_Module:ESP32-WROOM-32, 2x13 stacking header, 0402 passives, SOT-23 auto-reset, JST-SH HUD conn). Parens balanced. - hardware/carrier/BOM.csv : 44 parts (ref/value/footprint/MPN/DNP/notes). - hardware/carrier/LAYOUT.md : 45x45 4-layer stackup, 15mm antenna keep-out, placement, JLCPCB DRC, SINK-vs-BROADCASTER variant + address-strap table. - hardware/carrier/README.md : KiCad import steps + caveats. Agent decisions flagged for EE: LED moved off the GPIO13 strap to LED_DAT=GPIO21 / LED_CLK=GPIO4; verify WROOM footprint pad numbering; UART2 is connector-only this rev. Deliverable is import-ready netlist+BOM+spec, not a finished .kicad_pcb. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
7.3 KiB
7.3 KiB
Resound Small Build — Carrier PCB Layout & Fab Spec
This document is the layout intent that pairs with resound-carrier.net. The netlist
defines connectivity; this defines board outline, stackup, placement, and design rules.
An engineer imports the netlist into KiCad, then lays out per the constraints here.
1. Board outline
- Size: 45.0 mm x 45.0 mm.
- Corners: rounded, R = 3.0 mm (4x).
- Edge.Cuts layer defines outline. Keep all copper >= 0.3 mm inside the edge except the deliberate antenna keep-out region (see section 4).
2. Stackup (4-layer)
| Layer | Name | Use |
|---|---|---|
| L1 | Sig (top) | Components, signal routing, WROOM, connectors |
| L2 | GND | Solid ground plane (reference for all signals) |
| L3 | PWR | +3V3 / +5V power pours |
| L4 | Sig (bottom) | Signal routing, bottom stacking header, fanout |
- Standard JLCPCB 4-layer: 1.6 mm finished, 0.5 oz inner / 1 oz outer, FR-4 TG155 OK.
- Stitch GND plane to top/bottom ground pours with vias around board perimeter and under the WROOM ground pad array. Place a dense via field under U1's exposed/edge GND pads.
3. Power distribution
- +5V enters on stacking connector J1 pins 1,2. C8 (10uF) bulk at connector.
- +3V3 rail on J1 pins 5,6 (module/regulator assumed upstream on the +3V3 supplying board). C9 (22uF) bulk on 3V3. C5 (10uF) + C6/C7 (100nF) directly at the WROOM 3V3 pad (pad 2), shortest possible loop to nearest GND via.
- Power pour widths: 5V and 3V3 main feeds >= 0.6 mm or plane on L3.
4. Antenna keep-out (CRITICAL)
- U1 (ESP32-WROOM-32E) placed at one board edge with the PCB antenna overhanging the board edge — the antenna end of the module must sit flush with / past the edge cut.
- 15 mm copper keep-out, ALL LAYERS, around the antenna: no copper (no traces, no pours, no plane fill, no ground) within 15 mm of the antenna trace footprint, including L2 GND and L3 PWR planes. Add a keep-out zone on every layer.
- No mounting hardware, no metal, no components in the antenna keep-out.
- This is why U1 lives at the edge and the antenna overhangs: maximize RF clearance.
5. Placement plan
+-----------------------------------------------+
| (H1) (H2) |
| [ U1 ESP32-WROOM-32E ] <- antenna overhang| <- this edge: antenna keep-out 15mm
| 3V3 decap C5/C6/C7 hugging pad 2 |
| |
| [ J1 2x13 stacking connector ] | <- centered, vertical, top+bottom
| I2S jumper field JP1..JP6 near J1 |
| |
| [J2 prog 1x6] Q1 Q2 C3 C4 [SW1] [SW2] | <- opposite edge: prog + buttons
| (H3) [J3 HUD SH1.0 - TOP only] (H4) |
+-----------------------------------------------+
- U1: top edge, antenna overhanging, keep-out enforced.
- J1 stacking connector: centered on the board so the stack aligns mechanically. Top header + mirrored bottom header on the SAME footprint position share nets (pass-through). Verify pin 1 indexing matches between top and bottom of the stack.
- I2S role jumpers JP1..JP6: group as two visible columns (SINK | BROADCASTER) next to J1, silkscreen-label each column and net.
- Address straps R10..R17: group as a labelled field; silkscreen "3V3 / GND" per strap.
- Prog header J2, transistors Q1/Q2, caps C3/C4, buttons SW1/SW2: opposite edge from the antenna, accessible.
- J3 HUD SH1.0: near a board edge, TOP board assembly only.
- Mounting holes H1..H4: 38 x 38 mm square pattern (centered on 45x45 board => holes at +/-19 mm from center X and Y), M3 (3.2 mm), keep clear of antenna keep-out (move the two antenna-edge holes inward if they fall inside the 15 mm keep-out).
6. Design rules (JLCPCB 4-layer, standard)
- Min trace width: 0.127 mm (5 mil); use 0.2 mm default signal, 0.15 mm only in fanout.
- Min spacing: 0.127 mm (5 mil); 0.2 mm default.
- Min via: 0.3 mm drill / 0.6 mm pad; 0.2/0.4 only where needed.
- Min annular ring: 0.13 mm.
- Edge clearance: copper >= 0.3 mm from Edge.Cuts (except antenna keep-out which is larger).
- I2S series termination: R1/R2/R3 (33R) footprints sit inline on I2S_BCK/WS/DATA between the jumper field and J1. Default DNP — if I2S edges ring on the scope across the stack, populate 33R and remove the equivalent direct short. Keep I2S traces short, equal length within the pair set, referenced to L2 GND, away from the antenna.
- Single pull-up rule: I2C SDA/SCL pull-ups (R4/R5) have footprints on EVERY board but are DNP except on the SINK board, so the bus has exactly ONE pull-up pair across the stack.
- Decoupling caps: place on the same layer as U1, vias to L2/L3 directly under the cap pad.
7. Assembly variants (ONE board, two BOMs)
| Item / Net | SINK board | BROADCASTER board |
|---|---|---|
| I2S BCK jumper | JP1 (GPIO5) populated | JP4 (GPIO19) populated |
| I2S WS jumper | JP2 (GPIO25) populated | JP5 (GPIO18) populated |
| I2S DATA jumper | JP3 (GPIO23) populated | JP6 (GPIO22) populated |
| Opposite I2S column | JP4/JP5/JP6 DNP | JP1/JP2/JP3 DNP |
| I2C pull-up R4 (SDA) | populate 4.7k | DNP |
| I2C pull-up R5 (SCL) | populate 4.7k | DNP |
| I2S series term R1-R3 | DNP (unless ringing) | DNP (unless ringing) |
| HUD connector J3 | per mechanical (TOP only) | per mechanical (TOP only) |
| Address straps | per node address (see below) | per node address |
| Reset/boot/prog (R6-9, C1-4, Q1-2, SW1-2, J2) | populate | populate |
| Decoupling C5-C9 | populate | populate |
Address straps (R10..R17): for each of ADDR0..ADDR3, populate EXACTLY ONE of the pair:
- "1" / high => populate the 10k-to-3V3 resistor (R10/R12/R14/R16), leave the 0R-to-GND DNP.
- "0" / low => populate the 0R-to-GND resistor (R11/R13/R15/R17), leave the 10k DNP.
This is independent of SINK/BROADCASTER — it sets each board's bus address in the stack.
8. Connector pinouts (reference)
J1 — 26-pin (2x13) stacking, 2.54 mm, pass-through (top + mirrored bottom)
| Pin | Net | Pin | Net |
|---|---|---|---|
| 1 | +5V | 2 | +5V |
| 3 | GND | 4 | GND |
| 5 | +3V3 | 6 | +3V3 |
| 7 | GND | 8 | I2S_BCK |
| 9 | GND | 10 | I2S_WS |
| 11 | GND | 12 | I2S_DATA |
| 13 | GND | 14 | GND |
| 15 | I2C_SDA | 16 | I2C_SCL |
| 17 | UART_TX | 18 | UART_RX |
| 19 | UART2_TX | 20 | UART2_RX |
| 21 | LED_DAT | 22 | LED_CLK |
| 23 | ADDR_CHAIN_IN | 24 | ADDR_CHAIN_OUT |
| 25 | SPARE | 26 | GND |
J2 — programming 1x6, 2.54 mm
1=GND, 2=+5V, 3=RX (IO3 / GPIO3), 4=TX (IO1 / GPIO1), 5=DTR, 6=RTS
J3 — HUD SH1.0 1x6 (TOP board only)
1=+5V (VSYS), 2=GND, 3=I2C_SDA, 4=I2C_SCL, 5=SPARE, 6=NC (Verify physical pin order against the HUD cable before fab — see README caveat.)