Files
Roflin a86aa255f1 Add REVIEW.md: complete hardware-review coverage record
Documents everything examined in the 2026-07-17/18 review - not just
findings but full coverage with verdicts, so future sessions know what
not to re-review: per-sheet verification against datasheets and the
WIZnet reference design, the settled look-wrong-but-correct list
(VPHY/VPLL on 3.3V, D4/D5 floating VBUS + flow-through, EN at 12V,
RSET 12.4k, no CT cap, DO/DI direction evidence), PCB/JLC/BOM audit
state, explicit not-reviewed list (bench/gateware items), and a binding
rule to keep the file updated in the same commit as any change to a
reviewed circuit. Referenced from CLAUDE.md alongside TODO.md.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-20 20:21:39 +02:00

230 lines
14 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# re-bba-rb hardware review — coverage record
**Purpose of this file:** a complete log of *what has been reviewed and how*, so
a future session/agent does not re-do (or re-litigate) this work. Open action
items live in [TODO.md](TODO.md); this file records **coverage and verdicts**,
including everything that was checked and found *correct*.
**Maintenance rule (binding):** whenever a reviewed circuit is changed, or a new
review/verification is performed, update the relevant section here in the same
commit. If you change something listed as "verified correct", its entry here
must be re-verified or marked stale. TODO.md tracks *what to do*; REVIEW.md
tracks *what has been established*.
Review window: 2026-07-17 … 2026-07-18. Reviewed by Claude (sessions with
Dennis), commits `4704dfb…d0426b3`. Verification tooling: `kicad-cli` 10.0.4
netlist/ERC/DRC/BOM exports, ad-hoc netlist parsers (pins.py/nets.py — parse the
kicadxml netlist into per-component pin→net tables; recreate trivially), PDF
datasheet extraction, WebSearch/WebFetch for parts and reference designs.
---
## 1. Sources reviewed against
| Source | Where | Used for |
|---|---|---|
| TPS562201, TPS2116, TPS22810, AP2112K, FT2232H, 93LC46B, USBLC6-2SC6, W5100S, iCE40UP5K, W25Q32JV, MC-711-H72, PUSB3AB6 datasheets | `datasheets/` (restored from LFS; TPS22810 + PUSB3AB6 added from web) | pin functions, abs max, app circuits |
| WIZnet **W5100S reference schematic** V1.1.0 (signal.com.tr mirror) | fetched, read as image | entire MDI/magnetics section, notes 17 |
| SD Gecko wiring table (gc-forever wiki), SD2SP2-Pro schematic (github), SP1ETH (github), ETH2GC (github), webhdx IDE-EXI v2 thread (gc-forever t=4843) | fetched | SP1 DO/DI direction, 12 V rail viability |
| iceprog source (`YosysHQ/icestorm/iceprog/iceprog.c`) | fetched | FTDI pin convention |
| JLCPCB/LCSC part pages | fetched per part | every C-number claimed below |
## 2. Power sheet (`Power.kicad_sch`) — FULLY REVIEWED, PASS
- **TPS562201 (U3, 12V→GC_3V3 buck)**: EN tied to 12 V **checked against abs
max — legal (VIN/EN max 19 V)**. VFB ref 0.768 V; 33k/10k divider → 3.30 V,
matches DS Table 7-2 (33.2k/10k). L1 3.3 µH = recommended typ; 2×22 µF out
within 2068 µF window; VBST 100 nF pin-to-SW; input 2×10 µF+100 nF. All per
datasheet. Do not re-flag EN-at-12V.
- **TPS2116 (U2, GC/USB 3V3 mux)**: MODE tied to VIN1 = **priority mode**
(checked truth table); ST = open-drain "low when VIN1 not used" → GC_ON high
on GC power, R5 10k pull-up to 3V3 — polarity **correct** for U12-EN +
FPGA-GC_ON use. USB-only fallback verified via truth table (MODE≤0.35 V row).
PR1 divider was marginal (1.10 V vs VREF 1.0±8 %) → **fixed: R3=150k**
(switchover 2.302.70 V). Abs max (6 V) fine.
- **AP2112K-1.2 (U1) / AP2112K-3.3 (U4)**: 1 µF X5R in/out present (DS
requirement), 600 mA rating vs load fine, dropout headroom checked (1.2 V
version has 1.01.3 V dropout — OK from 3.3 V), EN=VIN OK.
- **TPS22810 (U12, ETH_3V3 switch)**: EN never floats (GC_ON has R5 pull-up);
QOD floating = valid config; **CT floating deliberately accepted** — DS
Table 2: rise ~98 µs at VIN=3.3 V even with CT=0 → ~0.5 A inrush into
~15 µF; a CT cap changes nothing at 3.3 V. Closed — do not re-open.
- **12 V input**: D3 SMAJ12A orientation/standoff correct; C65 100 µF is a
**25 V SMD electrolytic** (Lelon VZH101M1ETR-0607 — not THT, assembly OK);
C3/C4 25 V, C6 50 V — ratings verified in BOM.
- **12 V rail viability**: verified against webhdx IDE-EXI v2 / M.2 Loader
("3.3V@2A from 12V rail", gc-forever t=4843) — a shipping SP1 product runs
the same architecture at higher load. Only remaining bench check: inrush
into C65 at GC power-on (expected non-issue).
## 3. USB sheet (`Usb Connector.kicad_sch`) — FULLY REVIEWED, PASS after fixes
- **USB-C (J1, MC-711-H72)**: CC1/CC2 with individual 5.1k pull-downs (correct
UFP), A/B pairs tied, VBUS caps 10µ+1µ+100n, shield to GND. PASS.
- **USBLC6 (D1)**: in-line on D+/D, pass-through orientation correct (the
historic D+/D swap was fixed in an earlier session; verified again), VBUS
pin on USB_VBUS. PASS.
- **FT2232H (U8)**: all power pins verified against DS pin table —
**VPHY/VPLL are +3.3 V pins** (fed 3V3 via FB1/FB2 + 100 nF — CORRECT; an
earlier review note claiming they should be 1.8 V was wrong; do not "fix").
VREGIN=3V3, VREGOUT→VCORE (1.8 V) with 4.7 µF + 3×100 nF on pins 12/37/64;
4×VCCIO decoupled; REF = 12k 1 % to GND (DS requirement); RESET RC
(10k/100 nF); 12 MHz crystal Y1 (CL=12 pF part vs 18 pF caps — verified
consistent); TEST→GND, AGND→GND.
- **EEPROM 93LC46B (U7)**: interface **was wrong** (DO+DI both direct to
EEDATA) → fixed per DS Table 3.4: EE_DO net, R30 2.2k (C25879) to EE_DATA,
R31 10k (C25744) pull-up to 3V3, DI direct. 93LC46B = fixed 16-bit org =
correct for FT2232H. Verified in netlist.
- **FTDI↔flash/FPGA config pins**: **rewired 2026-07-18** to stock iceprog
convention: SCK=ADBUS0, MOSI=ADBUS1, MISO=ADBUS2, FLASH_CS=ADBUS4,
CDONE=ADBUS6, CRESET=ADBUS7 (verified against iceprog.c; old ADBUS3/ACBUS0/
ACBUS1 now NC). R11/R12 10k pull-ups on CRESET/CDONE intact.
- **EEPROM contents decision**: ship blank (default 0403:6010 = what iceprog
opens). Documented in TODO.
## 4. FPGA sheet (`Fpga.kicad_sch`) — FULLY REVIEWED, PASS
- **iCE40UP5K (U9, 4 units)**: VCC=1V2 (pins 5/30); VCCIO_0/2 + SPI_VCCIO1 =
3V3, each decoupled; VPP_2V5 on 3V3 (standard practice, iCEbreaker does the
same); VCCPLL via 100 Ω + 100 nF + 10 nF (Lattice filter); CDONE/CRESET 10k
pull-ups; EP→GND.
- **SPI flash (U10 W25Q32JVSS)**: on the hard-SPI pins (1417), WP/HOLD 10k
pull-ups, shared correctly with FT2232 ADBUS0-2/4 (FTDI Hi-Z at reset; FPGA
held in CRESET during FTDI flashing — iCEbreaker-equivalent arrangement).
- **Clocks**: X1 12 MHz oscillator → CLK12 on pin 20 (**G3 global**); EXI_CLK
on pin 44 (**G6 global**). Both verified good pin choices.
- **Pin map** (authoritative, incl. 2026-07-18 debug additions): EXI_MOSI=4
(in), EXI_MISO=3 (out), EXI_CLK=44, EXI_CS=45, EXI_INT=46, ETH bus=2343,
CLK12=20, GC_ON=21, ETH_RST=2, UART FPGA-RX=18/TX=19 (net names are
FTDI-perspective!), LED_G=47, LED_R=48, DBG04=9/10/11/12/6.
- **Debug provisions added 2026-07-18**: D6/D7 LEDs + R37/R38, J4 header,
TP1/2/4/5 (TP3 on ethernet sheet). Netlist-verified (LED polarity, TPs on
global rails, not sheet-local orphans).
## 5. Ethernet sheet (`ethernet.kicad_sch`) — FULLY REVIEWED, PASS after fixes
- **W5100S straps/pins, all verified against DS pin table**: MOD[3:0]=0100 =
"010X" parallel bus ✓; SCLK→GND = documented requirement for bus mode ✓;
pin 32=MOSI/**A0**, pin 33=MISO/**A1** (matches WIZnet ref) ✓; CSn/RDn/WRn
internal pull-ups (IU), DAT0-7 IOU ✓; **INTn is push-pull (type OP)** — no
pull-up needed, do not add one ✓; RSTn is plain input (type IP) → R36 10k
to ETH_3V3 added 2026-07-18.
- **1V2 loop**: 1V2O → C61 4.7 µF → FB3 100 Ω ferrite → 1V2A+1V2D with 5×100 nF
— matches ref topology. 3V3A/3V3D common (ref's inter-rail ferrites are
marked optional; single-net accepted).
- **RSET_BG**: 12.4k 1 % — DS says 12.3k; ACCEPTED (E192 value, WIZnet ref
itself uses 12k+300R; 0.8 % immaterial). Closed.
- **Crystal Y2**: 25 MHz, CL=12 pF part (C9006) vs 18 pF caps → CL≈12 pF ✓
(DS Table 9 wants 12 pF); mandatory external 1 MΩ feedback (R17) present ✓
(DS: "W5100S has no feedback resistor"). FTDI ref-note: no series RExt
(ref uses 0 Ω) — accepted.
- **MDI section — now implements the WIZnet ref schematic item-for-item**:
49.9 Ω×4 (R26R29, C25120) + 100 nF×2 (C18/C19) termination on the PHY-side
nets; 3.3 Ω×4 series dampers (R32R35, C137986) — chain per line:
U11 pin → termination tap → 3.3 Ω → ESD → transformer; C20 100 nF + C21 1 µF
center-tap bypass at J2 pins 4/5. Net naming: PHY_* (chip side) / MDI_*
(damper→ESD) / ETH_* (ESD→jack); **all three groups are in the ETH_DP
netclass** (patterns in `re-bba-rb.kicad_pro`).
- **D4/D5 (USBLC6 on the pairs) — SETTLED, do not re-litigate**: keep. ST
rates USBLC6 for Ethernet; 2.53.5 pF OK at 100BASE-TX. Two deliberate
details: (1) **pin 5 floats on purpose** (lines are 3.3 V-biased and swing
above it; a tied rail would clip peaks; floating rail self-biases and the
6 V zener still clamps); (2) **split nets force flow-through routing**
(pins 1↔6/3↔4 are one internal node) — never merge the nets or stub the
diode. Full reasoning in TODO.md.
- **Magjack J2 (HR911105A)**: transformer spec verified vs DS Table 11
(1:1, 350 µH) ✓; LED wiring (R14/R15 330 Ω anodes to ETH_3V3, cathodes to
LNKn/ACTn pins 17/20) — *assumed* internal LED pinout 9/12=anodes,
10/11=cathodes: **confirm at bring-up** (no HR911105A datasheet in repo).
Pin 8 (Bob-Smith common) + shield tied directly to GND — deviation from
ref's 1 nF/2 kV chassis split, accepted deliberately (GC floats, no earth).
- **Ethernet layout (PCB) — reviewed twice (after rework + after insertion)**:
termination 13 mm from U11 MDI pins; dampers in-line, MDI stubs
1.451.48 mm; D4/D5 flow-through confirmed pad-by-pad; pair skew TX
0.66 mm / RX 1.81 mm (fine at 100M — do not "improve"); pairs on F.Cu over
solid In1 GND, one B.Cu crossover via per N line at the jack; **In1 plane
correctly voided under the magjack cable/isolation side** (deliberate, keep);
C20/C21 against the jack pin column (as close as the plane void allows);
30 GND stitch vias in the corner; RX pair passes ~34 mm from Y2 (accepted,
don't move closer); RSET_BG 2.8 mm with one via to B.Cu (plane-shielded, OK).
## 6. EXI sheet (`exi.kicad_sch`) — FULLY REVIEWED, PASS after DO/DI fix
- **DO/DI direction — SETTLED with hardware evidence, do not re-litigate**:
YAGCD SP1 naming is **console-perspective**: pin 6 DO = GC data out =
adapter MOSI *input*; pin 9 DI = GC data in = adapter MISO *output*.
Evidence: SD Gecko straight-through table (MC pin 5 "DO" → SD CMD input,
pin 7 "DI" → SD DAT0 output) + SD2SP2 (DO → OR gate → CMD). The board was
wired backwards (following a wrong table in `docs/gc_bba_fpga_design.md`,
since corrected); fixed as a pure rename + R21/R25 identity swap, zero
copper changes. Final: J3.6(DO)→R21 22 Ω→FPGA pin 4 = EXI_MOSI;
J3.9(DI)→R25 33 Ω→FPGA pin 3 = EXI_MISO.
- **PUSB3AB6 (D2)**: pinout verified vs Nexperia DS (1=CH1, 2=GND any-pin,
37=CH26); DFN2111-7 matches the SON50P110X213X50-7 footprint; 0.15 pF/ch;
rated for 3.3 V lines. Note: BOM part C49383400 is the **ElecSuper clone**
("(ES)"), pin-compatible — bring-up suspect only if ESD behaviour odd.
- **EXTIN**: 10k (R18) to **SP1_3V3 (the GC's own rail)** — correct, doesn't
back-power. **12 V**: J3.5 → 12V_EXI (power tree). J3.8 (second 3.3 V pin)
deliberately NC. Series elements: R24 100 Ω on EXI_CLK (input damping),
R21/R25 as above. INT (J3.3) driven by FPGA pin 46 — gateware should use
open-drain emulation (TODO).
- **J3 footprint provenance**: 12 contacts, 1 mm effective pitch, two
staggered depth rows, **front side only**, fingers to the board edge (the
`.kicad_dru` has a J3 edge-clearance exception for this). Geometry comes
from the physical sp1_test_plug iterations — the test-plug project has no
reusable footprint to diff (it only carries FFC breakouts). Outline/
protrusion fit remain bench checks.
## 7. PCB global / JLCPCB — REVIEWED, PASS
- **DRC**: 0 errors / 0 unconnected / 0 parity as of each review point
(remaining parity items = the 11 debug/fix footprints awaiting placement +
3 FTDI reroutes + R3 value sync — all listed by F8). Warnings are
silkscreen cosmetics only (~150; JLC auto-clips).
- **JLC capability floor**: encoded as error-severity rules in
`re-bba-rb.kicad_dru` (0.09 mm trace/space, 0.15 mm drill, 0.2 mm
hole-to-copper etc.) — passing. Diff-pair impedance rules (USB 90 Ω,
ETH 100 Ω) are error-severity and passing; they police PHY_*/MDI_*/ETH_*
and FT_D*/USB_D* via netclass patterns.
- **Stackup**: 7628 prepreg 0.2104 mm / 0.6 mm core ≈ 1.14 mm total =
**JLC04121H-7628** (JLC nominal 1.2 mm, satisfies SP1 slot). Order with
ENIG + gold fingers + 45° bevel (copper_finish field says "None" —
cosmetic only). Board 102×33.4 mm.
- **Fiducials**: FID13 placed 2026-07-18 (board-only footprints) at
(195, 68.5)/(131, 48)/(163, 44.5) — track-clearance verified after a first
placement attempt collided with tracks (caught by DRC).
- **Zones**: In1.Cu = single solid GND plane; In2.Cu = 3V3 + ETH_3V3
(priority 1) islands. No other zones.
## 8. BOM — FULLY AUDITED (netlist-vs-BOM count check passes)
All orderable components carry Footprint+Value+MPN+LCSC+Manufacturer.
Deliberate `in_bom no`: J3 (gold fingers), J4, TP15 — the **only** allowed
netlist/BOM delta. Spot-verified on JLC/LCSC: crystals CL=12 pF (C70565/
C9006, Basic), 49.9 Ω C25120, 3.3 Ω C137986 (YAGEO, Extended), 2.2k C25879,
150k C25755, LEDs C72043/C2286 (Basic), 12 V-rail ratings, 1 % tolerances on
R1R4/R10/R16/R26R38. D2 = ElecSuper clone (see §6).
## 9. Explicitly NOT reviewed / remaining risk (don't claim coverage)
- **Mechanical fit** (outline vs slot, RJ45/USB-C protrusion) — bench only.
- **HR911105A internal LED pinout** — assumed, confirm at bring-up.
- **W5100S register map in the gateware** — written from memory per
CLAUDE.md; confirm at bring-up.
- **Actual power-on behaviour** (12 V inrush, mux transitions under load,
FT2232+iCE40 enumeration) — bench only.
- **Gateware** (board PCF, GC_ON gating, UART crossover, INT drive style,
LED/DBG driving) — tracked in TODO, not part of the hardware review.
- **`re-bba-rb.kicad_pcb.old.*` / `.history/`** — deleted/ignored, never
reviewed for content.
## 10. Session/history notes an agent may need
- `datasheets/` was once deleted by an errant commit and restored from the
local LFS object store; recovery recipe is in the git log of `4704dfb`.
- A stale case-colliding `power.kicad_sch` was removed (Windows checkout
hazard — never add files differing only in case).
- The SP1 pin table in `docs/gc_bba_fpga_design.md` was the root cause of the
DO/DI swap and has been corrected — trust it now; it carries a "do not
swap" note with the evidence.