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
- Press A (Add Symbol), place another section of the symbol, then right-click it → Symbol Unit and pick the unit the warning names.
- Set its Reference to the placed package (U1, not a fresh U2).
- 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.
- 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
- Compare the Reference field on each placed section of the symbol; one typically carries a different number.
- Double-click the stray section's reference and type the package's designator, or run Tools → Annotate Schematic… to renumber coherently.
- 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_neterrors 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_pinandmissing_bidi_pinrows (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.
Related errors
- Symbol has units that are not placed
- Symbol has power input pins that are not placed
- Symbol has input pins that are not placed
- Conflict problem between pins
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
- Check implementation — bidirectional branch of ERC_TESTER::TestMissingUnits, eeschema/erc/erc.cpp at KiCad 9.0.9.1
- Check implementation — bidirectional branch of ERC_TESTER::TestMissingUnits, eeschema/erc/erc.cpp at KiCad 10.0.3
- KiCad 9 Schematic Editor manual — List of ERC checks
- KiCad 10 Schematic Editor manual — List of ERC checks