2020-04-04: This tutorial is based on KiCad 5. With KiCad 6, the bus feature works a little different (so I’m told.)

When your schematic has a large number of related signals, it is helpful to group them. In its schematic editor, KiCad has a few tools to help. Your end-goal helps determine which tools to use. For example, do you need a KiCad bus or a label? In this post, I explore how you can define signals, group them, and reference them across schematic sheets.

Up until recently, I did not need to use a bus or multiple sheets. However, the Apple IIgs project I’m working on is too large for a single page. In a KiCad live stream, I looked at how to create busses and connect them. In a separate tutorial, I will show how to work with multiple sheets in KiCad.

tldr; KiCad does not require the use of a bus to connect signals together. Wire labels already provide that connection. A KiCad bus offers two things: 1) a visual representation and 2) an easier way to create global connections (across sheets.)

Lastly, if you are not familiar, KiCad is an Open Source eCAD tool. Although I have used others, this one currently my preferred platform.

KiCad Bus, Label, and Wire

Before jumping to how to use a bus, first, we need to start with the basics. KiCad connects nodes with a “wire” element. KiCad gives each wire drawn a unique name unless it connects to an existing node. The user can override the name by adding a label.

KiCad Wire and Label Example
Wire and Label Example

Label

KiCad’s labels give a wire (or node) a human-readable name. Within a schematic sheet, same-named labels connect wires. One advantage of this approach is that it keeps the schematic cleaner. A downside is that typos can prevent signals from being connected.

At this point, I am going to show some examples. The two 4-pin headers below represent two components with pins that need to be connected. On the right, I am showing the result in the PCB editor.

01-KiCad Labels connect Wires
Wires connected with same name

On each header, I extended the wires from the pins and labeled them A0, A1, A2, and A3. In this situation, think of these as a small 4-bit address bus. Since the wires, or nodes, are labeled with the same names, KiCad connects them. The PCB view shows “rats net,” or unconnected nets, between the header pins.

KiCad Bus

The next step up from a wire is a blue line called a bus. However, drawing a bus alone is not enough. First, you must add a “wire to bus” entry, to tell KiCad that you want the wire to be part of the bus. (So far, I have not found a way to edit the direction or length of these “entry” wires.)

So, then what is a KiCad bus?

Connecting with a KiCad Bus
Connecting with a KiCad Bus

To KiCad, a bus is a collection of wires. For the most part, they are an aesthetic feature. We can connect the connectors from above together with a “bus.” However, this connection does not change anything.

So if the bus is not necessary, what is the point?

Mismatched Pin Names

Let’s say you have a different naming convention on one component relative to another. Here, I am changing the right connector to use “adr3” instead of “a3.”

KiCad Mixed Label Names
Mixed Label names on the same bus (Notice the PCB has no nets between the pins)

Notice that the connection between the pins is low lost. Since the signals are on the same bus, we can tell KiCad to, effectively, ignore the names and connect the pins instead. The only step necessary is to place a label with each pin group on to the bus, as shown below.

KiCad Mixed Bus Names
Connected different KiCad Bus names

To be up front, I do not fully understand how KiCad makes the mapping work. You could change one of the bus labels to “a[3..0]” but a0 still maps to adr0.

Bus vs. Pin Labels

Take note that you still have to label each of the pin’s wires. KiCad does not figure out pin names when connecting them to a bus. Just like named wires though, you do not have to have a continuous bus connection throughout the schematic. You could create a small segment with both bus names on it. However. One of the main reasons for a bus, versus just a bunch of label names, is making the visual connection.

Local labels vs. Global labels

What if your schematic extends beyond a single page? In the case of my IIgs schematic, it is 9 pages long. Labels and busses are local to the sheet that they are one. But KiCad offers two ways to bring nodes into a hierarchy of sheets.

Global Labels

The first way to bring in labels is with global labels. There are already some defined for you. KiCad automatically shares power labels, such as VCC and GND., throughout a schematic project. In addition to those, you can define Global labels that the schematic project shares across all of its sheets.

Global and Local Label in KiCad
Global and Local Labels

The Global Label turns local labels into Global. In the picture above, I have defined both a Local and Global name for adr0 through adr3. KiCad allows Global labels to be applied to a bus as well. Which, in my opinion, is the real power of a bus. Instead of defining a bunch of local and global labels, you can define a global bus.

One of the downsides to the global labels is that they now exist in all sheets. What if you only want to share signals between a couple of pages? What can you do then? In that case, you can use Hierarchy pins to connect signals between sheets.

KiCad Hierarchy Pins

There is one more set of label controls. Within a sheet, you define labels as a hierarchy pin. The name is different because of how hierarchy labels or hierarchy pins work. This feature creates ports into and out of the sheet. For now, I am not going to cover Hierarchy pins. The only point I will make about them is that they can be used to connect signals together between sheets without making signal global.

In a future tutorial, I will break down how to work with multiple sheets in KiCad. At least, for now, you should understand how to create a KiCad Bus which is the tough part.

Conclusion

One of the things that bother me is that on the root sheet look pretty dull. Here is my Apple IIgs schematic. There is nothing there. I did much work to set up each sheet, but this one is just empty boxes. I also feel like setting up wires, pins, and labels are more than necessary.

Video Tutorial

Here’s a Twitch Clip where I worked through this tutorial live. It also shows how to create multiple sheets.

Watch KiCad Labels, Busses, and Hierarchical Sheets (for the Apple 

Am I missing some key shortcuts? Any tips to help reduce steps or time? Please let me know in the comments below.
Author

Fan of making things beep, blink and fly. Created AddOhms. Stream on Twitch. Video Host on element14 Presents and writing for Hackster.IO. Call sign KN6FGY.

2 Comments

  1. joe Beazel Reply

    If you press the “r” key, it will rotate the bus “entry” wires.

  2. I do not think you can alter the length of a wire-to-bus entry; however, it can at least be rotated which goes a long way towards making the schematics more aesthetically pleasing to read.

Write A Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.