Skip to the content
4 layers26 × 98 mmDongle pro, the printed circuit board in 3D

Reformat an Apple Silicon mac from any platform.

Size
26 × 98 mm
Copper layers
4
Thickness
1.6 mm
Parts
111
Nets
87
Pads
525
Tracks, vias
1,865, 253
Pours
4
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
3 Jul 2026
Updated
28 Oct 2026

Overview

Dongle pro is an open-source printed circuit board by fcjr, from the fcjr/restorekit repository on GitHub, published under the Apache-2.0 licence. It is a 4-layer board of 26 × 98 mm with 111 parts on 87 nets, routed with 1,865 tracks and 253 vias.

It is built around the RP2354A, FUSB302BMPX and GL3510-OSY52, with the HD3SS3212IRKSR, HD3SS3220RNHR and RT9013-33GB among its other parts. Its parts include 52 capacitors, 22 resistors, 10 ICs, 8 diodes and 3 connectors. It belongs with the RP2350 boards of this library.

Main components

12

README

hardware/dongle-lite/README.md

Dongle-Lite — KiCad hardware

The USB 2.0 variant of the RecoverKit dongle: an RP2354A + FUSB302B board that forces an Apple Silicon / T2 Mac into DFU over USB-PD, no keyboard dance required. See ../README.md for how the dongle family works and how the Lite compares to the Dongle-Pro, ./PRD.md for the product spec, and ./BOM-sourcing.md for parts sourcing.

How it works (short version)

The host plugs into J1, the target Mac into J2. A CH334F USB 2.0 hub puts two devices on the host's bus: the RP2354A (control + CDC serial for restorekit) and the target itself. The FUSB302B drives the target CC line with Apple's vendor-defined USB-PD messages to flip the Mac into DFU; an AP22653 load switch power-cycles target VBUS for clean re-enumeration; two 74AVC1T45s break out the target's SBU debug UART at 1.2 V. Restore data flows host ↔ target straight through the hub — the MCU only triggers, never proxies.

Status

  • Schematic: complete, single sheet, functionally clustered, ERC 0.
  • Layout: two builds of the same netlist:
    • dongle-lite.kicad_pcb — original two-sided 4-layer layout (mfg-jlcpcb/).
    • dongle-lite-1s4l.kicad_pcb — single-sided 4-layer relayout for JLCPCB Economic PCBA (mfg-jlcpcb-1s4l/, DRC report checked in). This is the one to order.
  • Firmware: ../../crates/dongle-lite-fw (Embassy, rp235xa). The GPIO map lives in the firmware source and matches gen/board.py.

Clusters

One flat sheet (dongle-lite.kicad_sch), five functional clusters — parts that talk to each other are drawn wired together, only cross-cluster signals use labels:

ClusterContents
MCU coreRP2354A (internal stacked flash — no external QSPI part), 12 MHz crystal, BOOT button, Tag-Connect J3
USB-PDFUSB302B, I²C pull-ups, target CC
USB hub + portsCH334F hub, both 16-pin USB-C receptacles, ESD arrays, host CC pull-downs
SBU serial2× 74AVC1T45 1.2 V level translators
Power3.3 V + 1.2 V LDOs, target-VBUS load switch, LEDs

USB D+/D− pairs are impedance-controlled differential pairs on the PCB.

How this was built

Every part is a real LCSC component. Symbols, footprints, and 3D models were pulled with easyeda2kicad into the project-local libraries under lib/ (shared with the Pro via its lib symlink); sym-lib-table / fp-lib-table register them via ${KIPRJMOD}.

The schematic is generated, not hand-drawn: gen/board.py is the authoritative netlist (every part → cluster placement, every pin → net) and gen/gen.py emits the .kicad_sch. Regenerate:

sh
cd hardware/dongle-lite
python3 gen/board.py            # writes dongle-lite.kicad_sch
kicad-cli sch erc dongle-lite.kicad_sch

Key parts (all LCSC)

