Kicad closed jumpers that work with DRC
Add a pad primitive shape which leaves a small enough gap, so that routing through the jumper is impossible. Step-by-step at the end.
Kicad does not offer a good built-in way to use normally closed jumpers. You can notice that there are normally closed jumpers available in the footprint libraries; but these will trigger a DRC error.
A design can still work and sent to manufacture without issue. In my personal experience, however I recognize the importance of having a clean DRC. If I run the DRC, it is very possible that those fake-positive errors will distract me from the errors I should be paying attention to.
This question has been asked in these other sites:
A solution suggested in the GitHub issue mentioned before, consists on adding a "graphic line" to the footprint, causing the gerber to actually produce a link, but Kicad ignore that link. The reason why this work is at the same time very problematic: Kicad's DRC ignores graphic traces; at least in the footprints. This means that you can route a track through the trace, which of course, is a big problem. Especially with the assisted routing features used in Kicad. Furthermore, not overlapping traces nor traces that are too close will trigger a DRC error. Among so much work that goes into board design, distracted designers like me could accidentally overlook this.
The solution that will play along well with the DRC is an additional step to that solution suggested in the GitHub issue thread. It consists on creating the two pads, adding the graphic trace that connects them, and finally adding a pad primitive shape that nearly causes the two pads to touch. The gap between the two needs to be small enough so that they won't trigger a DRC error (i.e. smaller than the design rules smallest clearance * 2 + design rules smallest trace width, bigger than design rules clearance)
- Add a jumper-nc to the schematic
- Click the "assign pcb footprints" tool in the schematic editor. Assign an arbitrary footprint to that jumper. I usually go with the kicad's jumper-nc because I leave the rest of the process for later.
- Open the PCB editor tool (Pcbnew). In that window, click the menu "preferences", the sub-menu "manage footrprint libraries".
- In the footprint libraries manager window, open the "project specific libraries", and add a new one, if you already don't have a project specific libraries folder. We will save the new jumper footprint to this library. This step depends on your personal library management preferences. Close this library manager saving the settings.
- While in the PCB editor (Pcbnew) Edit the mentioned jumper with the library editor (windows: press ctrl+e while hovering it's footprint).
- Set the jumper to only two pads, no primitives. The shape is up to you. Leave some space in between, for the case you want to cut it later.
- Draw a graphic line between one pad and the other. We need this line to be in the F.Cu layer, but Kicad doesn't let us. There is a workaround:
- draw the line in the Silk screen layer (or any layer that you can, for that matter),
- then edit the line (press "e" while hovering it).
- There is a drop-down menu that lets you select the layer for that line. Now you can set it to "F.Cu".
- Once you accept, Kicad warns you that the line won't be checked by DRC. We will solve this just now-
- Edit one of the two pads (hover + press "e"). Add a primitive shape consisting of a thin line that goes from one pad, and almost connects to the other pad. For example, the yellow shape in the fig. 1.
- Save this footprint, to the project specific library. Saving it to Kicad's library puts you in risk of that footprint being deleted!
- Open the schematic editor, and the footprint assignation menu again, and now you can swap the jumper's footprint for the one that you have created.
Get the ready-made kicad footprint
(module 0_project_specific:jumper_nc (layer F.Cu) (tedit 5D91C5E3) (descr "SMD Solder Jumper, 1x1.5mm, rounded Pads, 0.3mm gap, bridged with 2 copper strips") (tags "solder jumper open") (attr virtual) (fp_text reference JP2 (at 0 -1.8) (layer F.SilkS) (effects (font (size 1 1) (thickness 0.15))) ) (fp_text value Jumper (at 0 0.6) (layer F.Fab) hide (effects (font (size 0.1 0.1) (thickness 0.025))) ) (fp_line (start -1 0) (end 1 0) (layer F.Cu) (width 0.3)) (fp_arc (start -1 0) (end -1 -0.85) (angle -180) (layer F.SilkS) (width 0.15)) (fp_arc (start 1 0) (end 1 0.85) (angle -180) (layer F.SilkS) (width 0.15)) (fp_line (start -0.75 -0.85) (end 0.7 -0.85) (layer F.SilkS) (width 0.15)) (fp_line (start -0.7 0.85) (end 0.7 0.85) (layer F.SilkS) (width 0.15)) (pad 1 thru_hole custom (at -1 0) (size 1.2 1.2) (drill 0.8) (layers *.Cu *.Mask) (zone_connect 0) (options (clearance outline) (anchor circle)) (primitives (gr_line (start 0 0) (end 1 0) (width 0.1)) )) (pad 2 thru_hole custom (at 1 0) (size 1.2 1.2) (drill 0.8) (layers *.Cu *.Mask) (zone_connect 0) (options (clearance outline) (anchor circle)) (primitives )) )