Skip to the content
PCBKitNew board
2 layers16 × 43 mmDongle probe, the printed circuit board in 3D

Dongle probe

fcjr/restorekit34

Reformat an Apple Silicon mac from any platform.

Size
16 × 43 mm
Copper layers
2
Thickness
1.62 mm
Parts
36
Nets
62
Pads
162
Tracks, vias
350, 54
Pours
2
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
3 Jul 2026
Updated
28 Oct 2026

Overview

Dongle probe 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 2-layer board of 16 × 43 mm with 36 parts on 62 nets, routed with 350 tracks and 54 vias.

It is built around the RP2354A, RT9013-33GB and KT-0603R, with the AOTA-B201610S3R3-101-T, TS-1187A-B-A-B and TYPE-C-31-M-12 among its other parts. Its parts include 14 capacitors, 11 resistors, 3 diodes, 2 ICs and 2 connectors. It belongs with the sensors and measurement boards and the RP2350 boards of this library.

Main components

8

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

36
QtyValueFootprintReferences
6GCM155R71H104KE02Dstdlib_kicad-footprints_Capacitor_SMD:C_0402_1005MetricC9, C10, C11, C12, C13, C14
5ERJ-2RKF33R0Xstdlib_kicad-footprints_Resistor_SMD:R_0402_1005MetricR3, R6, R7, R8, R11
34.7uFstdlib_kicad-footprints_Capacitor_SMD:C_0402_1005MetricC3, C4, C5
3ERJ-2RKF1001Xstdlib_kicad-footprints_Resistor_SMD:R_0402_1005MetricR5, R9, R10
3ERJ-2RKF5101Xstdlib_kicad-footprints_Resistor_SMD:R_0402_1005MetricR1, R2, R4
2GCM1555C1H220FA16Dstdlib_kicad-footprints_Capacitor_SMD:C_0402_1005MetricC6, C7
2GRM155Z71A105KE01Dstdlib_kicad-footprints_Capacitor_SMD:C_0402_1005MetricC2, C8
2KT-0603Rfcjr_restorekit_lib_dongle-probe:LED-SMD_L1.6-W0.8-R-RDD1, D2
1stdlib_kicad-footprints_Jumper:SolderJumper-2_P1.3mm_Open_Pad1.0x1.5mmJP1
12.54-2*3Pstdlib_kicad-footprints_Connector_PinHeader_1.27mm:PinHeader_2x03_P1.27mm_VerticalJ2
1AOTA-B201610S3R3-101-Tfcjr_restorekit_lib_dongle-probe:IND-SMD_L2.0-W1.6_AOTA-B201610S3R3-101-TL1
1GRM21BZ71E106KE15Kstdlib_kicad-footprints_Capacitor_SMD:C_0805_2012MetricC1
1RP2354Afcjr_restorekit_lib_dongle-probe:QFN-60_L7.0-W7.0-P0.40-TL-EP3.4U1
1RT9013-33GBfcjr_restorekit_lib_dongle-probe:SOT-23-5_L3.0-W1.7-P0.95-LS2.8-BLU2
1TS-1187A-B-A-Bfcjr_restorekit_lib_dongle-probe:SW-SMD_4P-L5.1-W5.1-P3.70-LS6.5-TL_H1.5SW1
1TYPE-C-31-M-12fcjr_restorekit_lib_dongle-probe:USB-C_SMD-TYPE-C-31-M-12_1J1
1USBLC6-2SC6fcjr_restorekit_lib_dongle-probe:SOT-23-6_L2.9-W1.6-P0.95-LS2.8-BLD3
1X322512MSB4SIfcjr_restorekit_lib_dongle-probe:CRYSTAL-SMD_4P-L3.2-W2.5-BLY1

Questions

How big is the Dongle probe PCB?

It measures 16 × 43 mm and has 2 copper layers, 1.62 mm thick.

What parts does the Dongle probe use?

36 parts, built around the RP2354A, RT9013-33GB, KT-0603R and AOTA-B201610S3R3-101-T. 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 probe KiCad files?

From the fcjr/restorekit repository on GitHub, at the commit this page was made from: the board is hardware/dongle-probe/layout/layout.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 probe 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).

More from fcjr/restorekit

2
  • 4 layers26 × 98 mmDongle pro, the printed circuit board in 3D

    Dongle pro

    fcjr/restorekit

    Reformat an Apple Silicon mac from any platform.

    111 parts34Apache-2.0
  • 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

Similar boards

  • 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
  • 2 layers40 × 89.5 mmMono, the printed circuit board in 3D

    Mono

    jmcpheron/pico-quorum

    Several people, several keys, one Safe. Hardware approvals for Safe multisig wallets.

    89 partsMIT
  • 4 layers63 × 85 mmFujiNet O2-Rev0, the printed circuit board in 3D

    FujiNet O2-Rev0

    FujiNetWIFI/fujinet-hardware

    Schematics and design files for FujiNet hardware

    132 parts142
  • 4 layers21 × 51 mmEasy2350, the printed circuit board in 3D

    Easy2350

    sequoia-hope/ultraroute

    PCB autorouting experiments around copperroute: route jobs, leaderboards, board morphing

    58 parts1MIT
  • 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
  • 2 layers284.7 × 94.2 mmHE60, the printed circuit board in 3D

    HE60

    peppapighs/HE60

    60% Hall-effect keyboard

    332 parts118GPL-3.0
  • 2 layers238.1 × 76.2 mmChai45HE, the printed circuit board in 3D

    Chai45HE

    gohanda11/Chai45HE

    Chai45HE is a 40% Hall-effect keyboard based on the HE60 project. This is a modified version that adapts the original 60% design to a compact 40% layout.

    228 parts1GPL-3.0