USB-C Power Delivery for Maker Projects: Trigger Boards, PD Negotiation, and Powering Your Builds from Any Charger
USB-C Power Delivery (PD) has quietly become the default way to get more than 5V and 500mA to a maker project — laptop chargers, GaN bricks, and power banks can now source 9V, 12V, 15V, or 20V at real current on a $10 cable, but only if the device on the other end negotiates for it correctly. This site's buck/boost converter and linear regulator guides cover step-down and step-up conversion once you have a DC input; this guide covers the piece before that — how PD negotiation actually works, how to get a fixed higher voltage out of a standard charger with a trigger board, and how to add real PD negotiation to an ESP32 or Raspberry Pi project so it can request exactly the voltage it needs from any PD-capable source.
Why This Matters for Maker Projects
A basic USB-C port without PD negotiation only supplies 5V, same as USB-A — plugging into a USB-C port and expecting 20V because "it's USB-C" is one of the most common misunderstandings makers run into. Getting anything above 5V requires an active negotiation handshake over the CC (configuration channel) pins, which means your project needs either a dedicated PD trigger chip or full PD stack support, not just a USB-C connector wired straight to power rails.
How PD Negotiation Actually Works
- On connection, the source and sink exchange messages over the CC1/CC2 pins using a low-voltage BMC (biphase mark coding) signal — this is a real communication protocol, not a simple voltage divider like the old USB-C resistor-based "5A capable" detection.
- The source advertises a list of Power Data Objects (PDOs) — fixed voltage/current combinations it can supply, commonly 5V/9V/15V/20V at various max currents depending on the charger's wattage rating.
- The sink requests one specific PDO by index and current.
- The source responds with Accept, then PS_RDY once the new voltage is live on VBUS.
- The connection is re-negotiated if either side is unplugged or a new device is detected — this is why PD triggers must re-run negotiation on every power-up rather than assuming a fixed voltage is always present.
Programmable Power Supply (PPS) is a newer PD extension that allows a sink to request an arbitrary voltage in fine steps (often 20mV resolution) rather than picking from fixed PDOs — useful for direct battery charging applications, but adds complexity most maker projects don't need.
The Simple Path: Trigger Boards
For most projects, a dedicated PD trigger board is the right tool — small breakout modules built around chips like the CH224K, FUSB302, or STUSB4500 that handle the entire negotiation handshake in hardware and output a fixed DC voltage on a screw terminal or pin header, with zero microcontroller code required.
Trigger ChipOutput SelectionTypical Use CH224K / similar fixed-voltage triggersSet by resistor or solder jumper — pick 9V/12V/15V/20V at build timeFixed-voltage projects, benchtop power taps, LED drivers FUSB302Fully programmable via I2C from a microcontrollerProjects needing to request different voltages depending on state STUSB4500Configurable via I2C or one-time NVM programming, negotiates automatically at power-on with no host requiredStandalone projects that need a fixed non-5V voltage without a host MCU driving negotiationWiring is simple: USB-C input to the trigger board, DC output to your buck/boost or linear regulator input (or directly to your load if the negotiated voltage matches what you need). Because negotiation happens entirely on the trigger chip, this works even with no code at all on a fixed-voltage trigger board — solder the jumper for 12V, plug in a PD charger, get 12V out.
Doing It Yourself: PD Negotiation from an ESP32
For projects that need to request a specific voltage dynamically (say, an ESP32-controlled bench supply that switches between 9V and 20V depending on load), wire an FUSB302 or STUSB4500 to the ESP32's I2C bus (same SDA/SCL wiring covered in our I2C protocol guide) and use a PD library — the TinyUSB project and Arduino libraries like Ralim’s FUSB302 driver stack or ardnew’s STUSB4500 library implement the message-level protocol on top of these chips. The basic negotiation sequence in code:
- Initialize the chip over I2C and reset any prior negotiation state.
- Read the source capabilities message (the list of PDOs the charger is advertising).
- Select and request the desired PDO index.
- Poll or interrupt-wait for the Accept/PS_RDY sequence before assuming the new voltage is live — don't switch downstream circuitry until negotiation confirms.
This is meaningfully more involved than wiring a fixed trigger board, and is really only worth it for projects that genuinely need to change requested voltage at runtime rather than at build time.
Common Pitfalls
SymptomCauseFix Only ever get 5V regardless of chargerNo CC-pin negotiation happening — cable or port wired straight through with no PD chipAdd a trigger board; confirm the charger itself is PD-capable, not just USB-C shaped Works with one charger, not anotherDifferent chargers advertise different PDO sets; requested voltage/current combo isn't offered by all sourcesRequest a more commonly supported PDO (9V and 12V are nearly universal; 20V at high current is not) Negotiation succeeds but voltage sags under loadRequested current exceeds what the charger's PDO for that voltage actually supportsCheck the charger's rated PDO table (often printed on the charger) and request within it E-marked cable required error / negotiation fails at high powerPassive/thin USB-C cables cap out around 60W (3A) without an E-marker chipUse a cable rated for the wattage you need — 100W+ cables include an E-markerSafety Notes
PD-negotiated voltages up to 20V are still low-voltage DC and low relative risk, but a mis-negotiated or miswired trigger board can deliver 20V into a circuit designed for 5V, which will destroy downstream components instantly — always verify trigger board output with a multimeter before connecting your actual load for the first time. Counterfeit or off-spec PD chargers exist and can behave unpredictably during negotiation; stick with chargers from reputable brands for anything beyond a bench experiment.
Wrapping Up
A $3 PD trigger board turns any USB-C charger or power bank into a selectable 9-20V DC source with no negotiation code required, which is enough for the overwhelming majority of maker projects — powering an LED driver, feeding a buck converter for a higher-current 5V rail, or running a small motor controller. Reach for full I2C-driven negotiation on an ESP32 only when the project genuinely needs to change its requested voltage while running.