Skip to the content
PCBKitNew board
4 layers33.9 × 42.3 mmPCBGolf, the printed circuit board in 3D

comma.ai PCBGolf entry: 4-port CAN-FD dev board on a 35 × 43 mm, 4-layer PCBA. KiCad 10.

Size
33.9 × 42.3 mm
Copper layers
4
Thickness
0.79 mm
Parts
253
Nets
275
Pads
1,357
Tracks, vias
2,531, 303
Pours
6
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
20 Sep 2026
Updated
13 Oct 2026

Overview

PCBGolf is an open-source printed circuit board by ulyssecrn, from the ulyssecrn/PCBGolf repository on GitHub. It is a 4-layer board of 33.9 × 42.3 mm with 253 parts on 275 nets, routed with 2,531 tracks and 303 vias.

It is built around the STM32H725VGH6, AP62300TWU and TPS25944ARVCR, with the USB2517-JZX, RC0402FR-0710KL and RC0402JR-07100RL among its other parts. Its parts include 123 resistors, 55 capacitors, 27 diodes, 16 ICs and 9 transistors. It belongs with the microcontroller boards boards and the STM32 boards of this library.

Main components

12

README

README.md

My PCBGolf entry

comma.ai's PCBGolf challenge: a 4-port CAN-FD dev board on a 35 × 43 × 9.3 mm PCBA

Original challenge · Leaderboard · View my layout in KiCanvas

KiCad render of the top side: DC barrel jack, a USB-C host port and four USB-C device ports along one edge, with CAN transceivers and chokes packed between them

PCBGolf is a challenge from comma.ai: take their reference board, loosely based on the panda jungle, and make the assembled PCBA as small as possible while keeping every interface working and every mating connector compatible. The board must be manufacturable and assemblable at JLCPCB. The score is

bounding-box volume (mm³) + 50 × vias + 5,000 × copper layers, lowest wins.

This repo is my submitted entry, finished on the October 12, 2026 deadline. The schematic is comma's. The layout, part choices and the design changes below are mine. comma's original README is kept unchanged at the bottom.

Result

PCBA bounding box34.98 × 43.00 × 9.32 mm (includes the USB-C connector overhang)
Board outline33.9 × 42.3 mm, 0.79 mm thick
Copper layers4: signal / power / ground / signal
Vias303, all through-hole
Parts253, on both sides
Score (by the formula)14,027 + 15,150 + 20,000 = ≈ 49,200

The official score is assigned by comma after review.

Top view renderBottom view render: STM32 BGA, USB hub, microSD socket and the four eFuses
Top: connectors, CAN transceivers and chokes, power suppliesBottom: STM32 (TFBGA-100), USB hub, microSD, port eFuses

What I changed

  • Stackup and placement. 4 layers with an unbroken ground plane on In2. Parts on both sides: the STM32 and the USB hub on the bottom, the CAN transceivers and common-mode chokes on top, all six connectors on two edges.
  • MCU package: LQFP-144 → TFBGA-100. I first tried the 7 × 7 mm UFBGA-169. At 0.5 mm pitch its inner balls carry signals and cannot be escaped on 4 layers without blind or buried vias. The 8 × 8 mm TFBGA-100 at 0.8 mm pitch escapes with ordinary dogbone vias.
  • Package change without touching the schematic. The BGA footprint's pads are renamed to the LQFP-144 symbol's pin numbers, so comma's symbol keeps working and only the pins that don't exist on the smaller package needed rewiring.
  • Pin assignment as a routing tool. Ports F and G aren't bonded out on TFBGA-100, so CAN2 moved to other FDCAN3 pins, and the SBU voltage-sense and current-monitor inputs moved to other ADC pins. I also re-ordered the 24 per-port control signals by channel so they leave the BGA in the same order as the connectors. All of this is a firmware pin-map change, which the rules allow (full table below).
  • Smaller parts. 0201/0402 passives, 2016 crystals, smaller inductors, LEDs and dual FETs, a stemless 1.28 mm Molex microSD socket, and a TLV9101 (SC-70-5) in place of the SOT-23-5 op-amps that drive the CAN activity LEDs.

