My major frustration with KiCad + footprint talk

I build the parts to show the maximum XY size of the component on the Fab layer, per the datasheet, with pin 1 indication if applicable. Courtyard is then placed outside that drawing according to IPC requirements for that part. Here’s what it ends up looking like in Kicad, I’ve separated the assembly from the rest of the drawing.

Just a heads up: to automatically populate reference on assembly, fill the field with %R. Delete the silkscreen reference if space doesn’t oblige.

I see no reason to ever leave off silkscreen lines. They take up no space outside the courtyard, and are not only used for hand building, but also rework and repair.


May I ask why the polarized SMD package up there has got a little extra ‘stick-out’ in the soldermask/pastemask? Is that to show the polarization without silkscreen?

Also something I got used to, but that’s not according to KLC:

If one needs/wants big REF or even VAL fields on Silkscreen or some other layer, than these will disturb you while you layout/place components. They’re big and always in the way of what you want to do… but one also needs the REF field (R1, C5) information during layout… easily visible/spotabable and sticking out with some high vis color. That’s why all my footprints have an extra REF field on the Eco1 layer that is in bright green in a small font size. It uses the %R field instead of REF** as you can see in the screenshot (I got nothing else on Eco1):

1 Like

kicad is a very different project from its libraries. A number of us are improving it to make it a better professional tool, but there’s a lot of work to do and very little resources. I have to make improvements in my own spare time so a 2 or 3 month job typically takes a year. At that rate I might retire before I get all the features that I typically use in a project. However, there are many small (and a few medium sized) businesses out there that use kicad and even before the CERN people added track length matching and differential pairs some die hard users were already using kicad to make layouts with high-speed lines such as in DDR3.

It’s on the silkscreen layer, just a little too close to the part. Sorry to derail with the footprint talk :smiley: It’s a part of Kicad I really enjoy, the footprint editor is pretty decent actually.

I have been using the .Fab layer to draw component bodies, is this correct?
I did not find a wordy description in help file what it is for.
Heres an exmaple:

I also add a second Reference (Text with value %R) on layer Ec01.User, it makes placing component really easy, as you can clearly see which component is what, instead of wondering which reference belongs to which component. The Eco1.User layer is never exported, it just makes the placement/routing process very easy.

I agree with Nicholas about trying to keep silkscreen away from under component bodies is preferable. I used to prefer the KiCAD minimalistic silkscreen way (popular amounst hobbiest), until I worked for my former company where they always have a bounding box for each component. It is great for repairs people, it makes identifying missing components really easy too. It also double as a visual courtyard. I see this way in industry the most. Okay its not as great for high density boards though.

PS to me a courtyard of 0.25mm is quite hard to apply always, that 0.175 from the edge of the component, working with a grid that fine is quite tricky. I place a 0.2mm silkscreen line with 0.2mm from the component, this ensures a “courtyard” of 0.3mm (to the outside of the silkscreen). And it is easy to draw with 0.1mm grid selected.


Always make sure you have a %R on fab layer.

%V i make invisible.
It’s of no use on fab layer.

Could possibly be moved to some other layer.

Value is misleading as it actually is the part-name.

If you for example hace a GRM15xxxxxxxx Murata 0402 capacitor.

The value may be 10nF.
But part-name is GRM15xxxxxxxx something.

Nobidy wants to see value in layout, and rarely the part-name either, your milage may vary.

1 Like

Yes, all of those layers have rather specific names (“Fab”, “ECO1”, etc) so it is obvious that whoever created the names had a general outline of how they would be used, but that systematic approach hasn’t been shared with us mere mortals. (At least not that I’ve found so far.) I am very aware that in organizations where PCB layout is done, “house rules” (both implicit and explicit) almost always state what information is to be included on each layer, how it is to be presented, etc, so there will never be total agreement . . . but . . . it would help me to see a comprehensive explanation of how the various layers were intended to be used. The cryptic descriptions in “Layer Setup” don’t help very much.

