USB-C PD is everywhere now, and a lot of embedded designs only need one thing: be a sink and behave correctly. In practice, available PD stacks usually come with at least one hard constraint:
- vendor lock-in / NDA / no public sources,
- tied to a specific OS or framework,
- incomplete feature set on the sink side (e.g. no EPR),
- behaviour in corner cases that doesn’t really match the spec,
- difficult to extend to new TCPC / MCU combinations.
For tools, lab gear, and small devices that just want to pull power from a USB-C source, this is mostly noise.
Project
I’ve released a new USB Power Delivery sink stack called pdsink:
- GitHub: https://github.com/pdsink/pdsink
- USB-PD Rev 3.2, SPR and EPR modes (sink-side).
- Platform-agnostic C++ core.
- Reference: FUSB302B + FreeRTOS.
- MIT license.
The target is the common “sink” (power consumer) use case, with a small codebase that can actually be read, audited, and shipped in products.
Where it makes sense
Typical use cases:
- when you need dynamic power control at runtime (heaters, for example),
- when you want to use an MCU with embedded UCPD and simplify external components,
- when you need “non-standard” voltages or current limits (via PPS/AVS profiles).
This stack has already been deployed in a real project. If you want an example of an advanced usage scenario (not just demo code), see the reflow table firmware here: https://github.com/puzrin/reflow_micro/tree/master/firmware/src/heater.