KiCad + FreeRouting on a 6-Layer Power Board: Field Notes
Bound the batch run or it never ends, hand-route the critical nets, and never trust the autorouter with trace width — practical notes from autorouting a dense power PCB.
Autorouters have a bad reputation on power boards, and most of it is earned: they happily route 20 A through a 0.25 mm trace and call it done. But used as a finisher — after you have constrained the problem properly — FreeRouting can clear hundreds of mundane signal nets on a dense 6-layer board while you spend your time on the nets that actually matter. These are my working notes from doing exactly that.
Export a clean DSN first
The handoff is the Specctra DSN format: in KiCad's PCB editor, File → Export → Specctra DSN, run FreeRouting against the .dsn, then bring the result back with File → Import → Specctra Session (.ses). Before exporting, run DRC and fix everything — the autorouter will not fix your footprint errors, it will faithfully route around them and produce garbage.
Bound the batch run, or it never ends
This is the lesson that cost me a night: FreeRouting's batch mode loops until it hits its maximum pass count (default 999) and writes the .ses file only on a clean exit. Kill the process — or lose the machine to a reboot — and the entire routing session in memory is gone, with no partial file to recover. The pass-limit flag is not documented prominently, but it exists and it is the difference between a tool and a trap:
java -Xmx2g -jar freerouting.jar \
-de board.dsn -do board.ses \
--routerSettings.stop_pass_no=35With the bound in place, the run does exactly 35 passes, writes a valid .ses, and exits. Watch the unrouted-net count across passes: if it plateaus early (say, stuck at 25 unrouted from pass 10 onward), more passes will not save you — the remaining nets need manual help or better constraints, not more compute.
Route the critical nets yourself
On a power board, a short list of nets deserves hand routing before the autorouter ever runs: voltage references and current-sense traces (noise-sensitive, keep them short and away from switching nodes), gate-drive signals (inductance matters), and differential pairs like Ethernet (length matching). Lock them with Keepout zones or route-then-lock, and let the autorouter handle the remaining digital glue — LEDs, pull-ups, enable lines, the boring 90%.
Net classes and keepouts before you press go
FreeRouting respects the net classes from your DSN, so set them deliberately in KiCad first: generous clearance for high-voltage nets, wider minimum width for power nets, tight rules for signals. Add keepout areas under mounting holes, along the board edge, and beneath anything the autorouter cannot see (a tall inductor, a heatsink). Every constraint you add up front is ten manual cleanups you skip later.
The autorouter doesn't know IPC-2221
This is the non-negotiable review step. FreeRouting optimizes for completion, not current capacity: verify power-trace width against IPC-2221 current-carrying charts yourself, pour copper polygons for the heavy rails instead of relying on traces, check thermal reliefs on high-current pads, and confirm via stitching around switching loops. Then run KiCad's DRC, then do a slow visual pass at high zoom. The autorouter is an intern with infinite patience — fast, tireless, and in need of supervision.
Used this way — constrained problem, bounded run, supervised output — autorouting a 6-layer power board stops being a gamble and becomes what it should be: the fastest way to finish the easy 90% so you can spend your judgment on the 10% that decides whether the board works.