Skip to the content
PCBKitNew board
2 layers34 × 25.5 mmNicklink, the printed circuit board in 3D

NickLink v1.3 — compact STM32F103C8 breakout board (KiCad)

Size
34 × 25.5 mm
Copper layers
2
Thickness
1.6 mm
Parts
46
Nets
55
Pads
215
Tracks, vias
730, 79
Pours
5
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
10 Sep 2026
Updated
14 Oct 2026

Overview

Nicklink is an open-source printed circuit board by NickStassen, from the NickStassen/nicklink repository on GitHub, published under the MIT licence. It is a 2-layer board of 34 × 25.5 mm with 46 parts on 55 nets, routed with 730 tracks and 79 vias.

It is built around the STM32F103C8T6, LSM6DSV and TLV76733DRVR, with the USBLC6-2P6, 1N5819WS and DMP2165UW among its other parts. Its parts include 14 capacitors, 12 resistors, 4 ICs, 3 diodes and 3 connectors. It belongs with the interfaces and adapters and microcontroller boards boards and the STM32 boards of this library.

Main components

6

README

tools/README.md

NickLink build tools

NickLink is generated, not hand-edited. Change the inputs below, then rebuild. Everything runs in the kicad/kicad:10.0 Docker image, so no local KiCad install is needed. Freerouting runs in eclipse-temurin:25-jre.

Inputs

FileWhat it holds
spec.pyParts, values, footprints, pin→net map, header pinout, LCSC numbers. Single source of truth.
placement.pyBoard size, label-strip geometry, every part's position/rotation, front part labels.
board_template.kicad_pcbBoard setup only (stackup, solder-mask web, plot settings) for build_pcb.py.
gen_sch.pySchematic layout (block positions in its LAYOUT table).

Pipeline

sh
tools/build_all.sh   # sch -> place -> autoroute -> stitch -> DRC -> nicklink.kicad_pcb
tools/fab.sh         # gerbers, drills, BOM/CPL, PDFs, renders, checks/
ScriptStep
sch.shRuns gen_sch.py, ERC (must be 0/0), exports the netlist and checks it against spec.py (check_netlist.py); refreshes docs/schematic.pdf and docs/images/schematic.png.
place.shRuns build_pcb.py: footprints, nets and symbol links from the netlist, outline, GND pours, silkscreen (front pin labels, back cheat sheet). Also writes _work/placed.png, a placement preview with courtyard-overlap check and ratsnest length (preview.py).
autoroute.shExports a Specctra DSN, runs Freerouting headless, imports the SES and refills the pours. Existing tracks are kept as fixed. With RIPUP=1, only locked pre-routes stay fixed, so a second pass may rip up and redo the first pass's tracks.
stitch.pyAdds GND stitching vias wherever both pours have room, then drops any via that ends up on isolated copper.
drc.shkicad-cli pcb drc with schematic parity; exits nonzero on any violation. JLCPCB limits come from the board setup plus nicklink.kicad_dru.
route_try.shOne placement variant end to end (place, route, stitch, DRC) for the seed search.
render.sh3D top/bottom renders plus 2D layer plots (svg2png.py).
compare.pyAny number of boards side by side at a fixed physical scale (px/mm), e.g. docs/images/compare-v1.1-v1.2-v1.3.png. Outline-only entries are allowed for boards without files.
pinout.pyWrites docs/pinout.csv from spec.py and prints the README pinout table.
netreport.pyPer-net length per layer and via count (check USB/HSE routing).
build_pcb.py --resilkRedraws only the silkscreen on an already-routed board. Use it for label tweaks without re-routing.
fixroute.shFinishes a connection Freerouting left open: a small two-layer grid router (fixroute.py) joins the copper cluster holding one pad to the cluster holding another, e.g. tools/fixroute.sh in.kicad_pcb out.kicad_pcb GND R5.1 U1.23 0.25. Run drc.sh afterwards.
gndnet.pyGND connectivity per pour island (KiCad treats a whole zone as one item), so floating island pairs show up. stitch.py uses the same idea.
swapfp.pySwaps a placed footprint for a same-pad variant (e.g. NoSilk) on a routed board, keeping nets and the symbol link.
bringup_img.shRenders the board and draws the bring-up pictures (docs/images/bringup-*.png: ST-Link wiring, check points) from the real pad positions (bringup_img.py).
nosilk.pyCopies a library footprint into nicklink.pretty without its silkscreen.
kdockRuns a command in the KiCad container with the repo and 3D models mounted.

_work/, 3dmodels/ and the Freerouting jar are local caches, ignored by git. get3d.sh and autoroute.sh download them on first use.

Routing notes

  • placement.py PREROUTE holds locked tracks laid before autorouting (currently the crystal nets), so the critical nets don't depend on Freerouting.
  • Freerouting's result is very sensitive to placement. If a placement change leaves nets unrouted, run a few tools/route_try.sh s<n> "" <n> in parallel (at most about 4, since each Freerouting JVM needs a few GB of RAM). Each one nudges small parts by up to ±0.1 mm (NICKLINK_SEED), then routes, stitches and runs DRC. Bake the offsets of a clean seed into PLACE. The current layout uses seed 3 (second review wave), which Freerouting routes fully on its own. If a seed leaves one or two items, fixroute.sh is usually faster than more seeds. Hand-routed nets live in PREROUTE, PREROUTE_B and PREVIAS: crystal, IMU fan-out and GND returns, the power path, the USB-C orientation ties, and GND vias for boxed-in pads.
  • build_all.sh retries the route, stitch and DRC step (TRIES, default 3) because Freerouting's optimizer is time-limited.