This is especially significant in KiCAD where some features and capabilities are present in some layers, but not in others. (E.g., the ability to draw arcs.) If this was not true it may be better to identify the layers with non-specific names like “MechLayer001” through “MechLayer999” and let each user flail around until he stumbles across a system to use them effectively.

(This discussion is uncovering some of that information, a piece at a time, and I thank the participants for sharing their comments and insights! Being a gray-haired, superannuated, guy I KNOW I won’t live long enough to make all the mistakes myself so I’m grateful for the chance to learn from others’ errors.)

Yeah, the “%R” notation is a useful capability I’m just starting to use in footprints!

Others (possibly @Joan_Sparky ?) have suggested putting this info on the “Fab” layers as a starting point for creating assembly drawings. A few months back I was complaining about having only one instance of the Reference to work with (that was before I learned about the %R and %V notations), but now the pendulum is swinging the other way and it seems like %R (or %V, or the part outline, etc) is littering half the layers in the drawing. That’s another reason I’d like to see a comprehensive explanation of how others use the whole set of layers.


1 Like

I agree . . . at least until somebody else comes along and shows me how this may actually be helpful in some situation.

We in the industry have created some of our own confusion. “Value” was useful, at least to assemblers and maintainers, when it was a fairly complete specification for a passive part (e.g, “2.2K” ohms, “4.7 uF”, etc) but started losing that straightforward usefulness when parts like the TL072 (a common dual opamp) required extra characters for package style, temperature grade, and performance level. Loading a complete manufacturer’s part number into “Value” - sometimes half a printed line long - is actually counter-productive in my opinion.



Well, I need VAL(*) and REF atmo only on the prints for manual populating the pcbs… so I use REF** and VAL** in the fab layer. They can be switched off in the render tab, separately from the other stuff that is on the Fab layer (i.e. outlines).
The %R text field doesn’t have this functionality… thank god I think. I have this on Eco1 only and use it for routing/placing.
I don’t intend to ever have REF or VAL on Silkscreen as the final ‘product’ isn’t intended for 3rd parties maintenance/repair/etc… but it would be perfectly possible to add %R and %V fields onto that layer as well. Silkscreen layer is really the last layer I ever look at/work on and not needed during layout, so it’s switched off the whole time. So there it should be OK for the text fields with %R for example to not be switchable separately from the other stuff that’s on Silkscreen layer.

%R text field on EcoX for layout in high vis color
REF**, VAL** on Fab for documentation (print)
%R, %V text field on Silk if desired

As for other layers…

  • Dwgs.User I use for Edge Cuts in footprints and have to redraw when I use the footprint.
  • Cmts.User I use for all sorts of comments and positions/outlines of important stuff in footprints, direction of FPC cable for instance
  • Margins… no use for me yet?! What is this intended for?
  • Eco2… not used by me (yet)

At the moment I’m a pretty happy camper with what is available.

*) and VAL really contains the value of a part, not the part number… those fields I run with @devbisme 's standard for KiCost, which uses manf (manufacturer) and manf# (part number) as extra fields in the symbols for BOM use.

1 Like

Thanks guys for sharing how you do things.
So the common theme I see is Fab is a layer for making drawing outputs for assembly, not a special layer for a certain reason.

Is that a notation to reference other attributes?
I often have like for a capacitor Value = “4.7uF 25V” and add another attribute Value2 = “Tantulum”.
Could I say %VAL(Value2)? or something similar?

What I think would be cool is:
%P for Partnumber e.g. T494A475M025AT
%V for Value e.g. “4.7uF 25V”
%V2 for Value2 e.g. “Tantulum”
Giving one lots of flexibility.

Is the only difference between R** and %R is **R cant be deleted? (**R was the first thing I tried when trying to make a linked reference and was quite surprised it didnt work).

