What this error means

When a reference has fewer placed units than its library symbol defines, ERC reads the library definition of every absent unit and buckets its pins by electrical type. A Bidirectional pin anywhere in an absent unit produces this warning; inputs and power inputs have their own codes (missing_input_pin, missing_power_pin). The report names units, not pins: Symbol U1 has bidirectional pins in units [ B ] that are not placed (KiCad 9 ends the message with a period, 10 does not).

Bidirectional is the electrical type KiCad gives data-bus and I/O pins: transceiver channels, port-expander I/O, the GPIO banks of large multi-unit MCU and FPGA symbols. Left off the schematic, those pins appear on no net, so every net-based check passes over them.

Common causes

1. An I/O section of the package was never placed

The B half of a dual transceiver, the second port of an I/O expander, the unused bank unit of a large MCU or FPGA symbol. The leftover section holds nothing but bidirectional pins, so the umbrella missing_unit warning picks up this companion row.

2. Reannotation or a hand-edited reference split the package

ERC groups units purely by reference designator. A reannotation that renumbers one section, or a reference typed over by hand, leaves the placed units under two names, each "missing" the units filed under the other — with every section on the sheet and wired.

How to fix it

Place the missing unit under the same reference

  1. Press A (Add Symbol), place another section of the symbol, then right-click it → Symbol Unit and pick the unit the warning names.
  2. Set its Reference to the placed package (U1, not a fresh U2).
  3. Handle the I/O per the datasheet: a no-connect flag (Q) on each pin firmware can park, or wiring if it wants unused I/O terminated.
  4. Re-run ERC (Inspect → Electrical Rules Checker — same path in KiCad 9 and 10).

Use when: The unit really is absent. Avoid tying a bidirectional pin straight to a rail: KiCad's pin matrix flags Bidirectional against Power output, trading this warning for a pin_to_pin one.

Give the split sections one reference again

  1. Compare the Reference field on each placed section of the symbol; one typically carries a different number.
  2. Double-click the stray section's reference and type the package's designator, or run Tools → Annotate Schematic… to renumber coherently.
  3. Re-run ERC.

Use when: All the units are visibly placed and wired, and the warning showed up right after a reannotation or a manual reference edit.

When it’s safe to exclude

Of the three pin-type companions to missing_unit, this is the one where excluding is most often defensible. Bidirectional pins are typically MCU- or FPGA-class I/O whose unused state is set by firmware or covered by a datasheet "may be left unconnected" note, not by schematic wiring. If the spare section stays off the sheet deliberately, excluding the marker (right-click → Exclude this violation) records that decision.

Confirm the unit is genuinely unused first, though — an exclusion cannot tell that case from a reference split, where half of U1 is really wandering the sheet as U7. And leave the check enabled in Schematic Setup → Electrical Rules → Violation Severity: project-wide silence hides the reannotation accidents too.

Gotchas

  • The check counts placed instances, never matching unit by unit: two copies of unit A under one reference satisfy the count and the all-I/O unit B goes unmentioned, leaving only different_unit_net errors for the duplicated pins (verified under KiCad 9.0.9 and 10.0.7).
  • A unit holding both an input and a bidirectional pin earns both missing_input_pin and missing_bidi_pin rows (verified under 10.0.7).
  • Severity is uneven across the family: absent bidirectional and input pins rate a warning; absent power-input pins, an error.
Minimal reproduction

Place one unit of a multi-unit symbol whose remaining unit carries bidirectional pins, annotate it, and run ERC. The report shows:

[missing_bidi_pin]: Symbol U1 has bidirectional pins in units [ B ] that are not placed
    ; warning

The checked-in file data/erc/samples/missing_bidi_pin.kicad_sch is that schematic: an embedded two-unit symbol, unit A (an output and a passive pin, wired together) placed as U1, unit B (two bidirectional pins) never placed. KiCad 10.0.7 prints the line above; 9.0.9 adds a trailing period. An umbrella missing_unit row and one lib_symbol_issues warning about the embedded repro library ride along as artifacts. Adding unit B under the U1 reference with both pins wired leaves only the library warning.

FAQ

Why does ERC warn about unplaced units after reannotating my schematic when all the units are there?

Reannotation can file sections of one package under two different references, and ERC groups units by reference alone, so each group is missing what the other holds. Compare the reference on every section of the named symbol and give them one designator again.

Do unused bidirectional pins need to be tied high or low like unused inputs?

Usually not. Most bidirectional pins are microcontroller or FPGA I/O, and datasheets commonly allow leaving those unconnected because firmware parks them — check yours rather than importing the unused-input rule. Tying one to a rail also trips KiCad's pin matrix, which warns on Bidirectional connected to Power output.

Can ERC make sure every unit of a symbol gets used?

That is what the missing-unit checks do: too few placed units gets a warning, plus pin-type rows for what the absent units carry. Watch the one blind spot — the count compares instances against units, so a duplicated unit masks an absent one.

Sources