RefPartLCSCFunction
U1RP2354AC41378174MCU (USB-native composite; 2 MB internal flash)
U2FUSB302BMPXC132291USB-PD PHY, drives target CC (Apple DFU VDM)
U3CH334FC5187527USB 2.0 hub — host sees MCU + target. PSELF (18) and RESET#/CDP (16) are left open — see below
U5RT9013-33GBC477733.3 V LDO from host 5 V
U6TLV70212C814621.2 V LDO for the SBU translator low side
U8, U974AVC1T45GWC282330SBU1/SBU2 level translators (3.3 ↔ 1.2 V)
U10AP22653C2158037Target-VBUS load switch (current-limited)
D10, D11USBLC6-2SC6C7519ESD arrays on host / target D±
J1, J2HRO TYPE-C-31-M-12C165948Host / target USB-C (16-pin)
Y1, Y212 MHz 3225C9002MCU + hub crystals

Full BOM/CPL for ordering are in the mfg-jlcpcb*/ packages.

Hub strap pins

PSELF (18) and RESET#/CDP (16) on U3 are both left open, matching Adafruit's CH334F breakout (product 5997).

PSELF has a built-in pull-up and defaults high = self-powered, which is what makes the hub advertise 500 mA per downstream port. Tied to GND it advertises bus-powered and caps every port at one unit load, 100 mA. A target Mac in DFU fits under that, but every later restore stage asks for 500 mA, so the host refuses to configure the target and the restore dies partway through with a power error. The board still draws from the host's VBUS — this is a declaration, not a supply.

RESET#/CDP is sampled at power-up too: held high it enables CDP (downstream charging-port advertisement) and turns off the hub's low-power sleep. The datasheet wants it "completely suspended when not reset", so there is no pull-up on it.

ERC configuration

pin_not_driven, pin_to_pin, lib_symbol_issues, and lib_symbol_mismatch are set to ignore in the project files: the LCSC-generated symbols type passive/IO pins as "Input/Unspecified", not real disconnections. Everything else keeps default severity.

Parts

111
QtyValueFootprintReferences
30100nFC0402C10, C11, C12, C13, C20, C21, C25, C27, C28, C30, C31, C32, C33, C34, C35, C36 +14
91uFC0402C4, C14, C23, C24, C26, C29, C37, C51, C54
610kR0402R1, R9, R21, R22, R23, R24
610uFC0805C22, C38, C40, C45, C46, C53
422pFC0805C1, C2, C15, C16
4TPD4E05U06DQAR_C138714USON-10_L2.5-W1.0-P0.50-BLD12, D13, D14, D15
3100kR0402R18, R20, R25
31kR0402R10, R11, R13
34.7kR0402R2, R3, R4
34.7uFC0402C6, C7, C9
347kR0603R8, R17, R19
23.3uHIND-SMD_L2.0-W1.6_AOTA-B201610S3R3-101-TL1, L2
274AVC1T45GW,125SC-88-6_L2.0-W1.3-P0.65-LS2.1-BLU8, U9
2KT-0603RLED-SMD_L1.6-W0.8-R-RDD1, D2
2TYPE-C24PQTUSB-C-SMD_TYPE-C-24P-QTJ1, J2
2USBLC6-2SC6SOT-23-6_L2.9-W1.6-P0.95-LS2.8-BLD10, D11
1+1V1TestPoint_Pad_D1.0mmTP4
1+1V2TestPoint_Pad_D1.0mmTP3
1+3V3TestPoint_Pad_D1.0mmTP2
1+5VTestPoint_Pad_D1.0mmTP1
1200kR0402R15
120kR0402R16
125MHzCRYSTAL-SMD_4P-L3.2-W2.5-BLY2
133R0402R12
1910kR0402R14
1AP22653W6-7SOT-23-6_L2.9-W1.6-P0.95-LS2.8-BRU10
1FUSB302BMPXMLP-14_L2.5-W2.5-P0.50-BL-EPU2
1FUSB_INTTestPoint_Pad_D1.0mmTP8
1GL3510-OSY52QFN-64_L8.0-W8.0-P0.40-BL-EP5.4U4
1GNDTestPoint_Pad_D1.0mmTP6
1HD3SS3212IRKSRDHVQFN-20_L4.5-W2.5-P0.50-BL-EPU7
1HD3SS3220RNHRWQFN-30_L4.5-W2.5-P0.4-BL-EPU3
1HUB_1V2TestPoint_Pad_D1.0mmTP10
1HUB_3V3TestPoint_Pad_D1.0mmTP9
1HUB_RSTnTestPoint_Pad_D1.0mmTP11
1RP2354AQFN-60_L7.0-W7.0-P0.40-TL-EP3.4U1
1RT9013-33GBSOT-23-5_L3.0-W1.7-P0.95-LS2.8-BLU5
1RUNTestPoint_Pad_D1.0mmTP7
1TC2030-IDC-NLTag-Connect_TC2030-IDC-NL_2x03_P1.27mm_VerticalJ3
1TGT_VBUSTestPoint_Pad_D1.0mmTP5
1TLV70212DBVRSOT-23-5_L3.0-W1.7-P0.95-LS2.8-BLU6
1TS-1187A-B-A-BSW-SMD_4P-L5.1-W5.1-P3.70-LS6.5-TL_H1.5SW1
1X322512MSB4SICRYSTAL-SMD_4P-L3.2-W2.5-BLY1

