feat(plip): init PLIP telephone project
- Design spec for ESP32 + Si3210 SLIC PCB - Hardware implementation plan (7 tasks) - BOM with 15/18 LCSC parts confirmed - Project structure: libs, gerbers, jlcpcb dirs
This commit is contained in:
@@ -0,0 +1,498 @@
|
||||
# PLIP Téléphone — Hardware Implementation Plan (KiCad)
|
||||
|
||||
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
|
||||
|
||||
**Goal:** Design and fabricate a compact PCB (ESP32 + Si3210 SLIC) for the Zacus escape room telephone module, using the full EDA MCP pipeline (sourcing → schéma → PCB → review → JLCPCB export).
|
||||
|
||||
**Architecture:** KiCad 9 project with custom Si3210 symbol/footprint, ESP32-WROOM-32E module, CP2102N USB-UART bridge, RJ9 connector for handset, micro SD slot, JST UI link. 2-layer PCB < 60x40mm, JLCPCB assembly with LCSC parts.
|
||||
|
||||
**Tech Stack:** KiCad 9, MCP servers (jlcmcp-remote, jlcpcb-search, kicad-sch, kicad-design, kicad-fab), kicad-happy skills
|
||||
|
||||
**Spec:** `docs/superpowers/specs/2026-04-08-plip-telephone-design.md`
|
||||
|
||||
---
|
||||
|
||||
## File Structure
|
||||
|
||||
### New Files
|
||||
|
||||
| File | Responsibility |
|
||||
|------|---------------|
|
||||
| `hardware/projects/plip-telephone/plip-telephone.kicad_pro` | KiCad project file |
|
||||
| `hardware/projects/plip-telephone/plip-telephone.kicad_sch` | Schematic (single sheet) |
|
||||
| `hardware/projects/plip-telephone/plip-telephone.kicad_pcb` | PCB layout |
|
||||
| `hardware/projects/plip-telephone/libs/Si3210.kicad_sym` | Custom Si3210 symbol |
|
||||
| `hardware/projects/plip-telephone/libs/Si3210_QFN38.kicad_mod` | Custom Si3210 QFN-38 footprint |
|
||||
| `hardware/projects/plip-telephone/libs/RJ9_4P4C.kicad_mod` | RJ9 connector footprint |
|
||||
| `hardware/projects/plip-telephone/gerbers/` | Gerber output directory |
|
||||
| `hardware/projects/plip-telephone/jlcpcb/` | BOM + CPL for JLCPCB assembly |
|
||||
| `hardware/projects/plip-telephone/README.md` | Project documentation |
|
||||
|
||||
---
|
||||
|
||||
## Task 1: Source Components via JLCPCB MCPs
|
||||
|
||||
**Files:**
|
||||
- Create: `hardware/projects/plip-telephone/README.md`
|
||||
|
||||
Before any KiCad work, validate that all components are available on LCSC with confirmed part numbers and stock.
|
||||
|
||||
- [ ] **Step 1: Create project directory**
|
||||
|
||||
```bash
|
||||
mkdir -p "/Users/electron/Documents/Projets_Creatifs/le-mystere-professeur-zacus/hardware/projects/plip-telephone/libs"
|
||||
mkdir -p "/Users/electron/Documents/Projets_Creatifs/le-mystere-professeur-zacus/hardware/projects/plip-telephone/gerbers"
|
||||
mkdir -p "/Users/electron/Documents/Projets_Creatifs/le-mystere-professeur-zacus/hardware/projects/plip-telephone/jlcpcb"
|
||||
```
|
||||
|
||||
- [ ] **Step 2: Source Si3210 via jlcmcp-remote MCP**
|
||||
|
||||
Use the `jlcmcp-remote` MCP tool to search:
|
||||
```
|
||||
Search: "Si3210-E-FM"
|
||||
Verify: LCSC C6295850, stock > 0, price ~$2.70
|
||||
```
|
||||
|
||||
- [ ] **Step 3: Source ESP32-WROOM-32E**
|
||||
|
||||
```
|
||||
Search: "ESP32-WROOM-32E-N16"
|
||||
Verify: LCSC C701341, stock > 100
|
||||
```
|
||||
|
||||
- [ ] **Step 4: Source CP2102N USB-UART bridge**
|
||||
|
||||
```
|
||||
Search: "CP2102N QFN"
|
||||
Verify: LCSC C6568 or variant, stock > 100
|
||||
```
|
||||
|
||||
- [ ] **Step 5: Source 600Ω:600Ω audio transformer**
|
||||
|
||||
```
|
||||
Search: "600 ohm audio transformer SMD"
|
||||
Alternative search: "telephone line transformer 600"
|
||||
Fallback: "PE-65612" or "TY-401P" or equivalent
|
||||
```
|
||||
|
||||
If no SMD transformer available, search for through-hole:
|
||||
```
|
||||
Search: "600:600 transformer through hole"
|
||||
```
|
||||
|
||||
- [ ] **Step 6: Source RJ9 4P4C connector**
|
||||
|
||||
```
|
||||
Search: "RJ9 4P4C female PCB"
|
||||
Alternative: "RJ10 4P4C connector"
|
||||
```
|
||||
|
||||
- [ ] **Step 7: Source remaining components**
|
||||
|
||||
Search and confirm each:
|
||||
- ME6211C33M5G-N (LDO 3.3V): C82942
|
||||
- USB-C 16pin SMD: C2765186
|
||||
- Micro SD slot: C585353
|
||||
- JST-SH 4pin: C265021
|
||||
- 100nF 0402: C307331
|
||||
- 10µF 0805: C19702
|
||||
- 10k 0402: C25744
|
||||
- LED 0402 green: C2286
|
||||
- ESD protection USB (USBLC6-2SC6): C7519
|
||||
|
||||
- [ ] **Step 8: Write README with confirmed BOM**
|
||||
|
||||
Create `hardware/projects/plip-telephone/README.md`:
|
||||
|
||||
```markdown
|
||||
# PLIP Téléphone — Zacus Escape Room
|
||||
|
||||
## Description
|
||||
Custom PCB: ESP32-WROOM-32E + Si3210 SLIC for driving a retro
|
||||
telephone handset in the Zacus escape room.
|
||||
|
||||
## Features
|
||||
- Si3210 SLIC: ring generation, off-hook detect, audio codec
|
||||
- Bluetooth Classic: A2DP sink + HFP hands-free
|
||||
- WiFi: commands + Piper TTS streaming
|
||||
- Micro SD: local audio storage
|
||||
- UART: UI link to ESP8266/RP2040 display
|
||||
- RJ9: standard telephone handset connector
|
||||
|
||||
## BOM
|
||||
See `jlcpcb/bom.csv` for full LCSC part list.
|
||||
|
||||
## Fabrication
|
||||
Target: JLCPCB 2-layer, HASL lead-free, SMT assembly top side.
|
||||
```
|
||||
|
||||
- [ ] **Step 9: Commit**
|
||||
|
||||
```bash
|
||||
cd "/Users/electron/Documents/Projets_Creatifs/le-mystere-professeur-zacus"
|
||||
git add hardware/projects/plip-telephone/
|
||||
git commit -m "feat(plip): init project, source BOM"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Task 2: Create Si3210 KiCad Symbol
|
||||
|
||||
**Files:**
|
||||
- Create: `hardware/projects/plip-telephone/libs/Si3210.kicad_sym`
|
||||
|
||||
The Si3210-E-FM (QFN-38, 5x7mm) is not in the KiCad standard library. Create a custom symbol.
|
||||
|
||||
- [ ] **Step 1: Create the Si3210 symbol file**
|
||||
|
||||
Create `hardware/projects/plip-telephone/libs/Si3210.kicad_sym` with all 38 pins organized by function:
|
||||
|
||||
**Pin groups (left side):**
|
||||
- SPI: SCLK(34), SDI(33), SDO(32), CS(35)
|
||||
- PCM: PCLK(37), FSYNC(2), DTX(1), DRX(38)
|
||||
- Control: RESET(3), INT(36), TEST(28)
|
||||
|
||||
**Pin groups (right side):**
|
||||
- Line TIP: STIPAC(16), STIPDC(11), STIPE(13), ITIPP(24), ITIPN(25)
|
||||
- Line RING: SRINGAC(17), SRINGDC(12), SRINGE(15), IRINGP(22), IRINGN(21)
|
||||
- DC-DC: DCDRV(30), DCFF(29), SVBAT(14)
|
||||
|
||||
**Pin groups (top):**
|
||||
- Power: VDDA1(6), VDDA2(23), VDDD(26)
|
||||
|
||||
**Pin groups (bottom):**
|
||||
- Ground: GNDA(19), GNDD(27), QGND(9)
|
||||
- Analog: IREF(7), CAPP(8), CAPM(10), IGMP(20), IGMN(18)
|
||||
- Serial: SDCH(4), SDCL(5), SDITHRU(31)
|
||||
|
||||
Use the `kicad-sch` MCP or manually create the .kicad_sym file following KiCad 9 format.
|
||||
|
||||
- [ ] **Step 2: Verify the symbol loads in KiCad**
|
||||
|
||||
```bash
|
||||
kicad-cli sym export svg \
|
||||
"/Users/electron/Documents/Projets_Creatifs/le-mystere-professeur-zacus/hardware/projects/plip-telephone/libs/Si3210.kicad_sym" \
|
||||
-o /tmp/si3210_sym.svg
|
||||
open /tmp/si3210_sym.svg
|
||||
```
|
||||
|
||||
- [ ] **Step 3: Commit**
|
||||
|
||||
```bash
|
||||
git add hardware/projects/plip-telephone/libs/Si3210.kicad_sym
|
||||
git commit -m "feat(plip): add Si3210 KiCad symbol"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Task 3: Create Si3210 QFN-38 Footprint
|
||||
|
||||
**Files:**
|
||||
- Create: `hardware/projects/plip-telephone/libs/Si3210_QFN38.kicad_mod`
|
||||
|
||||
QFN-38, 5x7mm body, 0.5mm pitch, exposed pad.
|
||||
|
||||
- [ ] **Step 1: Create the footprint**
|
||||
|
||||
Use the `kicad-design` MCP or KiCad footprint editor. QFN-38 specs from Si3210 datasheet:
|
||||
- Body: 5.0 x 7.0 mm
|
||||
- Pad pitch: 0.5 mm
|
||||
- Pad size: 0.25 x 0.75 mm
|
||||
- Pin 1 marker: top-left
|
||||
- Exposed pad: 3.4 x 5.4 mm (thermal)
|
||||
- Pin distribution: 10 pins on 5mm sides, 9 pins on 7mm sides
|
||||
|
||||
- [ ] **Step 2: Verify footprint**
|
||||
|
||||
```bash
|
||||
kicad-cli fp export svg \
|
||||
"/Users/electron/Documents/Projets_Creatifs/le-mystere-professeur-zacus/hardware/projects/plip-telephone/libs/Si3210_QFN38.kicad_mod" \
|
||||
-o /tmp/si3210_fp.svg
|
||||
open /tmp/si3210_fp.svg
|
||||
```
|
||||
|
||||
- [ ] **Step 3: Commit**
|
||||
|
||||
```bash
|
||||
git add hardware/projects/plip-telephone/libs/Si3210_QFN38.kicad_mod
|
||||
git commit -m "feat(plip): add Si3210 QFN-38 footprint"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Task 4: Create KiCad Schematic
|
||||
|
||||
**Files:**
|
||||
- Create: `hardware/projects/plip-telephone/plip-telephone.kicad_pro`
|
||||
- Create: `hardware/projects/plip-telephone/plip-telephone.kicad_sch`
|
||||
|
||||
Single-sheet schematic with 6 blocks.
|
||||
|
||||
- [ ] **Step 1: Create KiCad project**
|
||||
|
||||
Create `plip-telephone.kicad_pro` (KiCad 9 project file) with library paths pointing to `./libs/`.
|
||||
|
||||
- [ ] **Step 2: Place ESP32-WROOM-32E**
|
||||
|
||||
Use KiCad standard library symbol `RF_Module:ESP32-WROOM-32E`. Connect:
|
||||
- 3V3 → power rail
|
||||
- GND → ground
|
||||
- EN → 10k pull-up to 3V3
|
||||
- GPIO0 → 10k pull-up + DTR auto-reset circuit
|
||||
- IO18 → SPI SCLK
|
||||
- IO23 → SPI MOSI
|
||||
- IO19 → SPI MISO
|
||||
- IO5 → Si3210 CS
|
||||
- IO15 → SD CS
|
||||
- IO4 → Si3210 INT
|
||||
- IO2 → Si3210 RESET
|
||||
- IO26 → I2S BCLK
|
||||
- IO25 → I2S LRCLK
|
||||
- IO22 → I2S DOUT
|
||||
- IO35 → I2S DIN
|
||||
- IO17 → UART2 TX (UI)
|
||||
- IO16 → UART2 RX (UI)
|
||||
- IO1 → CP2102N RXD
|
||||
- IO3 → CP2102N TXD
|
||||
|
||||
- [ ] **Step 3: Place Si3210 SLIC**
|
||||
|
||||
Use the custom Si3210 symbol from Task 2. Connect:
|
||||
- SPI (SCLK, SDI, SDO, CS) → ESP32 SPI bus
|
||||
- PCM (PCLK, FSYNC, DTX, DRX) → ESP32 I2S pins
|
||||
- RESET → ESP32 IO2
|
||||
- INT → ESP32 IO4
|
||||
- VDDA1, VDDA2 → 3.3V with 100nF decoupling each
|
||||
- VDDD → 3.3V with 100nF decoupling
|
||||
- GNDA, GNDD, QGND → GND
|
||||
- DC-DC section: DCDRV → inductor 100µH → SVBAT, DCFF → resistor divider feedback
|
||||
- Line section: STIPAC/SRINGAC → 600Ω transformer primary → RJ9
|
||||
- IREF → 20kΩ to GND (reference current)
|
||||
- CAPP/CAPM → 100nF cap between pins
|
||||
- TEST → GND (normal operation)
|
||||
|
||||
- [ ] **Step 4: Place CP2102N USB-UART bridge**
|
||||
|
||||
Use KiCad standard library `Interface_USB:CP2102N-A02-GQFN24`. Connect:
|
||||
- D+/D- → USB-C data pins (via 22Ω series resistors)
|
||||
- TXD → ESP32 IO3 (RX)
|
||||
- RXD → ESP32 IO1 (TX)
|
||||
- DTR → auto-reset circuit (100nF cap → ESP32 EN)
|
||||
- RTS → auto-reset circuit (100nF cap → ESP32 IO0)
|
||||
- VDD → USB 5V via ferrite bead
|
||||
- REGIN → USB 5V
|
||||
- VBUS → USB 5V (for USB detect)
|
||||
|
||||
- [ ] **Step 5: Place power section**
|
||||
|
||||
- USB-C connector (16pin) with CC1/CC2 5.1kΩ pull-down (UFP identification)
|
||||
- ESD protection: USBLC6-2SC6 on D+/D-
|
||||
- ME6211C33 LDO: VIN ← USB 5V, VOUT → 3.3V rail, CIN 1µF, COUT 1µF
|
||||
- Bulk capacitors: 10µF on 3.3V rail (×2)
|
||||
- Decoupling: 100nF on each IC VDD pin
|
||||
|
||||
- [ ] **Step 6: Place SD card and connectors**
|
||||
|
||||
- Micro SD slot: SPI mode (CLK, MOSI, MISO, CS) + 10kΩ pull-ups on all data lines
|
||||
- RJ9 4P4C: 4 pins → transformer secondary
|
||||
- JST-SH 4pin: TX, RX, 3V3, GND (UART UI link)
|
||||
- 2× LEDs 0402 (power + status) with 1kΩ series resistors
|
||||
|
||||
- [ ] **Step 7: Add transformer and line protection**
|
||||
|
||||
600Ω:600Ω audio transformer between Si3210 AC outputs (STIPAC, SRINGAC) and RJ9 pins.
|
||||
Add protection diodes (TVS) on RJ9 side for ESD.
|
||||
|
||||
- [ ] **Step 8: Run ERC**
|
||||
|
||||
```bash
|
||||
kicad-cli sch erc \
|
||||
"/Users/electron/Documents/Projets_Creatifs/le-mystere-professeur-zacus/hardware/projects/plip-telephone/plip-telephone.kicad_sch"
|
||||
```
|
||||
|
||||
Expected: 0 errors (warnings acceptable for unconnected pins like TEST).
|
||||
|
||||
- [ ] **Step 9: Commit**
|
||||
|
||||
```bash
|
||||
git add hardware/projects/plip-telephone/plip-telephone.kicad_pro
|
||||
git add hardware/projects/plip-telephone/plip-telephone.kicad_sch
|
||||
git commit -m "feat(plip): complete schematic"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Task 5: PCB Layout and Routing
|
||||
|
||||
**Files:**
|
||||
- Create: `hardware/projects/plip-telephone/plip-telephone.kicad_pcb`
|
||||
|
||||
Target: < 60 x 40 mm, 2 layers.
|
||||
|
||||
- [ ] **Step 1: Set design rules**
|
||||
|
||||
Use `kicad-design` MCP:
|
||||
- Clearance: 0.15mm
|
||||
- Min trace width: 0.2mm
|
||||
- Min via drill: 0.3mm
|
||||
- Power trace width: 0.4mm
|
||||
- Board outline: 58 x 38 mm (rounded corners 1mm)
|
||||
|
||||
- [ ] **Step 2: Component placement**
|
||||
|
||||
Layout strategy:
|
||||
```
|
||||
┌──────────────────────────────────┐
|
||||
│ USB-C CP2102N SD card │ ← Top edge
|
||||
│ │
|
||||
│ ME6211 ESP32-WROOM-32E │ ← Center (antenna → right edge, clear)
|
||||
│ (LDO) │
|
||||
│ │
|
||||
│ Si3210 Transfo RJ9 │ ← Bottom edge
|
||||
│ + DCDC 600Ω │
|
||||
│ │
|
||||
│ JST(UI) LEDs │ ← Left edge
|
||||
└──────────────────────────────────┘
|
||||
```
|
||||
|
||||
Key rules:
|
||||
- ESP32 antenna area: NO copper (GND or traces) under antenna on BOTH layers
|
||||
- Si3210 exposed pad: large thermal via array to bottom GND plane
|
||||
- Transformer: keep close to Si3210 and RJ9, short traces
|
||||
- USB-C: close to CP2102N, differential pair routing
|
||||
|
||||
- [ ] **Step 3: Route with Freerouting**
|
||||
|
||||
Use `kicad-design` MCP with Freerouting Docker:
|
||||
```
|
||||
1. Export DSN from KiCad
|
||||
2. Run Freerouting autorouter
|
||||
3. Import SES result
|
||||
4. Manual cleanup of critical traces (USB diff pair, I2S, SPI)
|
||||
```
|
||||
|
||||
- [ ] **Step 4: Manual cleanup**
|
||||
|
||||
After autoroute:
|
||||
- Verify USB D+/D- are routed as differential pair (90Ω impedance)
|
||||
- Verify SPI and I2S traces are short and direct
|
||||
- Verify power traces are wide enough (0.4mm+)
|
||||
- Add stitching vias around board edges
|
||||
- Fill remaining areas with GND copper pour (both layers)
|
||||
|
||||
- [ ] **Step 5: Run DRC**
|
||||
|
||||
```bash
|
||||
kicad-cli pcb drc \
|
||||
"/Users/electron/Documents/Projets_Creatifs/le-mystere-professeur-zacus/hardware/projects/plip-telephone/plip-telephone.kicad_pcb"
|
||||
```
|
||||
|
||||
Expected: 0 errors.
|
||||
|
||||
- [ ] **Step 6: Commit**
|
||||
|
||||
```bash
|
||||
git add hardware/projects/plip-telephone/plip-telephone.kicad_pcb
|
||||
git commit -m "feat(plip): PCB layout and routing"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Task 6: Design Review (kicad-happy skills)
|
||||
|
||||
**Files:** No new files — review only.
|
||||
|
||||
- [ ] **Step 1: DFM review**
|
||||
|
||||
Use kicad-happy `kicad` skill:
|
||||
- Check minimum trace/space against JLCPCB capabilities
|
||||
- Check via sizes
|
||||
- Check silk clearances
|
||||
- Check board edge clearance
|
||||
|
||||
- [ ] **Step 2: EMC pre-compliance**
|
||||
|
||||
Use kicad-happy `emc` skill:
|
||||
- Check decoupling capacitor placement (< 5mm from IC pins)
|
||||
- Check return path continuity (no GND plane splits under signal traces)
|
||||
- Check USB differential pair routing
|
||||
- Check I2S/SPI clock trace lengths
|
||||
|
||||
- [ ] **Step 3: Fix any issues found**
|
||||
|
||||
Apply corrections from review, re-run DRC.
|
||||
|
||||
- [ ] **Step 4: Commit fixes**
|
||||
|
||||
```bash
|
||||
git add hardware/projects/plip-telephone/plip-telephone.kicad_pcb
|
||||
git commit -m "fix(plip): apply DFM/EMC review fixes"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Task 7: JLCPCB Export
|
||||
|
||||
**Files:**
|
||||
- Create: `hardware/projects/plip-telephone/gerbers/*`
|
||||
- Create: `hardware/projects/plip-telephone/jlcpcb/bom.csv`
|
||||
- Create: `hardware/projects/plip-telephone/jlcpcb/cpl.csv`
|
||||
|
||||
- [ ] **Step 1: Export Gerbers**
|
||||
|
||||
```bash
|
||||
kicad-cli pcb export gerbers \
|
||||
"/Users/electron/Documents/Projets_Creatifs/le-mystere-professeur-zacus/hardware/projects/plip-telephone/plip-telephone.kicad_pcb" \
|
||||
-o "/Users/electron/Documents/Projets_Creatifs/le-mystere-professeur-zacus/hardware/projects/plip-telephone/gerbers/"
|
||||
|
||||
kicad-cli pcb export drill \
|
||||
"/Users/electron/Documents/Projets_Creatifs/le-mystere-professeur-zacus/hardware/projects/plip-telephone/plip-telephone.kicad_pcb" \
|
||||
-o "/Users/electron/Documents/Projets_Creatifs/le-mystere-professeur-zacus/hardware/projects/plip-telephone/gerbers/"
|
||||
```
|
||||
|
||||
- [ ] **Step 2: Generate BOM for JLCPCB**
|
||||
|
||||
Use kicad-happy `bom` skill or `kicad-design` MCP `export_jlcpcb` tool:
|
||||
- Format: `Designator,Package,Quantity,LCSC Part Number`
|
||||
- Ensure all LCSC IDs are populated from Task 1 sourcing
|
||||
|
||||
Save to `jlcpcb/bom.csv`.
|
||||
|
||||
- [ ] **Step 3: Generate CPL (Component Placement List)**
|
||||
|
||||
Export component positions:
|
||||
```bash
|
||||
kicad-cli pcb export pos \
|
||||
"/Users/electron/Documents/Projets_Creatifs/le-mystere-professeur-zacus/hardware/projects/plip-telephone/plip-telephone.kicad_pcb" \
|
||||
--format csv --units mm --side front \
|
||||
-o "/Users/electron/Documents/Projets_Creatifs/le-mystere-professeur-zacus/hardware/projects/plip-telephone/jlcpcb/cpl.csv"
|
||||
```
|
||||
|
||||
Use kicad-happy `jlcpcb` skill to apply rotation offset corrections (JLCPCB rotation table).
|
||||
|
||||
- [ ] **Step 4: Verify JLCPCB package**
|
||||
|
||||
Check:
|
||||
- All Gerber layers present (F.Cu, B.Cu, F.SilkS, B.SilkS, F.Mask, B.Mask, Edge.Cuts, drill)
|
||||
- BOM has LCSC part numbers for all assembled components
|
||||
- CPL has correct rotations (preview in JLCPCB)
|
||||
|
||||
- [ ] **Step 5: Commit**
|
||||
|
||||
```bash
|
||||
git add hardware/projects/plip-telephone/gerbers/
|
||||
git add hardware/projects/plip-telephone/jlcpcb/
|
||||
git commit -m "feat(plip): JLCPCB export (gerbers+BOM+CPL)"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Validation Criteria
|
||||
|
||||
1. **ERC clean** — 0 errors on schematic
|
||||
2. **DRC clean** — 0 errors on PCB
|
||||
3. **DFM passed** — kicad-happy review OK
|
||||
4. **BOM 100% sourced** — all LCSC IDs confirmed in stock
|
||||
5. **CPL rotations corrected** — kicad-happy JLCPCB rotation table applied
|
||||
6. **Gerbers complete** — all layers exported
|
||||
7. **Board < 60x40mm** — 2 layers, HASL lead-free
|
||||
@@ -0,0 +1,165 @@
|
||||
# Zacus PLIP Téléphone — Design Spec
|
||||
|
||||
## Overview
|
||||
|
||||
PCB custom compact pour le module téléphone de l'escape room "Le Mystère du Professeur Zacus". Remplace le dev kit ESP32 Audio Kit V2.2 (A252) par une carte intégrée ESP32 + SLIC Si3210, pilotant un combiné téléphone rétro via RJ9. Utilise un ESP32 classique (pas S3) pour le support Bluetooth Classic (A2DP audio streaming + HFP hands-free).
|
||||
|
||||
## Goals
|
||||
|
||||
- Piloter un combiné téléphone rétro (sonnerie, audio bidirectionnel, détection décrochage)
|
||||
- Recevoir des commandes et du stream audio TTS via WiFi (Piper TTS sur Tower:8001)
|
||||
- Bluetooth Classic A2DP (recevoir audio streaming depuis téléphone/tablette) et HFP (hands-free profile)
|
||||
- Stocker des fichiers audio locaux sur SD card
|
||||
- Communiquer avec l'UI ESP8266/RP2040 via UART
|
||||
- Format compact, fabricable chez JLCPCB avec composants LCSC
|
||||
- Premier projet du pipeline EDA MCP complet (sourcing → schéma → PCB → review → JLCPCB)
|
||||
|
||||
## Non-goals
|
||||
|
||||
- Pas de haut-parleur externe (audio uniquement via le combiné)
|
||||
- Pas d'amplificateur de puissance séparé
|
||||
- Pas de codec audio externe (le Si3210 a un codec intégré)
|
||||
|
||||
## Hardware Architecture
|
||||
|
||||
```
|
||||
USB-C
|
||||
│
|
||||
[ESD + LDO 3.3V]
|
||||
│
|
||||
┌─────────────────┼─────────────────┐
|
||||
│ │ │
|
||||
[ESP32] [Si3210 SLIC] [SD Card]
|
||||
SPI master ──── SPI slave SPI slave
|
||||
PCM/I2S ────── PCM codec
|
||||
GPIO ─────────── RESET, INT
|
||||
UART TX/RX ─── → JST UI link
|
||||
WiFi ──────── → Tower/Piper TTS
|
||||
│
|
||||
[Transfo 600Ω]
|
||||
│
|
||||
[RJ9 4P4C]
|
||||
│
|
||||
[Combiné rétro]
|
||||
```
|
||||
|
||||
### Blocs fonctionnels
|
||||
|
||||
1. **ESP32-WROOM-32E** — MCU principal, WiFi, Bluetooth Classic (A2DP + HFP), SPI master, I2S
|
||||
2. **Si3210-E-FM** — SLIC, codec PCM intégré, génération sonnerie -72V, détection off-hook, contrôle SPI
|
||||
3. **CP2102N** — USB-UART bridge pour programmation et debug série
|
||||
4. **Alimentation** — USB-C (5V) + LDO ME6211C33 (3.3V). Le Si3210 intègre son propre DC-DC pour la ring voltage.
|
||||
5. **Micro SD** — Slot micro SD en SPI, stockage audio (MP3, WAV, OPUS)
|
||||
6. **UART UI link** — JST-SH 4 pins (TX, RX, 3.3V, GND) vers UI ESP8266 OLED ou RP2040 TFT
|
||||
7. **Connecteur combiné** — RJ9 4P4C standard téléphone + transfo 600Ω:600Ω d'isolation
|
||||
|
||||
## Pin Mapping ESP32
|
||||
|
||||
| Fonction | GPIO | Notes |
|
||||
|----------|------|-------|
|
||||
| SPI SCLK (SLIC + SD) | GPIO18 | VSPI CLK, bus partagé |
|
||||
| SPI MOSI | GPIO23 | VSPI MOSI |
|
||||
| SPI MISO | GPIO19 | VSPI MISO |
|
||||
| SLIC CS | GPIO5 | Si3210 chip select |
|
||||
| SD CS | GPIO15 | SD card chip select |
|
||||
| SLIC INT | GPIO4 | Si3210 interrupt (off-hook, ring done) |
|
||||
| SLIC RESET | GPIO2 | Si3210 hardware reset |
|
||||
| I2S BCLK | GPIO26 | I2S bit clock vers Si3210 PCM |
|
||||
| I2S LRCLK | GPIO25 | I2S word select / PCM FSYNC |
|
||||
| I2S DOUT | GPIO22 | ESP32 → Si3210 (audio vers combiné) |
|
||||
| I2S DIN | GPIO35 | Si3210 → ESP32 (audio depuis micro, input-only) |
|
||||
| UART TX (UI) | GPIO17 | UART2 TX → UI link |
|
||||
| UART RX (UI) | GPIO16 | UART2 RX ← UI link |
|
||||
| UART TX (debug) | GPIO1 | UART0 TX (USB-UART bridge CP2102/CH340) |
|
||||
| UART RX (debug) | GPIO3 | UART0 RX |
|
||||
| LED status | GPIO13 | LED power/status |
|
||||
|
||||
Note: L'ESP32 classique n'a pas d'USB natif. Le USB-C utilise un bridge UART (CP2102 ou CH340) pour la programmation et le debug série.
|
||||
|
||||
## BOM
|
||||
|
||||
| # | Composant | Ref LCSC | Qté | Prix unit | Rôle |
|
||||
|---|-----------|----------|-----|-----------|------|
|
||||
| 1 | ESP32-WROOM-32E-N16 | C701341 | 1 | ~$2.80 | MCU + WiFi + BT Classic |
|
||||
| 2 | Si3210-E-FM | C6295850 | 1 | $2.70 | SLIC + codec |
|
||||
| 3 | Transfo audio 600Ω:600Ω | TBD | 1 | ~$0.50 | Isolation ligne téléphone |
|
||||
| 4 | ME6211C33M5G-N | C82942 | 1 | $0.10 | LDO 3.3V 500mA |
|
||||
| 5 | USB-C 16pin SMD | C2765186 | 1 | $0.15 | Alimentation + UART debug |
|
||||
| 5b | CP2102N (USB-UART bridge) | C6568 | 1 | $1.50 | Programmation + debug série |
|
||||
| 6 | Micro SD slot push-push | C585353 | 1 | $0.20 | Stockage audio |
|
||||
| 7 | RJ9 4P4C female | TBD | 1 | ~$0.30 | Connecteur combiné |
|
||||
| 8 | JST-SH 4pin SMD | C265021 | 1 | $0.10 | UART UI link |
|
||||
| 9 | Capas 100nF 0402 | C307331 | 10 | $0.01 | Découplage |
|
||||
| 10 | Capas 10µF 0805 | C19702 | 4 | $0.02 | Bulk bypass |
|
||||
| 11 | Résistances 10k 0402 | C25744 | 4 | $0.01 | Pull-ups SPI |
|
||||
| 12 | LED status 0402 | C2286 | 2 | $0.02 | Power + status |
|
||||
| 13 | ESD protection USB | C7519 | 1 | $0.10 | TVS diode array |
|
||||
| | **Total estimé** | | | **~$8-9** | |
|
||||
|
||||
Note: Le transfo 600Ω et le RJ9 doivent être sourcés via les MCPs JLCPCB (`jlcmcp-remote` ou `jlcpcb-search`). Ce seront les premières recherches du pipeline EDA.
|
||||
|
||||
## PCB Specs
|
||||
|
||||
| Paramètre | Valeur |
|
||||
|-----------|--------|
|
||||
| Dimensions | < 60 x 40 mm |
|
||||
| Couches | 2 (top + bottom) |
|
||||
| Épaisseur | 1.6mm standard |
|
||||
| Finish | HASL lead-free |
|
||||
| Cuivre | 1oz |
|
||||
| Min trace/space | 0.15mm / 0.15mm |
|
||||
| Min via | 0.3mm drill |
|
||||
| Assemblage | JLCPCB SMT (top side) |
|
||||
|
||||
### Layout guidelines
|
||||
|
||||
- ESP32 en haut, antenne WiFi dégagée vers le bord du PCB (pas de cuivre sous l'antenne)
|
||||
- Si3210 au centre, proche du transfo et du RJ9
|
||||
- USB-C sur un bord court
|
||||
- SD card sur un bord accessible
|
||||
- JST UI link sur un bord latéral
|
||||
- Plan de masse continu sur bottom layer
|
||||
|
||||
## Firmware
|
||||
|
||||
Le firmware existant `slic-phone-esp32` sera adapté :
|
||||
|
||||
1. **Driver Si3210** — remplace le driver ES8388. SPI init, registre config, ring control, off-hook interrupt.
|
||||
2. **Audio path** — PCM bidirectionnel via I2S. Lecture MP3/WAV depuis SD → PCM out. Micro combiné → PCM in.
|
||||
3. **WiFi** — REST endpoint pour commandes (ring, play, stop, volume). WebSocket pour stream Piper TTS.
|
||||
4. **UART UI link** — protocole v2 inchangé (57600 baud).
|
||||
5. **Scénarios** — Runtime 3 IR, déclenchement sur off-hook, enchaînement audio.
|
||||
|
||||
## Fonctionnement
|
||||
|
||||
1. **Sonnerie** — Système Zacus envoie commande WiFi `POST /ring` → ESP32 commande Si3210 via SPI → Si3210 génère -72V ring → combiné sonne
|
||||
2. **Décrochage** — Si3210 détecte off-hook → INT GPIO4 → ESP32 notifie le système + lance le scénario audio
|
||||
3. **Audio sortie** — ESP32 lit MP3 depuis SD, stream Piper TTS via WiFi, ou reçoit A2DP Bluetooth → décode → PCM vers Si3210 → écouteur combiné
|
||||
4. **Audio entrée** — Micro combiné → Si3210 codec → PCM vers ESP32 (voice activity detection, enregistrement optionnel, HFP uplink)
|
||||
5. **Bluetooth A2DP** — ESP32 en sink A2DP : reçoit audio streaming depuis téléphone/tablette du game master → route vers combiné
|
||||
6. **Bluetooth HFP** — ESP32 en hands-free : le combiné rétro devient un kit mains-libres BT (appel entrant → sonnerie Si3210 → audio bidirectionnel)
|
||||
7. **Raccrochage** — Si3210 détecte on-hook → INT → ESP32 arrête l'audio, notifie le système
|
||||
|
||||
## Pipeline EDA
|
||||
|
||||
Ce projet sert de **premier test complet** du pipeline EDA MCP :
|
||||
|
||||
| Étape | MCP | Action |
|
||||
|-------|-----|--------|
|
||||
| 1. Sourcing | `jlcmcp-remote`, `jlcpcb-search` | Trouver transfo 600Ω, RJ9, vérifier stock Si3210 |
|
||||
| 2. Schéma | `kicad-sch` | Créer le schéma dans KiCad |
|
||||
| 3. PCB | `kicad-design` | Placement, routing, design rules |
|
||||
| 4. Autoroute | `kicad-design` (Freerouting) | Autoroute 2 layers |
|
||||
| 5. Review | kicad-happy skills | DFM, EMC, thermique |
|
||||
| 6. Export | `kicad-design` | Gerbers, BOM LCSC, CPL |
|
||||
| 7. Commande | JLCPCB | Upload + commande assemblée |
|
||||
|
||||
## Success Criteria
|
||||
|
||||
- [ ] Schéma validé (ERC clean)
|
||||
- [ ] PCB routé (DRC clean)
|
||||
- [ ] DFM review passé (kicad-happy)
|
||||
- [ ] BOM 100% sourcée LCSC
|
||||
- [ ] Gerbers exportés, CPL avec rotations corrigées
|
||||
- [ ] Commande JLCPCB passée
|
||||
- [ ] PCB reçu, combiné sonne et audio fonctionne
|
||||
Reference in New Issue
Block a user