[quote=“nicholas, post:27, topic:625”]
Nobidy wants to see value in layout, and rarely the part-name either, your milage may vary.
[/quote]So do you add a custom attribute to components you place on the schematic (instead of using Value) called say “part_number” and then populate it? Can you add “part_number” as an attribute to the SCH symbol so you dont have to keep adding it every time you place it (sounds tedious)?

The symbol value in my world is always synonymous with part-number.

In the professional world if you ask an assembly house to procure your components you need every single component to have an exact part number.

Every single little nitty gritty letter.

Otherwise you will have endless communication with flextronics or note or whoever about your parts.

It just doesn’t work.

My components always have full part name in value.

Meaning that there is a component in my library for every single capacitor.

I never use a generic 0402 resistor.

Always full part numbers.

Kicad must get a true part number concept where you tie together symbols and footprint into a part.
As of today the symbol is also the part.
Big problem.

If you have parts you can copy parts that keep exact same symbol (resistor) and exact same footprint (0402) and get unique part numbers, where you also can add attributes like, value, type, tolerance, height, weight, price, manufacturer, etc etc

1 Like

It used to be common to use a house part number. This allowed external aliasing to one or more real full part numbers and didn’t have to change because the vendor arbitrarily changed a package code

[quote=“mangelozzi, post:31, topic:625”][quote=“Joan_Sparky, post:30, topic:625”]
I need VAL()[/quote]
Is that a notation to reference other attributes?I often have like for a capacitor Value = “4.7uF 25V” and add another attribute Value2 = “Tantulum”.Could I say %VAL(Value2)? or something similar?
No, sorry. :smile:
That’s just a link/placeholder for the ‘note’ at the bottom of the post that starts with '
)’ to explain what I need the VAL for but don’t want to extrapolate on right there in the sentence.
Is there a better way to do this?

REF** is the standard built in field for the reference field of the symbol. You can have it appear exactly one time in a footprint on exactly one layer only. The entry in the footprint file looks like this:

