blue 2c6e7e8762 hardware: KiCad bootstrap for the Resound carrier PCB (Small Build)
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>
2026-06-11 15:10:15 -04:00

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.)