(Wrong?) error: Missing connection between items

Error: Missing connection between items
Pad 2 [GND] of C25 on F.Cu
Zone [GND] on F.Cu

but looking to the screen and also to the gerber file everything seems to be OK. In the same area there is also another capacitor with the same footprint that has not this error. I already checked the clearance setup of pad, footprint and board and everything is OK. Known problem? Or any idea about what can I check? I put an attachement of the are of C25.

I found the solution but this means there is a bug in Kicad 6.0.8 There were a couple of capacitors C18 and C19 having their pads connected to GND copper area that was unconnected (it was an island). Correcting this error solves the error signaled by Kicad ERC.

Why do you consider this a bug?
KiCad tells you that some part of a net is not connected to another part of the same net. The place where KiCad shows it is sort of arbitrary. It does not show that same error multiple times for the same net.

There is no sensible way to determine if A is not connected to B, or if B is not connected to A. For KiCad it’s all the same.

I do agree though that the error message could be better. Something like “Zone area forms an island”.

This usually also becomes quite obvious if you highlight the whole net.

Just a suggestion …

I suspect that not only your parameters for the zone might be the reason but also
the parameters for the traces.
For instance I use these zone parameters for my designs :
clearance = 0.2 mm
minimum width = 0.15 mm
thermal relief gap = 0.2 mm
thermal spoke gap = 0.8 mm

My trace parameters look like these :
minimum trace width = 0.15 mm
minimum clearance = 0.15 mm
minimum via width = 0.6 mm
minimum via hole = 0.25 mm

With these parameters I do not have any problems with zone filling. In very rare
occasions I have to draw a GND trace to a place where a GND plane / zone is.
These parameters are used with a 2 layers as well as 4 layers pcb layout. But
these parameters depend on your board house.

No, the problem was in a different area and different footprints.

No, it is a bug. Kicad signalled as unconnected a component/footprint connected.

If it’s an island, it’s unconnected.

1 Like

The problem is more complex. KiCad can’t know what’s meaningful for human beings, although it works completely logically.

I tried to give an idea which would make this easier, but it wasn’t implemented.

If Kicad signals that C26 Pad 2 is not connected to the GND zone, while it is, and does not signal that really pad 2 of C18 is not connected to the GND zone, seems to me there is a bug. It may be stupid but it is a bug. In my understanding, the algorithm behind what is connected to the same signal it is a walking tree algorithm. The netlist is a forest of trees, so if a pad should be connected to a signal it has to be also routing the PCB, if it is not connected ERC signals an error. Pads connected to an island (a part of a zone not connected to the zone itself) should not be present on the tree generated by ERC so each pad connected to the island should be signaled unconnected by ERC. Seems quite obvious to me.

About your idea: I think the simplest and more meaningful solution is signaling that a pad is not connected and at what signal/net it should be connected. Actually, suggesting the missing connection between a pair of pads is not good and sometimes is not correct also.

As I said, it’s more complex than that. Your idea works well only if the pad is connected to nothing else, including tracks, zones and other pads. But in real world a net consists of different kinds of items which all should be connected to each other directly or indirectly. The only logic which works everywhere is to handle a net as areas which are disconnected with each other, and each area includes one or more items, and the items can be anything which can belong to a net: a pad, a zone, a track/via.

Imagine a net which is split into 100 separate areas. Each area can have e.g. 100 pads, 100 tracks and 100 zones. (Not really, but exaggerating works to find out logic.) (EDIT: and, as Jon pointed out, zones can be split into separate areas, so that one zone can be part of each split area.) Or there can be 3 areas, each having 1 pad only. How would you report this so that the report template covers all possible combinations? And how would you, as a human being, decide which are the relevant parts of those split areas, so that you could write the report to other human beings so that they immediately know where to look at and what is really not connected, and where it should be connected? If you can come up with some logic which works for all cases, please tell. I believe it will be similar to mine.

If a net is split into separate parts, each item in each part is logically disconnected to something else, even if the part forms the majority of the net.

What is “the zone itself”?

It’s important to note that in KiCad, the term “island” means an area of zone copper that isn’t connected to any pads. If something is connected to at least one pad, it isn’t an island.

If you have a split zone, meaning some copper connected to some pads, and other copper connected to other pads, how does KiCad know which is intended to be “the actual zone” and which isn’t?

  1. An island is an unconnected area not connected to a copper zone.
  2. If you define a copper zone connected to a net, as GND, it should be the only copper zone connected to GND. If there are more copper zones (think to multilayer designs) connected to GND they must be connected all together. So, if there are more GND copper zones and they are not connected all together there is at least one island and this condition may be checked because in the netlist there is only one GND tree, instead ERC/DRC produces 2 GND trees. Then, the error message may be better than the message I read.

In KiCad, an island is an area of a copper zone not connected to any pads.

This is not an island, it’s a split net (assuming both sides connect to at least one pad). We can pick any pads to identify the missed connection, but there is no easy way to pick the “most obvious to a human” set of pads.

My interpretation of an “Island” is a part of a copper zone that may or may not have some pads, but is somehow separated from the rest of the copper zone. If there are no pad (with the same net) in an Island, then by default KiCad does not even draw copper there.

You can have whatever interpretation of “island” you wish, I’m just telling you what it means in KiCad. If you see the word “island” used in the KiCad GUI, it means a specific thing which is the definition I used and not the one you used.

I think it’s important to understand how terms are used in a program, whether or not you agree that the term is “correct”, in order to describe situations accurately.

1 Like

No, you are thinking in form of PCB and not logically. The netlist contains the logical connection between pads (and more information about fottprints and so on but not relevant for the discussion) and the ERC/DRC reads the PCB file and “makes” on the fly something similar to the netlist and recognizes what is routed and connected or not. So, just as an example, if we have 3 areas that should be connected to GND but are not connected all together ERC/DRC should display an error. A meaningful error should be similar to “there are 3 unconnected GND copper zones”.

We can agree on every term you prefer, the point is that in Kicad 6.0.8 there is an error because DRC does not report correctly this type of error(s). It totally fails to report this error, because I had more then 50 pads connected to the GND copper zone, and 2 pads connected between them but in a “island” that should be part of the copper zone but was unconnected to the copper zone, this was the error. I had 2 GND copper zones not connected each other. Instead, Kicad reported one unconnected pad in the GND copper zone (not in the “island”) and that pad was connected. So, my opinion is that the real error is that I had 2 GND copper zones not connected together and this would be the error I expect to see.

KiCad does not know that you intended to connect those two “regions” of your GND zone together with more zone. It could not generate an error like “two parts of zone are not connected” because the zone connections come from pads. The actual error is that you have a split net, and nets are driven by pads (not by zones, or tracks, or vias). We have to pick two pads to define the error around (one from group A, and one from group B). We can try to get better about picking those pads in some way, but ultimately we can’t guess which way you intended to connect the two splits together, so we can’t guess which pads are “closest together” or anything like that.

It is possible and it is simple to solve. I already posted what is the algorithm normally used to solve this type of problems. DRC has to make something similar to a netlist (taking care if a pad is routed and connected or is part of the ratsnet) and compare with the netlist (only the part related to the connections). In both cases the result is a forest of trees, where each tree has the netname as root, and each pad connected to the net is a lef of the tree. It is simple because the heigth of the tree is 1 so is it possible also to think to the netlist as a set of lists (one list for each net) so if there are 2 or more lists for the same net they are unconnected.