Common DRC Failures
Intentionally broken builds that teach you how to diagnose and fix common DRC failures.
Goal
Learn to read DRC output by studying intentionally broken builds. Each scenario sets up a specific failure, shows what the DRC reports, and walks through the diagnosis and fix. After this tutorial, you'll recognize these failures on sight and know how to resolve them.
Quick reference: DRC states
Before diving into the failures, here's what each DRC state means:
CONFIGURED
Green
All connections properly set up; nothing to fix
PARTIALLY_CONFIGURED
Amber
Some connections exist but the setup is incomplete
NOT_CONFIGURED
Red
A harness or interface link exists but nothing is mapped
INCOMPATIBLE
Red
Fundamental mismatch; these parts can't connect this way
Failure 1: Voltage mismatch
The scenario
You connect a 5V device to a 3.3V-only sensor that can't tolerate higher voltages.
Diagnosis
The SCD40 is a 3.3V device. Unlike the BME280 breakout (which has onboard level shifting and accepts 3-5.5V), the SCD40 expects 3.3V power and logic levels. Connecting it directly to a 5V rail could damage the sensor in real hardware.
Protoboard catches this by comparing voltage domains: the Arduino's 5V output domain doesn't overlap with the SCD40's acceptable input range.
The fix
Place an MCP16251T regulator between the Arduino and the SCD40. Configure the regulator's output for 3.3V. Now the power chain is: Arduino 5V to regulator input, regulator 3.3V output to SCD40 power input.
The Arduino Uno Rev3 has a 3.3V output pin (limited to ~50mA). If the SCD40's current draw is within that limit, you can connect the Arduino's 3.3V power domain to the sensor instead of the 5V domain. Adjust the harness interface link accordingly.
Replace the SCD40 with the BME280 breakout, which accepts 3-5.5V thanks to its onboard regulator and level shifters. The DRC will show CONFIGURED because the voltage domains overlap.
Failure 2: Protocol mismatch
The scenario
You try to connect an I2C controller to an SPI peripheral, two completely different communication protocols.
Diagnosis
I2C uses two wires (SCL + SDA) with addressing. SPI uses four wires (MOSI, MISO, SCLK, CS) with chip select. These protocols are not interchangeable; the signals, timing, and addressing schemes are completely different. Protoboard enforces that the protocol type must match on both sides of an interface link.
Failure 3: Role conflict
The scenario
You connect two I2C masters together, two devices that both want to control the bus.
Diagnosis
I2C is a master/slave protocol. The master initiates communication and drives the clock (SCL). Two masters on the same bus need special multi-master arbitration, which most simple setups don't support. Protoboard enforces complementary roles: master must connect to slave (device), not master to master.
This same rule applies across all protocols:
I2C: master connects to slave
SPI: controller connects to peripheral
Power: supply connects to return (input)
Motor: driver connects to motor
UART: transmitter connects to receiver
Failure 4: Missing resource allocation
The scenario
You create a harness and interface link, but don't allocate the physical resources (pins) needed to carry the signals.
Diagnosis
An interface link says "these two interfaces should be connected." Function links say "this signal maps to that signal." But resource allocation says "this specific pin on the Arduino carries the SCL signal." Without allocation, Protoboard knows what you want to do but can't verify that the hardware can actually do it.
Concretely:
Interface link = "I want I2C between Arduino and BME280"
Function links = "SCL maps to SCL, SDA maps to SDA"
Resource allocation = "Arduino pin A5 carries SCL, pin A4 carries SDA"
All three layers need to be complete for a CONFIGURED result.
Failure 5: Bus capacity exceeded
The scenario
You connect too many devices to a single I2C bus, exceeding the bus's capacity or creating address conflicts.
Set up the broken build
Place an Arduino Uno Rev3 on the canvas
Place multiple I2C sensors: BME280, VL53L0X, LSM6DS3TR-C, MLX90614, MAX30102, and SCD40
Connect all six sensors to the Arduino's I2C bus by creating individual harnesses from the Arduino to each sensor
Try to allocate all of them to the same I2C peripheral on the Arduino
Diagnosis
The I2C bus has practical limits:
Electrical: Bus capacitance increases with each device and wire length, eventually degrading signal quality
Addressing: Each device needs a unique 7-bit address. Some sensors have fixed addresses or limited address options. If two devices share the same address, they'll collide
Current: The I2C pull-up resistors must source enough current for all devices on the bus
Protoboard's DRC catches these issues by tracking how many devices are allocated to each bus and checking for address conflicts.
The fix
If your MCU supports multiple I2C peripherals, split the sensors across different buses. The Arduino Uno only has one hardware I2C bus, but a Teensy 4.1 or Arduino Mega 2560 have multiple I2C peripherals.
Add an I2C multiplexer (create as a blank part if needed) to expand one I2C bus into multiple isolated channels. This solves both address conflicts and capacitance issues.
Some sensors (like the BME280) allow you to change their I2C address via a configuration pin. If two sensors conflict, check whether one of them supports an alternate address.
Quick diagnosis guide
When you see a DRC failure, use this table to narrow down the cause:
Red flags (INCOMPATIBLE)
Power harness turns red
Voltage domain mismatch
Data harness turns red
Protocol mismatch or role conflict
"Incompatible roles" message
Two masters, two slaves, or other non-complementary roles
"Protocol mismatch" message
I2C paired with SPI, UART paired with I2C, etc.
Common failures
Key takeaways
Voltage domains must overlap. The output voltage range must fall within the input's acceptable range.
Protocol types must match. You can't bridge I2C and SPI without an adapter.
Roles must complement. Master connects to slave, driver connects to motor, supply connects to return.
Resources must be allocated. Logical connections need physical pin assignments.
Buses have capacity limits. Too many devices cause address conflicts, signal degradation, or current overload.
Run DRC often. It catches these issues before you buy parts and solder wires.
Next steps
Fixing Errors: How to resolve DRC issues step by step
Connections & Compatibility: How Protoboard evaluates compatibility
Rulesets and Severity: Understand the rules behind each DRC check
Error Code Catalog: Look up specific error codes and their meanings
Last updated

