Single footprint containing multiple parts

Initial disclaimer: I’m very new to KiCad, so please excuse any blatant ignorance…

I want to create what is essentially a ‘socket’ in which to plug a breakout board on my PCB. The socket will consist of two female 0.1" headers that the breakout will plug into. These headers will, of course, have to have accurate arrangement & spacing, so I thought to make a socket footprint that is the same size & shape as the breakout, with holes correctly placed for both headers. The problem comes in when I go from schematic to PCB; if I place two headers on the schematic, then I can’t associate the single footprint with them as a pair. If I make a custom schematic component containing connections for all the pins and associate it with the aforementioned footprint, I don’t have the headers themselves anywhere in the schematic or pcb, which doesn’t seem quite right either.

So I either end up with an ‘imaginary’ part (the socket), and no headers on the PCB (or BOM, for that matter), or two ‘real’ parts but no placement or breakout board footprint information on the PCB.

I’m sure this is a common situation & I just haven’t managed to find the right search terms to get to the solution, but any helpful information would be appreciated.

1 Like

This sounds similar to the situation I faced when I did a project with the Arduino Pro Mini a few years ago. My post at Arduino Nano PCB Files includes symbol and footprint files (version 4.0.x format!) that may give you ideas to work with.


Lets see if I understand the problem.
Eagle has the concept of a device, which can actually have two symbols and one footprint.
When the device is placed on the schematic, two symbols appear. The two symbols can be positioned. individually. On the PCB it’s just one footprint.

And you are looking for the Kicad equivalent?

@dchisholm: as far as I can see your symbols and footprints are one-on-one. Am I correct?

1 Like

I hadn’t thought of the BOM but I did think about this recently in terms of the 3D modeling. I ran into the same thing a few years back for a project where I did essentially the same thing, a Teensy with header pins. The board was tight so I used the space underneath for a few parts.

@hermit: Yes, I was actually thinking the same thing…I’d like to place a couple of resistors underneath the breakout board between the header pins.

@Tonn: Yes, I believe that is what I’m asking - a KiCad equivalent for the Eagle functionality you describe. And again, I’m brand new to ECAD in general so this may be a very basic thing I just don’t know about. Is there a KiCad equivalent for Eagle’s device concept?

Yes kicad does have such symbols. see attached image of ULN2003.

For your requirement you just have to create your own custom symbol.
When you go to create new symbol set the number of units (pin headers in your case)

Then select symbol unit A/B/C from dropdown at the top


Multi unit symbols create only one entry in the BOM. This is also true with a device in eagle.

If you need separate entries in the BOM or separate entries in the pos file (for pick and place) then you really need to place independent symbols (and footprints).
Sadly there is no way to group footprints. So your best option would be to lock them after you have verified their placement. (Makes it harder to accidentaly move one of them.)
You can use templates in such cases. This makes sense if you make multiple similar boards.

I also have a quite detailed tutorial for creating multi unit symbols: Tutorial: How to make a symbol (KiCad v5.1.x)
TlDr: You might need to select “Units are not interchangable”


Thanks so much for all the input. It looks like I just need to put the actual parts I need (two headers) on the schematic and then take care to lay them out correctly on the PCB, along with maybe some conspicuous notes on the PCB and/or schematic regarding the layout requirements. It’s a one-off board and I’m the only person who will ever work on it, so I know I could do it pretty much any way that works, but as an exercise in best practices, I’d like to use a method that would allow the project to be handed off to someone else and them be able to easily figure out what’s going on.

Another way to do it for BOM completeness in KiCad is to use 3 parts on the schematic. One part is the module (lets call it U1), and two header strips (call them X1U1 and X2U1).

For U1 Schematic: Full pinout. Use this to make your electrical connection. This will also be for adding the module to your BOM. Either single unit or multi-unit depending on how it logically fits your schematic.
For U1 Footprint: Full footprint with pads appropriate for the header strip pins but no courtyard. Move the 3D part up on the Z axis to show how high it will be above board.

For X1U1 and X2U1 Schematic: No pins, just a graphical representation of a header strip. These will be also be for adding the two header strips to your BOM. (If you plan on cutting these from a long header strip, you will need to do some hand fixes to your BOM.)
For X1U1 and X2U1 Footprint: No pad footprint with silkscreen outline and courtyard for just the strip. Have the footprint zero point where one of the pads would be to help lining up to the U1 footprint during layout.

The lack of courtyard on U1 with the courtyard on the header strips will still allow for DRC courtyard checking if you want to put components under U1. Just know that you will need to manually check the height of the parts under U1 for clearance. (This is why I suggested moving the 3D part for U1 to the expected mounting height. Hopefully that would make manual interference checking easier.)

See this schematic where I did something similar, but single part IC sockets:
I&O_Expander_Schematic_v2.0.3.pdf (192.2 KB)
A documentation advantage to this is at a glance at the schematic I can see that my U3 is a 16 pin IC and U8 is an 8 pin IC.

I’m not saying that this is the “right” way. Just one more way of skinning this particular cat.

1 Like

Yes, that is true.

I did not accurately understand the original question! Others have stepped in to provide the answer.


Excellent question. Thanks.

@SembazuruCDE: Good info, thanks for the reply. I think I may handle it this way.

Following the ANSI/ASME Y14.44 standard the way to reference designate the two header strips would be with suffix letters. If your module is U1 then the header strips that make up the “socket” would be reference designated XU1A and XU1B. Problem is KiCad does not understand individual parts with suffix letters. A modification would be to ref des as XU1E1 and XU1E2 (the E class letter in this case meaning a terminal, terminal strip, or miscellaneous electrical part) or XU1J1 and XU1J2 (the J class letter meaning, of course, the most fixed connector of a mating pair).



Good advice for the OP. Thanx.

Thanks Larry, I appreciate the info.

This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.