More from fcjr/restorekit

2
  • 6 layers16 × 55 mmDongle lite, the printed circuit board in 3D

    Dongle lite

    fcjr/restorekit

    Reformat an Apple Silicon mac from any platform.

    65 parts34Apache-2.0
  • 2 layers16 × 43 mmDongle probe, the printed circuit board in 3D

    Dongle probe

    fcjr/restorekit

    Reformat an Apple Silicon mac from any platform.

    36 parts34Apache-2.0

Similar boards

  • 2 layers32.4 × 52.4 mmM1-ubmc, the printed circuit board in 3D

    M1-ubmc

    kernelorg-mirror/linux_kernel_git_maz_cs-hw

    Central Scrutinizer gadget

    46 partsMIT
  • 2 layers130 × 156 mmRobot, the printed circuit board in 3D

    Robot

    roman-khvatov/RoboWay

    Кружок робототехники RoboWay

    173 parts1MIT
  • 6 layers133 × 102 mmIasis, the printed circuit board in 3D

    Iasis

    hydazz/iasis

    An optional Raspberry Pi Compute Module 5 carrier for Iasis. It plugs into the main board's HubPD population and carries Ethernet, NVMe storage, an accessory USB-C port and a service USB-C port.

    723 partsApache-2.0
  • 4 layers50 × 36 mmMinicontrol, the printed circuit board in 3D

    Minicontrol

    Jotrorox/minicontrol

    RP2354A + 868 MHz LoRa (Ai-Thinker Ra-01SH) USB-C controller board, designed in KiCad 10.

    66 partsBSD-2-Clause
  • 4 layers96 × 96.3 mmMstd, the printed circuit board in 3D

    Mstd

    xvrxvr/mstd

    Both machines are based on the K1801 series CPUs, which are compatible with the DEC PDP-11 instruction set and use a simplified version of the DEC UNIBUS-like MPI system bus.\ Wiki MPI BUS (In Russian)

    94 partsMIT
  • 4 layers130 × 105 mmHomeDeck, the printed circuit board in 3D

    HomeDeck

    Kilan777/HomeDeck

    Jarvis HomeDeck: a Raspberry Pi CM4 carrier board and voice-assistant software for a 7-inch smart display (KiCad hardware, generated from Python, plus the Python/JS assistant)

    228 parts1

Questions

How big is the Dongle pro PCB?

It measures 26 × 98 mm and has 4 copper layers, 1.6 mm thick.

What parts does the Dongle pro use?

111 parts, built around the RP2354A, FUSB302BMPX, GL3510-OSY52 and HD3SS3212IRKSR. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Dongle pro KiCad files?

From the fcjr/restorekit repository on GitHub, at the commit this page was made from: the board is hardware/dongle-pro/dongle-pro.kicad_pcb and its schematic hardware/dongle-lite/dongle-lite.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Dongle pro design in my own project?

Its repository publishes it under the Apache-2.0 licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).