(fp_text reference REF** (at x y a) (layer xyz)
(effects (font (size h w) (thickness t)))

You can’t add another layer in there (I tried).
Same goes for the VAL** field.
PCBnew handles these two fields special, as in the Render tab you can switch them off separately from the layer they are on.

%R (or %V for that matter) in a text field you can have as many as you want. Entry in the fp file looks like this then:

(fp_text user %R (at x y a) (layer xyz)
(effects (font (size h w) (thickness t)))

These text fields don’t react to the Render tab switches for Reference and Value, they ‘belong’ to the layer only.

As for more customization - I’m all for it.
Would be nice to have the option to get the other fields that are defined in the symbols to appear in the footprint, if one desires.
Something like %Fx that relates to these fields in the symbols that go like this (F0 to F4 are determined by KiCAD already… you’re free to do what you want with F5 and higher up afaik, that’s why those have the ‘description’ field at the end):

# C_22p_16V_0805
DEF C_22p_16V_0805 C 0 0 N Y 1 F N
F0 “C” -125 0 50 V V C CNN
F1 “C_22p_16V_0805” 125 0 50 V V C CNN
F2 “SMDx:C_0805” 0 0 5 H I C CNN
F3 “E:\Datasheets\Electronics\Passives\Capacitors\Kemet_KEM_C1002_X7R_SMD.pdf” 0 0 5 H I C CNN
F4 “C0805C220K4RACTU” 0 0 5 H I C CNN “Manf#”
F5 “Kemet” 0 0 5 H I C CNN “Manf”

%F0 should be the same as %R and %F1 be %V.
Anyone knows if that is possible yet?
Trying %F3 in a text field in the footprint appears as ?3 in PCBnew

1 Like

Fab layer etc.

KiCad has copper layers and “technical layers” (anything not copper). Of the tech layers of course there are:

  1. Front and Back silkscreen - of declining use in industry but still extremely useful for small home projects
  2. Front/Back soldermask
  3. Front/Back (solder) Paste
  4. Front/Back Adhesive: You can use these as you please; it is a historical artefact with little to no value in current assembly processes
  5. Eco1/2: use these as you please; originally used by some people for managing ECOs, in general they are of no use even for ECOs. :slightly_smiling:
  6. Dwgs.User: Use as you please - this was intended for annotations which might be useful at some point in production, such as dimensions and notes
  7. Cmts.User: Similar to Dwgs.User
    8 Edge.Cuts: A single closed loop describes the board outline. Any internal closed loops are cutouts. If you want to see that in action, draw a square with another square inside it and look at the results in the 3DViewer. If the 3DViewer doesn’t show a square with a cutout, try “export VRML” and view the output file with a VRML viewer.
    9 Margin: this is a new addition which you can use to outline the max. extent of copper on all layers. You don’t have to specify anything here; a default will be used if you don’t define a Margin.
  8. Front/Back Courtyard: this is new - an outline in the courtyard is intended to help the user place parts so that they do not physically interfere with other parts.
  9. Front/Back Fabrication: these are newly added layers. The typical use is to draw some boundary markings of some description, like [ ], and place the Reference Designator inside. This is used for product documentation; a separate page would have a table of the RefDes, part placement coordinates, part number. If you don’t use the layers for that purpose you can put whatever you like, you only have restrictions imposed if you are contributing a footprint to the kicad footprint collection.

Yes, that’s what I use the manf# field for. It contains the manufacturer part number and KiCost then makes a BOM that you can use at Digikey&Co from that.

We know that EEschema is next in line for being refurbished and overhauled in regards to this kind of stuff (the current library file concept will be converted to the same as footprints are now)… maybe it would pay off to try to get into contact with the Devs about this via launchpad and see if they can use some help?

I already made a launchpad entry about this I think.

I explain further.

When you make a part you associate symbols.
(loose symbols not units of one symbol) to a footprint.

In this association there are checks for duplicate pins, and also if pins are never associated.

As of today in kicad you can accidentally hace exact same pin twice in a symbol. Beacuse if you make a copy of a pin but accidentally drop it on itself you will never see this.

Parts are important entity, but also when you build the parts there are checks for overrun or underrun of pins.

It is important when you build a pyramide that all your building blocks are ok (parts) or you end up with human errors in the design.

The tools should provide check points of scrutinize.

Building parts is a very important check point.

1 Like

It’s true. But some of the manufacturers does not spoiled us - Ti for example - and it calls their items using several suffixes depending on whether they pack it into a small roll, large roll, extra large roll, tray, tube, RoHS or without. This desn’t help. Then there are problems, where the BOM says of the 2500 roll, but I managed to buy 10 rolls of 250. Or component supposed to be in the tube, and was available only on a roll.
This could be managed in KiCad in the future when the remaining fields could have options to choose from drop-down lists and puts some comment to every option.

|ManufacturerCode | Comment
|LM358PW          | 150pcs Tube
|LM358PWR         | 2000pcs Roll
1 Like

Crap, I though netlist import in PCBnew would tell me stuff like mismatching pin counts, but no… dang.
So yeah, still ways to go.
You said you put in something on launchpad about this… got a link?
Definitely want to vote on that one.

Yes I know.

Typically I use as many trailing letters that make sense.

But those things can be handled by the assembly house.

But if you give them nothing but generic parts they will go crazy.

Make a symbol deliberately with overrun and overrun of pins and try.

When you have duplicate pins in same unit eeschema complains everytime you open that sheet and says he wants clarification what pin you mean.

A simple escape key makes him forget about it until next time you open the sheet.

First I thought it was a bug and didn’t care.

But I happened to point at one single pin and he wanted clarification because that single pin was 2 pins.

That’s how I cracked the case.

But it’s not 100% consistent, I still have 1 sheet where he complains everytime I open it but I have not been able to find root cause.

Sometimes kicad cache things.