Why the score isn't higher on the leaderboard

The penalties for layers and vias outweigh size. On this board, layers (20,000) and vias (15,150) make up 71% of the score, while the volume itself is only 14,027.

The top entries went the other way: one copper layer and no vias, with a board up to twice the area. Their fixed penalty is 5,000 instead of my 35,150. Once I had committed to a 4-layer board with a BGA, no amount of shrinking could close that gap. A 4-layer board scores 30,000+ before it has any volume at all.

What I'd do differently:

  • Decide the layer count from the scoring formula first, and treat board area as the variable to give up.
  • Pick an MCU package that can be routed on one or two layers (QFN/LQFP), even if it is larger.
  • Watch the height. The DC barrel jack alone sets about 75% of the board's 9.3 mm height.

Firmware changes

The MCU is an STM32H725VGH6 (TFBGA-100), the same die as the reference STM32H725ZGT (LQFP-144). Power, USB and clock setup are unchanged.

Pin map changes (reference → this board)
SignalReferenceThis boardNotes
CAN2_TX / CAN2_RXPG9 / PG10PD13 / PD12same FDCAN3 peripheral
BTN (GPIO read)PE15PE5button still also drives BOOT0
CH2_SBU2 sensePF7PA3ADC12_INP15 (was ADC3)
CH4_SBU2 sensePF8PA2ADC12_INP14 (was ADC3)
CH2_SBU1 sensePF9PC5ADC12_INP8 (was ADC3)
CH4_SBU1 sensePF10PB0ADC12_INP9 (was ADC3)
CH2_IMONPB1PA6ADC12_INP3
CH3_IMONPF11PA5ADC12_INP19
CH4_IMONPA6PB1ADC12_INP5
CH4_PWR_ENPA5PA7
CH1_SBU1_IGN / RELAYPD0 / PD1PD6 / PD3
CH1_SBU2_IGNPD3PE0
CH2_SBU1_IGN / RELAYPD5 / PD6PD1 / PE1
CH2_SBU2_IGN / RELAYPD8 / PD10PD0 / PD5
CH3_SBU1_IGN / RELAYPD12 / PD11PD14 / PD15
CH3_SBU2_IGN / RELAYPD9 / PD13PE7 / PD11
CH4_SBU1_IGN / RELAYPD14 / PD15PD9 / PE8
CH4_SBU2_IGN / RELAYPE0 / PE1PD8 / PD10

All other signals keep their reference pins.

