rp417 — block diagram & pin plan
CH32H417QEU6 test board supervised by an RP2350 · rev A · proposals P1–P3 · updated 2026-11-13 · source of truth: .claude/SPEC.md, .claude/DECISIONS.md
decided = logged in .claude/DECISIONS.md proposed = new in this document, awaiting approval withdrawn = replaced by a later proposal
Rev A, redrawn 2026-11-13 for D22–D48 (minimal BOM). Parts list and area budget: §8–§9.
hw/ (ERC 0); draft layout autorouted (see hw/README.md).
To prove on hardware: gapless DVP JPEG-mode capture (D37), CH32 temperature at full USB3 load (D25), generator amplitude (D33).1. System block diagram
Rev A after the minimal-BOM constraint (D22–D41). Wide diagram: scroll sideways inside the frame.
flowchart TB HOST(["Host PC - test scripts"]) HOST --- J3["J3 USB-C 2.0
RP2350"] HOST --- J1["J1 USB-C 3.x
CH32 USB3, single orientation"] HOST --- J2["J2 USB-C 2.0
CH32 USBFS / ISP"] subgraph SUP["Always-on 3V3 domain"] direction TB RP["RP2354B
RP2350B + 2 MB flash"] SI["Si5351A
CLK0 ADC clock, CLK1 PCLK, CLK2 generator"] LPF["LC low-pass 5th order
fc ~30 MHz"] HDR["1x4 header + jumper
GEN / ADC_IN / EXT / GND"] RP -- "I2C0" --- SI SI -- "CLK2" --> LPF --> HDR end J3 --- RP J1 -- "SS pairs direct, CC = 5.1k Rd" --- CH J1 -- "D+ / D-" --- USW["TS3USB221A
USB2 switch"] USW -- "SWIO / SWCLK" --- RP subgraph TGT["CH32 domain - load switch, RP-controlled, default ON"] direction TB CH["CH32H417MEU6
QFN88, internal 1V2 LDO"] ADC["ADC10065 - DNP
user-fitted, 10-bit 65 MSPS"] SD["microSD"] CH --- SD end HDR -- "ADC_IN single-ended, AC + VCOM bias" --> ADC HDR -- "ADC_IN, AC + mid-rail bias" --> CH SI -- "CLK0" --> ADC SI -- "CLK1 PCLK" --> CSW ADC -- "D0-D9" --> CSW RP -- "counter D0-D9 + PCLK" --> CSW["3 x SN74CBTLV3257
2:1 capture switch"] CSW -- "DVP D0-D9, PB12 PCLK" --> CH RP -- "logic bus 8 GPIO" --- CH RP -- "UART, I2C, QSPI, HSYNC/VSYNC, marker, MCO
series R, firmware tri-state" --- CH USW -- "PB8 / PB9 USBHS" --- CH J2 -- "PA11 / PA12" --- CH RP -- "NRST open-drain, PWR_EN" --> CH
2. Power tree
flowchart LR V1["J1 VBUS"] --> D1["LM66100"] V2["J2 VBUS"] --> D2["LM66100"] V3["J3 VBUS"] --> D3["LM66100"] D1 & D2 & D3 --> VSYS(["VSYS 5 V"]) VSYS --> B0["Buck 5 V to 3V3, 2 A
always on"] B0 --> SUPL["RP2354B, Si5351A,
TS3USB221A"] B0 --> LS{{"Load switch, quick discharge
EN = RP GPIO38, pull-up = default ON"}} LS --> C33(["3V3_CH32"]) C33 --> CHP["CH32 VDD33, VDDIO = VIO18
internal LDO: VDDK, VDD12A"] C33 --> FB["ferrite + caps"] --> AV["VDD33A, VREFP
ADC10065 VA"] C33 --> SDP["microSD, ADC10065 VDR"] RPA["RP ADC GPIO40/41"] -. "senses" .- C33 RPA -. "senses" .- VSYS
3. Capture path detail (D55)
flowchart LR SI0["Si5351 CLK0"] --> ADCCLK["ADC10065 CLK"] ADCD["ADC10065 D0-D9 (DNP)
33 ohm series"] --> B1["switch B1"] SI1["Si5351 CLK1
phase-tunable"] --> B1 RPD["RP2350 PIO counter
GPIO20-29 + PCLK GPIO30"] --> B2["switch B2"] SEL["RP GPIO42 CAP_SEL
pull-down = ADC"] --> SW B1 & B2 --> SW["3 x SN74CBTLV3257
2:1, 11 lines, CH32 domain"] SW -- "D0-D9" --> DVP["CH32 DVP
PE0 PE1 PB13 PE3 PE4 PF14 PE5 PE6 PF4 PF3"] SW -- "PCLK" --> PCLK["PB12 DVP_PCLK"] SW -- "PCLK" --> ETR["PF2 TIM8_ETR
sample counter"] RPS["RP2350 GPIO31/32"] --> SYNC["PA4 HSYNC static, PA5 VSYNC frame"]
- QFN88 (D54) has only one DVP_PCLK pin (PB12) and no free second set for D2, so the alternate-pin trick (D36) is replaced by a 2:1 FET switch (D55). Switch powered from 3V3_CH: Ioff isolates the RP and the Si5351 when the CH32 is off.
- Counter is now the full 10 bits; DVP in 10-bit mode stores 16-bit words → 130 MB/s at 65 MS/s.
- DVP in JPEG mode: HSYNC may be held static, buffer switching follows the DMA length (RM V1.8 §29.2.2, §29.3.1) → RP sync needs no alignment to PCLK (D37).
- RP2350 PIO: one sample per two instructions → ~75 MS/s at 150 MHz. 33 Ω series on all counter lines.
- ADC10065 fitted by hand (DNP, D42).
3b. Analog front-end
flowchart LR CLK2["Si5351 CLK2
3.3 V square"] --> RS["50 ohm series"] --> LC["5th-order LC LPF
fc ~30 MHz, 50 ohm"] --> RT["50 ohm termination"] RT --> P1(["hdr 1 GEN"]) EXT(["hdr 3 EXT"]) --> PROT["49.9 ohm term,
series R + clamp diodes"] P1 -. "jumper 1-2" .- P2(["hdr 2 ADC_IN"]) PROT -. "jumper 2-3" .- P2 P2 --> AC1["AC cap + R to VCOM"] --> ADC["ADC10065 VIN+
VIN- = VCOM, IRS"] P2 --> AC2["series R + AC cap +
VDD33A/2 divider"] --> PC0["CH32 PC0
ADC_IN10 + HSADC_IN0"]
- Doubly-terminated filter: fundamental ≈ (4/π)·(3.3/2)·½ ≈ 1 V peak ⇒ ≈ 2 Vpp ideal; the Si5351 driver impedance lowers it (estimate 1.5–2 Vpp, bench-verify). Clean sine from ≈ 10 to 30 MHz; below fc/3 a shaped square.
- ADC10065 single-ended full scale = 2.0 / 1.5 / 1.0 Vpp for IRS = VDDA / VSSA / floating (
ADC10065.md) — IRS on a 3-way solder jumper, default VDDA = 2 Vpp (D44). - CH32 ADCs get the same net with no anti-alias filter: 10–30 MHz aliases at 5/20 MSPS (deterministic, fine for throughput, D35).
4. CH32H417MEU6 pin plan (QFN88, D54)
Generated from hw/gen/nets.json; pins/AF from datasheets/CH32H417DS0_V1.9_en.md (pin table, Table 2-2-4, 2-2-23). All I/O at 3.3 V (D23). QFN88 has no VREFP/VBAT/VSSA pins.
| Function | Net | CH32 pin (QFN88 #) | AF |
|---|---|---|---|
| Capture (DVP, via 2:1 switch D55) | CAP_D0 | PE0 (76) | AF11 |
| CAP_D1 | PE1 (77) | AF11 | |
| CAP_D2 | PB13 (37) | AF13 | |
| CAP_D3 | PE3 (2) | AF13 | |
| CAP_D4 | PE4 (3) | AF13 | |
| CAP_D5 | PF14 (78) | AF11 | |
| CAP_D6 | PE5 (4) | AF13 | |
| CAP_D7 | PE6 (5) | AF13 | |
| CAP_D8 | PF4 (74) | AF11 | |
| CAP_D9 | PF3 (73) | AF11 | |
| CAP_PCLK | PB12 (36) | AF15 | |
| CAP_PCLK | PF2 (47) | AF3 (TIM8_ETR) | |
| DVP_HSYNC | PA4 (22) | AF13 | |
| DVP_VSYNC | PA5 (23) | AF11 | |
| USB | CH_SSTX_N | SSTXB (84) | — |
| CH_SSTX_P | SSTXA (85) | — | |
| CH_USBHS_DM | PB9 (83) | — | |
| CH_USBHS_DP | PB8 (82) | — | |
| J2_DM | PA11 (56) | — | |
| J2_DP | PA12 (57) | — | |
| SS_RX_N | SSRXB (87) | — | |
| SS_RX_P | SSRXA (88) | — | |
| Logic bus (RP GPIO12–19) | LOGIC0 | PD12 (41) | — |
| LOGIC1 | PD13 (42) | — | |
| LOGIC2 | PD14 (43) | — | |
| LOGIC3 | PD15 (44) | — | |
| LOGIC4 | PD10 (39) | — | |
| LOGIC5 | PD11 (40) | — | |
| LOGIC6 | PC6 (50) | — | |
| LOGIC7 | PC7 (51) | — | |
| QSPI2 master (D38) | QSPI_CS | PE11 (27) | AF7 |
| QSPI_IO0 | PE12 (28) | AF7 | |
| QSPI_IO1 | PE13 (29) | AF7 | |
| QSPI_IO2 | PE14 (30) | AF7 | |
| QSPI_IO3 | PE15 (31) | AF7 | |
| QSPI_SCK | PE10 (26) | AF7 | |
| microSD | SD_CD | PD0 (65) | — |
| SD_CLK | PC12 (64) | SDMMC | |
| SD_CMD | PD2 (67) | SDMMC | |
| SD_D0 | PC8 (52) | SDMMC | |
| SD_D1 | PC9 (53) | SDMMC | |
| SD_D2 | PC10 (62) | SDMMC | |
| SD_D3 | PC11 (63) | SDMMC | |
| UART (ISP) / I2C / timing | CH_MARK | PB14 (38) | AF2 (TIM9_CH1) |
| CH_MCO | PB0 (24) | AF0 (MCO) | |
| CH_SCL | PB10 (32) | AF4 | |
| CH_SDA | PB11 (33) | AF4 | |
| CH_UART_RX | PA10 (55) | AF7 | |
| CH_UART_TX | PA9 (54) | AF7 | |
| Analog / clock / reset | CH_AIN0 | PC0 (15) | analog |
| CH_NRST | NRST (14) | — | |
| CH_XI | XI (12) | — | |
| CH_XO | XO (13) | — | |
| Power | +3V3A_CH | VDD33A (20) | — |
| +3V3_CH | VDD33 (1), VDD33 (11), VDDIO (19), VIO18 (34), VDDIO (35), VIO18 (49), VDD33 (59), VIO18 (79) | — | |
| GND | EP (89) | — | |
| VDD12A | VDD12A (86) | — | |
| VDDK | VDDK (6), VDDK (48) | — |
Free: PA0, PA13, PA14, PA15, PB1, PB3, PB4, PC1, PC2, PC3, PD1, PD3, PD4, PD5, PD6, PD7, PF0, PF1, PF5.
5. RP2354B pin plan (48 GPIO)
RP2354B kept (D24): 43 of 48 GPIO used, 5 spare (GPIO43–47).
| GPIO | Function | Peripheral | Connects to |
|---|---|---|---|
| 0 | UART0 TX | UART0 | CH32 PA10 USART1_RX (ISP) |
| 1 | UART0 RX | UART0 | CH32 PA9 USART1_TX (ISP) |
| 2 | I2C1 SDA (link) | I2C1 | CH32 PB11 I2C2_SDA |
| 3 | I2C1 SCL (link) | I2C1 | CH32 PB10 I2C2_SCL |
| 4 | I2C0 SDA (mgmt) | I2C0 | Si5351A |
| 5 | I2C0 SCL (mgmt) | I2C0 | Si5351A |
| 6 | QSPI SCK | PIO0 (slave) | CH32 PE10 |
| 7 | QSPI CS | PIO0 | CH32 PE11 |
| 8–11 | QSPI IO0–IO3 | PIO0 | CH32 PE12–PE15 |
| 12–19 | Logic 0–7 | GPIO / PIO | CH32 PD12–PD15, PD10, PD11, PC6, PC7 |
| 20–29 | Counter D0–D9 | PIO1 | capture switch B2 |
| 30 | Counter PCLK | PIO1 side-set | capture switch B2 |
| 31 | DVP HSYNC | GPIO / PIO1 | CH32 PA4 |
| 32 | DVP VSYNC | GPIO / PIO1 | CH32 PA5 |
| 33 | Shot marker in | GPIO / PIO | CH32 PB14 TIM9_CH1 |
| 34 | MCO in | frequency counter | CH32 PB0 MCO |
| 35 | SWIO | PIO2 (funprog) | TS3USB221A → CH32 PB9 |
| 36 | SWCLK | PIO2 (funprog) | TS3USB221A → CH32 PB8 |
| 37 | CH32 NRST | open-drain | CH32 NRST |
| 38 | CH32 PWR_EN | GPIO | load switch EN (pull-up: ON by default, D15) |
| 39 | USB_SEL | GPIO | TS3USB221A S (pull-down: USB connector) |
| 40 | ADC0: 3V3_CH32 sense | ADC | divider |
| 41 | ADC1: VSYS sense | ADC | divider |
| 42 | CAP_SEL | GPIO | capture switch S (pull-down = ADC10065) |
| 43–47 | spare (ADC3–7) | — | test pads |
| QSPI pins | internal flash | — | RP2354B in-package flash |
| USB DP/DM | USB | — | J3 |
6. RP2350 ↔ CH32 interconnect
| Link | Lines | RP2350 | CH32 | Direction | Protection (D29) |
|---|---|---|---|---|---|
| UART | 2 | GPIO0 TX, GPIO1 RX | PA10 RX, PA9 TX | ↔ | series R; also UART ISP (D11) |
| I2C | 2 | GPIO2 SDA, GPIO3 SCL | PB11, PB10 | ↔ | pull-ups on 3V3_CH32 |
| QSPI | 6 | GPIO6–11 | PE10–PE15 | CH32 master → RP PIO slave | series R ≈ 33 Ω |
| Logic | 8 | GPIO12–19 | PD12–PD15, PD10, PD11, PC6, PC7 | ↔ | series R 33 Ω |
| Counter | 11 | GPIO20–30 | via 2:1 switch → DVP D0–D9, PB12 | RP → CH32 | 33 Ω + switch Ioff (D55) |
| DVP sync | 2 | GPIO31, 32 | PA4, PA5 | RP → CH32 | series R |
| Marker / MCO | 2 | GPIO33, 34 | PB14, PB0 | CH32 → RP | series R |
| Debug | 2 | GPIO35, 36 | PB9, PB8 | ↔ | TS3USB221A (D14, D26) |
| Reset | 1 | GPIO37 | NRST | RP → CH32 | open-drain |
| Power | 1 | GPIO38 | load switch EN | RP → switch | — |
No bus switches (D29): the RP2350 is always powered, so the only back-feed direction is RP → CH32. Power-off sequence in RP firmware: tri-state GPIO0–36 and 42, disable Si5351 CLK0–2, assert NRST, then drop PWR_EN; check GPIO40 reads ≈ 0 V. Series resistors only limit clamp current if firmware misbehaves.
7. New proposals in this document (to approve → .claude/DECISIONS.md)
| ID | Proposal | Why |
|---|---|---|
| P1-1 D23 | Tie VIO18 to VDDIO: all CH32 I/O at 3.3 V | Allowed by the datasheet when low-voltage I/O isn't needed; ADC10065, SD and RP2350 are all 3.3 V. Gives up testing I/O at 1.2–2.5 V. |
| P1-2 D24 | RP2354B (RP2350B + 2 MB in-package flash) | 48 GPIO needed; saves the flash chip |
| P1-3 D31 | AD9851 at 5 V (180 MHz) + 74AHCT125 level shift | At 3.3 V the AD9851 is limited to 125 MHz; at 5 V its logic-high threshold is 3.5 V |
| P1-4 → P2-1 | Si5351A: CLK0 ADC clock, CLK1 phase-tunable capture clock, CLK2 30 MHz DDS reference | Sample rate can be swept for throughput tests; capture edge can be tuned |
| P1-5 D21 | Capture on DVP only — UHSIF parked (not routed in rev A) | Pin overlap with SDMMC/ADC; DVP covers 65 MS/s |
| P1-6 D25 | CH32 domain: separate 3V3 + 1V2 bucks + AVCC LDO, one EN from RP GPIO38 with default ON at power-up (standalone, D15), active discharge | Rail order; true 0 V when off |
| P1-7 D26 D27 D28 | HD3SS3220 for J1 orientation + CC (dropped, D27); TS3USB221A for PB8/PB9 (D26); LM66100 ORing ×4 (→ P2-8); INA3221 monitor (dropped, D28) | Reversible USB3 C plug needs an SS mux (same choice as the IvanLi-CN reference project) |
| P1-8 → P2-2 | Analog chain: AD9851 → ~60 MHz LPF → THS4541 → ADC10065; OPA2356 for CH32 ADC conditioning + header buffer | ADC10065 needs a differential input; CH32 ADCs need a 0–3.3 V signal |
| P1-9 D37 | RP2350 HSYNC/VSYNC drive DVP (alternative: P2-6) | ADC10065 has no sync outputs |
| P1-10 D38 | CH32 QSPI as master, RP2350 PIO as slave | To verify in the RM that CH32 QSPI is master-only |
P2 — after the simplification constraint D22 (2026-11-13)
| ID | Proposal | Why |
|---|---|---|
| P2-1 D32 | Si5351A clock plan: CLK0 = ADC10065 clock and CLK1 = phase-tunable DVP PCLK (same PLL A, same frequency); CLK2 = test-signal source (PLL B) | Only clock chip left; three outputs exactly cover ADC clock, capture edge and generator (D31) |
| P2-2 D33 | Generator: Si5351 CLK2 → 50 Ω series R → 5th-order LC low-pass, fc ≈ 30 MHz, doubly terminated 50 Ω → ≈ 2 Vpp sine (to verify on the bench). Clean sine from ≈ 10 to 30 MHz; below fc/3 harmonics pass (shaped square, fine for throughput). ADC driven single-ended, VIN− = VCOM, IRS = VDDA (2 Vpp) | Simplest path from a square clock to a clean sine: ~5 L/C + 2 R, no op-amp, no differential driver (D05, D22) |
| P2-3 D34 | 1×4 2.54 mm header GEN | ADC_IN | EXT | GND: jumper 1–2 = generator, 2–3 = external. AC-coupling cap + VCOM bias resistor after the jumper (ADC side). EXT: 49.9 Ω termination, series R + clamp diodes. GEN + GND double as the D20 probe point (supersedes D20) | Implements D30 with one header and a shunt; both sources AC-coupled and back-feed safe |
| P2-4 → D35 | CH32 ADC/HSADC stimulus: RP2350 PWM → 2nd-order RC → PC0 (ADC_IN10 + HSADC_IN0); sine synthesised in RP firmware (tens of kHz) | 2 R + 2 C and one GPIO; replaces the DDS feed of D07 (R8) |
| P2-5 → D36 | Lost-sample detection without counter injection: TIM1_ETR counts PCLK vs samples received, and the host checks phase continuity of the known Si5351 sine | No parts; replaces D16 exact counter |
| P2-6 → D37 | DVP HSYNC/VSYNC from a CH32 timer clocked by PCLK on ETR, looped by trace to PA4/PA5 (to verify DVP accepts it) | No RP pins, line length exact to the sample, works standalone (D15) |
| P2-7 D39 | VDD33A/VREFP from the CH32 3V3 via ferrite + caps (no LDO) | D22; HSADC needs VDD33A ≥ 3.0 V only |
| P2-8 D41 | Power inputs: drop the external 5 V input → 3 × LM66100 (J1, J2, J3 VBUS) | One input and one ideal diode less |
| P2-9 D40 | Keep J2 (CH32 USBFS USB-C) or drop it (UART ISP via RP2350 covers ISP) | Dropping saves a connector + an LM66100; loses USBFS tests |
P3 — parts list and area budget (2026-11-13)
| ID | Proposal | Why |
|---|---|---|
| P3-1 D44 | ADC10065 IRS on a 3-way solder jumper (VDDA = 2 Vpp default / GND = 1.5 Vpp / open = 1 Vpp) | Generator amplitude is only estimated (1.5–2 Vpp); zero parts |
| P3-2 D48 | Single-sided assembly (all parts on top) — not adopted: user chose parts on both sides where it helps (D48) | Area budget ≈ 34 % of one side; cheaper JLC assembly |
| P3-3 D43 | CH32H417QEU6 sourcing — 0 stock at JLC: (a) JLC global sourcing / pre-order, (b) consign parts bought elsewhere, (c) DNP + hand-solder | 0.35 mm-pitch QFN128 by hand is hard → recommend (a) or (b) |
| P3-4 D45 | USB ESD: USBLC6-2 on J1/J2/J3 D± + RClamp0524P on J1 SS pairs | ≈ $0.40 total; 0.3 pF keeps USB3 SI; optional under D22 |
| P3-5 D46 | Clock chip = genuine SI5351A-B-GTR (not the MS5351M clone) | Clone rated 2.7–3.3 V (3V3 rail at its limit) and register/jitter equivalence unverified |
| P3-6 D47 | Adopt §8 as the rev A part selection (TLV62569 buck, TPS22918 load switch, TS3USB221A, top-mount 24-pin USB-C, TF-01A, 10 pF 12 MHz crystal) | All stocked; parts chosen for minimum count (D22) |
P4 — after the QFN88 rework (2026-11-13)
| ID | Proposal | Why |
|---|---|---|
| P4-1 D57 | Capture-path series R: PCLK (Si5351 CLK1 → switch) 33 Ω → 0 Ω; ADC10065 outputs and RP counter lines 33 Ω → 22 Ω; place the 3 switches within ~10 mm of the CH32 DVP pins | Each switched line carries ≈ 28 pF (switch A + both B ports + CH32 pin + trace). 33 Ω gives ≈ 5–6 ns edges at 65 MHz; 0–22 Ω brings them to ≈ 3.5–4.5 ns. The switch's Ioff now provides the back-feed isolation the series R was for (D29). |
8. Parts list — ICs and key parts (JLC/LCSC snapshot 2026-11-13)
JLC parts API, stock and USD price @10 / @100. B = Basic, E = Extended. Passives (0402 R/C) not listed. Economic vs Standard assembly is not shown by the API → check in the JLC quote.
| Ref | Function | MPN | LCSC | Package | Stock | Price | Class | Note |
|---|---|---|---|---|---|---|---|---|
| U1 | MCU | CH32H417MEU6 | C54973456 | QFN-88 10 mm, 0.4 mm | 7 | 3.76 | E | user-supplied (D43, D54) |
| U11–U13 | 2:1 capture switch | SN74CBTLV3257PWR | C7637 | TSSOP-16 | 9 037 | 0.49 / 0.38 | E | D55 |
| U2 | Supervisor | RP2354B | C39843328 | QFN-80 10×10 | 524 | 1.44 / 1.37 | E | fallback RP2350B C42415655 + flash |
| U3 | Clocks | SI5351A-B-GTR | C504891 | MSOP-10 | 12 248 | 1.04 / 0.80 | E | reel of -GT; clone MS5351M C1509083 — P3-5 |
| Y1 | Si5351 xtal 25 MHz 10 pF | X322525MMB4SI | C70582 | 3225 | 105 267 | 0.079 | E | |
| Y2 | CH32 HSE 25 MHz 12 pF | X322525MOB4SI | C9006 | 3225 | 342 501 | 0.076 | B | |
| Y3 | RP2350 12 MHz 10 pF | X322512MMB4SI | C50430 | 3225 | 9 655 | 0.07 | E | 10 pF like the RP2350 reference (ABM8-272); Basic C9002 is 20 pF |
| U4 | USB2 switch | TS3USB221ARSER | C128396 | UQFN-10 | 99 898 | 0.18 / 0.16 | E | 900 MHz BW |
| U5–U7 | Ideal diode ×3 | LM66100DCKR | C2869734 | SC-70-6 | 41 446 | 0.15 / 0.13 | E | D41: J1/J2/J3 |
| U8 | 3V3 buck 2 A | TLV62569DBVR | C141836 | SOT-23-5 | 640 750 | 0.053 | E | no 2 A sync buck in Basic |
| L1 | Buck inductor 2.2 µH | DFE252012F-2R2M=P2 | C576403 | 1008 | 12 048 | 0.12 | E | Isat 3.6 A |
| U9 | CH32 load switch | TPS22918DBVR | C131941 | SOT-23-6 | 67 546 | 0.25 / 0.21 | E | 2 A, 53 mΩ, QOD |
| L2 | RP2350 SMPS 3.3 µH | AOTA-B201610S3R3-101-T | C42411119 | 0806 | 143 | 0.27 | E | ⚠ low stock, reserve early |
| J1 | USB-C 3.x 24-pin | TYPE-C 24P QT | C2681555 | SMD R/A | 75 467 | 0.41 / 0.35 | E | no stocked mid-mount; shell style to check |
| J2, J3 | USB-C 2.0 16-pin | TYPE-C 16PIN 2MD(073) | C2765186 | SMD R/A | 1 054 907 | 0.058 | E | |
| J4 | microSD push-push | TF-01A | C91145 | SMD | 135 605 | 0.15 | E | |
| D1–D3 | USB2 ESD | USBLC6-2SC6 | C7519 | SOT-23-6 | 42 978 | 0.12 | E | P3-4 |
| D4 | USB3 SS ESD | RClamp0524PATCT | C40960 | DFN-10 | 154 186 | 0.05 | E | 0.3 pF — P3-4 |
| FB | Ferrite 600 Ω | GZ1608D601TF | C1002 | 0603 | 1.4 M | 0.008 | B | |
| L3–L4 | LPF inductors | LQW18AN R22/R47 | C86139 / C113132 | 0603 | 41k / 12k | 0.04 | E | values from filter design |
| SW1–SW2 | Reset, BOOTSEL | TS-1187A-B-A-B | C318884 | 5.1×5.1 | 814 790 | 0.017 | B | |
| U10 | Parallel ADC | ADC10065CIMT/NOPB | C1542621 | TSSOP-28 | 4 | 14.05 | E | DNP (D42), user-fitted |
| J5 | 1×4 header + shunt | 2.54 mm | — | TH | — | — | — | generic |
- ≈ 20 unique IC/connector lines, almost all Extended (each adds JLC's Extended-part loading fee). Basic only: 25 MHz HSE crystal, ferrite, buttons, and the 0402 passives.
- Rejected: WAS4729 (80 MHz BW, not USB2 HS), TPS22919 (1.5 A).
9. Area budget (playing-card outline, D19)
Courtyard estimates incl. local decoupling, from package sizes (CH32H417MEU6 QFN88 = 10 × 10 mm, 0.4 mm pitch, D54; DS V1.9 §4.1). Board = 63.5 × 88.9 mm = 5645 mm² per side.
| Block | Footprint estimate | mm² |
|---|---|---|
| CH32H417 QFN88 + decoupling ring | 15 × 15 | 225 |
| 3 × SN74CBTLV3257 (TSSOP-16) | 3 × 6 × 7.5 | 135 |
| RP2354B QFN80 + SMPS inductor + decoupling | 15 × 15 | 225 |
| microSD push-push socket | 15 × 14.5 | 218 |
| J1 USB-C 3.x (24-pin) | 9.5 × 8 | 76 |
| J2, J3 USB-C 2.0 (16-pin) | 2 × 9 × 7.5 | 136 |
| ADC10065 TSSOP-28 + passives (DNP part, fitted footprint) | 14 × 10 | 140 |
| Si5351A + 25 MHz crystal | 8 × 8 | 64 |
| LC filter + bias networks | — | 100 |
| 1×4 2.54 mm header + jumper | 12 × 4 | 48 |
| 3V3 buck + inductor + caps | 10 × 8 | 80 |
| Load switch, 3 × LM66100, TS3USB221A | — | 98 |
| USB ESD (3 × USBLC6 + SS array) | — | 48 |
| Crystals CH32 25 MHz + RP 12 MHz | 2 × 5 × 5 | 50 |
| 2 buttons (CH32 reset, RP BOOTSEL) | 2 × 5 × 4 | 40 |
| Series resistors (≈ 30 lines, 0402 arrays) | — | 30 |
| Test pads (spare RP GPIO, logic), LEDs | — | 60 |
| 4 × M3 mounting holes (keep-out) | 4 × 6.5² | 170 |
| Total | ≈ 1940 (34 % of one side) |
- Fits on one side with room for routing (rule of thumb: ≤ 50–60 % placement density), but parts go on both sides where it helps (D48):
- Top: connectors J1–J5, microSD, CH32, RP2354B, Si5351 + crystals, ADC10065 (hand-fitted), buck + inductor, TS3USB221A, ESD (at the connectors), LC filter, buttons.
- Bottom: CH32 / RP2354B / Si5351 decoupling directly under their power pins (shortest loops, frees the top ring for DVP / USB3 / SDMMC fan-out), series-R arrays on the RP↔CH32 lines, bias networks, LM66100 ×3, load switch, test pads.
- Placement sketch: J1 + J2 on one short edge with the CH32 right behind J1 (SS pairs < 15 mm); J3 on the opposite short edge next to the RP2354B; microSD at a corner beside the CH32 (SDMMC on PC8–PC12/PD2 side); ADC10065 + filter + header along a long edge next to the DVP pins (PE0–PE6, PF3/PF4/PF14), away from J1; logic lines (PD10–15/PC6/PC7) and counter lines (RP GPIO20–30 → 2:1 switch) run RP → CH32, length-matched loosely (≤ 5 mm skew at 75 MHz).
- QFN88 at 0.4 mm pitch (D54, LCSC footprint
QFN-88_L10.0-W10.0-P0.40-BL-EP7.7): standard JLC 6-layer rules are enough.