Disk Hamr: the PCB is routed

/ UniDisk 3.5 controller / updated 2026-10-16 / from a2m2053_controller @ c783611 pcb kicad freerouting routing power disk-hamr

The board has a name now, Disk Hamr, and a finished layout. 100 x 110 mm, two layers, 46 parts, all on top. Same shape as the 3D-printed outline that fitted the IF-83’s mounting holes and the case opening in M7.

Disk Hamr rev 1.0 in KiCad's 3D viewer. Mechanism header top left, host header and the rear DB-19 footprint top right, the Pico 2 bottom left, the five level shifters between them.
Disk Hamr rev 1.0 in KiCad’s 3D viewer. Mechanism header top left, host header and the rear DB-19 footprint top right, the Pico 2 bottom left, the five level shifters between them.

Schematic changes before layout

Three things moved in the schematic so the board could be routed sanely.

Routed twice

Round one was Claude driving KiCad through Konnect, an MCP bridge to KiCad’s IPC API. It routes one straight segment per call, no push-and-shove, no 45 degrees, and no idea what copper is already under the cursor unless it asks. It got there: DRC clean, every net connected, the power laid out the way I wanted. It also left 112 vias, right angles everywhere, and a few runs that went straight through things it hadn’t looked at. Fine for a prototype, ugly to look at.

So I tried Freerouting 2.5 for comparison. The first attempts were bad for reasons that had nothing to do with the board. I’d locked the power routing and left the pours in, and Freerouting saw a pour on each layer, decided both were power planes, and routed around them. It quit in a few seconds with 49 connections open and 102 new vias. With the pours hidden from it but the locks still on, it counted every ground pin as unrouted and gave up faster.

Wiped clean, no tracks, no vias, no pours, every net to route, it finished everything in 12 seconds, zero violations, 73 vias. That one I imported.

The layout in pcbnew, both copper layers on. Red is the top with the +5 pour, blue the bottom ground plane. The host bus sweeps from J3 at the top right down to U1 in 45-degree bundles.
The layout in pcbnew, both copper layers on. Red is the top with the +5 pour, blue the bottom ground plane. The host bus sweeps from J3 at the top right down to U1 in 45-degree bundles.

The import needed hand work. Freerouting necks traces down where they enter a pad narrower than the trace, and it wrote fifty 0.187 mm stubs that way, under KiCad’s 0.2 mm minimum. Two pieces of ENBL_OUT didn’t survive the round trip. Four ground traces ran inside the board-edge clearance. And with no plane to lean on it had drawn ground as 630 mm of traces, so I dragged vias in by hand to stitch the IC ground pins to the plane. One catch the pour refill found: the mechanism’s +5 group, J2 pins 11 and 20, its bulk cap and the U5 feed, was an island. The SEL, ENBL and WRTDATA drops walled it off on top and the +12 band sat above it. A 1.2 mm run on the bottom from that strap over to the host +5 feed closed it.

Hand-routedFreerouting, fixed by hand
Segments415870
Vias112 (37 ground stitches)84
Bottom-layer tracks cutting the ground plane899 mm1001 mm
Ground as traces133 mm630 mm
45-degree segments42365
DRC0 errors, 0 unconnected0 errors, 0 unconnected

A wash on vias and plane cuts, a clear win on looks and on time. The hand-routed board stays in the repo history.

Power

The +5 lesson from M8 is in copper now. +5 is a pour over the whole top layer; ground is a pour over the whole bottom. +12 gets its own band on the top layer where it crosses from the host header to the mechanism header, carved out of the +5 pour, with a 1 mm bottom-side jumper under the mechanism’s RD trace at the one place it couldn’t stay on top. The +5 and +12 runs between the two headers are 1 mm, the rails to the rear DB-19 the same. The host pull-ups sit in strips of the +5 pour walled in by the bus columns, so a bus on the bottom ties them in.

The one thing I’d still change: between the two headers the 1 mm +5 and +12 bottom-side runs sit side by side and cut a 30 x 4 mm slot out of the ground plane, right across the mechanism-to-host return. The plane is still one piece around it. Prototype.

Checks

CheckResult
DRC with zone refill0 errors, 0 unconnected
Schematic parity0 conflicts
ERCone, the Pico’s AGND and GND pins both typed as power outputs
+5, +12, groundeach one connectivity cluster
Min track, clearance, drill, via ring0.25, 0.2, 0.3, 0.15 mm

Nothing on this board needs an impedance or length check. SmartPort is 250 kbit/s, the shifters have 2 ns edges, the longest trace is 100 mm, and the IWM lines leave the board on a ribbon anyway.

The name

Byte Hamr is the FPGA card. This one is Disk Hamr, and it borrows the hammer and the Katari type from that board’s silkscreen. Rev. 1.0, DH-1-0.

Into the case

A STEP and an STL of the populated board came out of KiCad for a print, to check the parts against the inside of the UniDisk case the way the bare outline was checked in M7.1.

The STL of the populated board in PrusaSlicer, headed for a print to check clearances inside the UniDisk case. The DB-19 is missing from the model; the real connector was fit-tested in M7.2.
The STL of the populated board in PrusaSlicer, headed for a print to check clearances inside the UniDisk case. The DB-19 is missing from the model; the real connector was fit-tested in M7.2.

Open threads