Files

  • pcbgolf.kicad_pro: KiCad 10 project (the schematics are comma's, the layout is mine)
  • lib_jlc/, pcbgolf.pretty/: footprints, symbols and 3D models; all paths are project-relative
  • assets/renders/: the renders above, made with kicad-cli pcb render


[blocked] Everything below is comma.ai's original challenge README, unchanged.

PCBGolf Challenge

How small can you make this PCBA?

Leaderboard · comma.ai/jobs · Discord · X

The Board

The schematic is loosely based on our panda jungle v2, a development and debugging board for comma devices and pandas. This version includes:

  • 12V DC input with onboard 5V and 3.3V supplies
  • Four OBD-C device ports with individually controlled power and current monitoring
  • Four CAN-FD transceivers and ignition simulation circuitry
  • A USB hub and USB-C host connection
  • A microcontroller and microSD card slot
  • A push button and status LEDs

Explore in your browser with KiCanvas: PCB layout.

Schematics: Power · Microcontroller · USB & microSD · CAN · OBD-C ports

PCBgolf — A little board goes a long way. $1,000 prize.

The Challenge

Your goal is to make the most compact, efficient board that retains the same interfaces and functionality as the original design. The lowest score wins.

Score = PCBA bounding box volume (mm³) + 50 × number of vias + 5,000 × number of copper layers.

Rules

  • The bare PCB must be fully manufacturable by JLCPCB.
  • It must be possible to actually assemble the PCBA.
  • The assembled product must work and be usable.
  • Mating connectors must remain mechanically and electrically compatible.
  • Optimizations that require firmware changes are allowed.

Prize

Lowest score on the leaderboard by October 12, 2026 wins $1,000 cash.

Submission

Submit a .zip file containing your finalized KiCad project and a STEP file of the final assembly here. Competitive scores will be posted on the leaderboard after review. Multiple submissions allowed.

Parts

253
QtyValueFootprintReferences
3910klib_jlc:R_0201_0603MetricR1, R3, R11, R12, R28, R29, R100, R101, R102, R103, R104, R105, R122, R123, R124, R125 +23
30100nFlib_jlc:C_0201_0603MetricC2, C4, C11, C16, C18, C22, C23, C24, C26, C27, C30, C31, C35, C36, C38, C39 +14
24100lib_jlc:R_0201_0603MetricR82, R83, R84, R85, R106, R107, R108, R109, R110, R111, R112, R113, R115, R117, R119, R121 +8
17100klib_jlc:R_0201_0603MetricR4, R5, R6, R13, R14, R15, R16, R17, R18, R19, R20, R24, R25, R52, R55, R58 +1
111klib_jlc:R_0201_0603MetricR2, R21, R23, R90, R92, R94, R96, R114, R116, R118, R120
8LED_GREEN_0402lib_jlc:LED_0402_1005MetricLED30, LED31, LED32, LED33, LED34, LED35, LED36, LED37
8LED_RED_0402lib_jlc:LED_0402_1005MetricLED10, LED11, LED12, LED13, LED14, LED15, LED16, LED17
8NFET-DUAL-COMMON-SOURCE-QS5K2lib_jlc:SSM6N44FE-SOT563-remapQ2, Q3, Q4, Q5, Q6, Q7, Q8, Q9
60Rlib_jlc:R_0201_0603MetricR38, R39, R40, R41, R42, R43
510uFlib_jlc:C_0402_1005MetricC8, C15, C19, C20, C21
52k7lib_jlc:R_0201_0603MetricR22, R62, R63, R64, R65
410ulib_jlc:C_0201_0603MetricC29, C33, C34, C37
410ulib_jlc:C_0603_1608MetricC50, C51, C52, C53
410uFlib_jlc:C_0603_1608MetricC1, C3, C12, C13
412pFlib_jlc:C_0201_0603MetricC14, C17, C28, C32
428klib_jlc:R_0201_0603MetricR66, R67, R68, R69
433klib_jlc:R_0201_0603MetricR70, R71, R72, R73
43k3lib_jlc:R_0201_0603MetricR74, R75, R76, R77
460lib_jlc:R_0201_0603MetricR46, R47, R48, R49
4ACT1210D_CHOKEpcbgolf:CHOKE-3.2X2.5L5, L6, L7, L8
4CH1_PWRlib_jlc:LED_0402_1005MetricLED6, LED7, LED8, LED9
4M2_BOLTpcbgolf:M2_BOLTBH1, BH2, BH3, BH4
4MCP2542FDT-E/MNYpcbgolf:TDFN8_2X3MC_MCHU5, U6, U7, U8
4TLV9101IDCKRlib_jlc:TLV9101-SC70-5U17, U18, U19, U20
4TPS25942pcbgolf:WQFN20U13, U14, U15, U16
4USB-C-FEMALEGCTlib_jlc:USB-C-SMD_TYPE-C-USB-18J5, J6, J7, J8
23u3lib_jlc:IND_3225_3R3L1, L2
25.1klib_jlc:R_0201_0603MetricR32, R44
2AP62300Tpcbgolf:SOT23-6U1, U2
2DNPlib_jlc:C_0201_0603MetricC6, C10
112klib_jlc:R_0201_0603MetricR27
11Mlib_jlc:R_0201_0603MetricR26
1220pFlib_jlc:C_0201_0603MetricC25
124MHzlib_jlc:Crystal_2016_24MY2
125MHzlib_jlc:Crystal_2016_25MY1
12u2pcbgolf:0806L4
14.7uFlib_jlc:C_0402_1005MetricC54
152k3lib_jlc:R_0201_0603MetricR10
1CANpcbgolf:2X04J4
1CAN0lib_jlc:LED_0402_1005MetricLED2
1CAN1lib_jlc:LED_0402_1005MetricLED3
1CAN2lib_jlc:LED_0402_1005MetricLED4
1CAN3lib_jlc:LED_0402_1005MetricLED5
1CREE-RGB-CLMVClib_jlc:RGB_NH-B1010LED1
1DCBARRELSMTlib_jlc:DC-IN-SMD_DC-044D-2.5A-2.0-SMTJ1
1DIODEDB2W40100Lpcbgolf:SOD-123FD2
1L-US-L2pcbgolf:0603-LL3
1MICRO_SD-0472192001lib_jlc:microSD_Molex_5033981892J2
1SIS427-VIpcbgolf:PP-1212-8Q1
1SPST-2-4PINlib_jlc:SW_TS2306ASW1
1STM32H725VGH6lib_jlc:STM32H725-TFBGA100-remapU3
1TVS-BI-DO214AAlib_jlc:D_SMAD1
1USB-C-FEMALElib_jlc:USB-C-J3-molexJ3
1USB2517pcbgolf:QFN64-9X9U4

Questions

How big is the PCBGolf PCB?

It measures 33.9 × 42.3 mm and has 4 copper layers, 0.79 mm thick.

What parts does the PCBGolf use?

253 parts, built around the STM32H725VGH6, AP62300TWU, TPS25944ARVCR and USB2517-JZX. 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 PCBGolf KiCad files?

From the ulyssecrn/PCBGolf repository on GitHub, at the commit this page was made from: the board is pcbgolf.kicad_pcb and its schematic pcbgolf.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the PCBGolf design in my own project?

Its repository states no licence, so its author keeps all rights: ask ulyssecrn before reusing the design.

Similar boards

  • 2 layersPcbgolf, the printed circuit board in 3D

    Pcbgolf

    chilly23/PCBGolf-master-Comma.ai

    Compact PCB studies for the comma.ai PCBGolf challenge, including KiCad and EasyEDA designs, BOMs, STEP models, and routing-status reports.

    245 partsMIT
  • 4 layers45 × 38 mmMerlynCAM, the printed circuit board in 3D

    MerlynCAM

    YeetTheAnson/MerlynCAM

    An action camera that records at 1080p@90, 1440p@60 and 4k@20 (With I2S microphone and gyro logging @ 150Hz)

    150 parts1
  • 4 layers41.4 × 27.9 mmImu geolocator, the printed circuit board in 3D

    Imu geolocator

    gabrielpgagne/imu-geolocator-hw

    An experimental project about trying to use an IMU as a geolocalization device.

    34 partsGPL-3.0
  • 4 layers41.2 × 49.9 mmEdu V2.2, the printed circuit board in 3D

    Edu V2.2

    LivioScherrer/MinTurtle

    75 parts
  • 6 layers40.8 × 17.6 mmPicoROM-32, the printed circuit board in 3D

    PicoROM-32

    wickerwaka/PicoROM

    An RP2040-based ROM emulator

    67 parts336MIT
  • 4 layers65 × 30 mmMu cell bb, the printed circuit board in 3D

    Mu cell bb

    Jankyneering/mu-cell

    An open-source SDR base station

    85 parts22CC-BY-SA-4.0
  • 2 layers13.4 × 23.8 mmOpenRemoteID, the printed circuit board in 3D

    OpenRemoteID

    OpenDrone-hw/OpenRemoteID

    Open hardware concept for a standalone Remote ID module: ESP32-C3 plus GNSS receiver. Incomplete, not a compliant product.

    6 parts7CERN-OHL-S-2.0
  • 4 layers45 × 32.5 mmFlashKa panel, the printed circuit board in 3D

    FlashKa panel

    DomPka/LuxLibre

    Pick a light · Compare · Web apps · Firmware · Design your own · Build a FlashKa · Repository map · Help

    143 partsGPL-3.0