Typical edits

  • Swap a part or value: edit spec.py, run build_all.sh.
  • Change only silkscreen text or labels: edit build_pcb.py / placement.py, then run tools/kdock python3 tools/build_pcb.py --resilk nicklink.kicad_pcb and tools/drc.sh nicklink.kicad_pcb.
  • Move a part: edit placement.py, run place.sh and look at _work/placed.png until there are no overlaps, then run build_all.sh.
  • Change the header pinout: edit the J1/J3 maps in spec.py. Labels, the schematic, pinout.csv and the routing all follow. Run pinout.py and update the README table.

Parts

46
QtyValueFootprintReferences
8100nCapacitor_SMD:C_0402_1005MetricC1, C2, C3, C6, C9, C13, C14, C15
210kResistor_SMD:R_0402_1005MetricR1, R10
215pCapacitor_SMD:C_0402_1005MetricC10, C11
21uCapacitor_SMD:C_0402_1005MetricC7, C8
24k7Resistor_SMD:R_0402_1005MetricR7, R9
2Conn_02x10_Odd_Evennicklink:PinHeader_2x10_P2.54mm_Vertical_NoSilkJ1, J3
10.5AFuse:Fuse_0805_2012MetricF1
110knicklink:R_0402_1005Metric_NoSilkR8
1120R@100MHzInductor_SMD:L_0402_1005MetricFB1
11N5819WSDiode_SMD:D_SOD-323D2
11RResistor_SMD:R_0805_2012MetricR12
11k5Resistor_SMD:R_0402_1005MetricR3
12k2Resistor_SMD:R_0402_1005MetricR2
1330Resistor_SMD:R_0402_1005MetricR6
14k7nicklink:R_0402_1005Metric_NoSilkR11
14u7Capacitor_SMD:C_0402_1005MetricC4
14u7 16VCapacitor_SMD:C_0402_1005MetricC12
15k1nicklink:R_0402_1005Metric_NoSilkR5
15k1Resistor_SMD:R_0402_1005MetricR4
18MHzCrystal:Crystal_SMD_3225-4Pin_3.2x2.5mmY1
1BOOT0nicklink:SW_SPST_B3U-1000P_NoSilkSW2
1DMP2165UWnicklink:SOT-323_SC-70_NoSilkQ1
1GREENLED_SMD:LED_0402_1005MetricD3
1H1MountingHole:MountingHole_2.2mm_M2_ISO7380H1
1H2MountingHole:MountingHole_2.2mm_M2_ISO7380H2
1H3MountingHole:MountingHole_2.2mm_M2_ISO7380H3
1H4MountingHole:MountingHole_2.2mm_M2_ISO7380H4
1LSM6DSVnicklink:LGA-14_3x2.5mm_P0.5mm_LayoutBorder3x4y_NoSilkU4
1REDLED_SMD:LED_0402_1005MetricD1
1RESETnicklink:SW_SPST_B3U-1000P_NoSilkSW1
1STM32F103C8T6Package_QFP:LQFP-48_7x7mm_P0.5mmU1
1TLV76733DRVRnicklink:WSON-6-1EP_2x2mm_P0.65mm_EP1x1.6mm_ThermalVias03U2
1USBLC6-2P6Package_TO_SOT_SMD:SOT-666U3
1USB_C_Receptacle_USB2.0_16Pnicklink:USB_C_Receptacle_GCT_USB4085_EdgeSilkJ2

Questions

How big is the Nicklink PCB?

It measures 34 × 25.5 mm and has 2 copper layers, 1.6 mm thick.

What parts does the Nicklink use?

46 parts, built around the STM32F103C8T6, LSM6DSV, TLV76733DRVR and USBLC6-2P6. 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 Nicklink KiCad files?

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

Can I use the Nicklink design in my own project?

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

Similar boards

  • 4 layers82 × 70 mmCansat2026, the printed circuit board in 3D

    Cansat2026

    denshiruko/cansat2026-board

    252 partsMIT
  • 4 layers62 × 74.5 mmControl Board POC, the printed circuit board in 3D

    Control Board POC

    ParadigmEngineering/aks-2026-hardware

    Autonomous Karting Series (2026) hardware for Paradigm Engineering

    85 parts1
  • 4 layers89 × 38 mmHotPlate, the printed circuit board in 3D

    HotPlate

    Markuselectronics/DIY-USB-C-Reflow-Hotplate

    A compact, open-source DIY Reflow Hotplate powered by USB-C PD and STM32. Features a custom aluminum PCB heater, OLED display, and PID temperature control for portable SMD soldering.

    82 parts7
  • 2 layers83 × 56 mmPandahat, the printed circuit board in 3D

    Pandahat

    BRA1L0R/panda-pcb

    116 parts
  • 4 layers52 × 52 mmSpeedo pcb, the printed circuit board in 3D

    Speedo pcb

    h4ctar/motorbike-speedo

    Motorbike Speedo Gauge

    66 parts
  • 4 layers36 × 36 mmTrackMAG, the printed circuit board in 3D

    TrackMAG

    mupfdev/TrackMAG

    An open hardware development board primarily intended for the development of accessible input devices.

    58 parts3
  • 2 layers50 × 63 mmZenith Development Board, the printed circuit board in 3D

    Zenith Development Board

    zenitheesc/Zenith-Development-Board

    The Zenith Development Board was developed to serve as a first project for the new members of the group.

    69 parts3MIT