Document under review: _posts/2023-12-29-usbpd-stack.md Date: 2026-02-24

A. Open Source USBPD Stacks

Google ChromeOS EC USB-C/PD Stack

The most comprehensive open source USB PD implementation in production, managing all USB-C aspects on 200+ Chromebook variants. Two generations: legacy TCPMv1 (monolithic) and current TCPMv2 (layered architecture with Type-C, Protocol, and Policy Engine state machines running in a 5 ms loop). Supports 12+ TCPC chip families including Analogix, ON Semi FUSB302, ITE, Nuvoton NCT38xx, Parade, Richtek, and TI TUSB422. BSD license.

  • https://chromium.googlesource.com/chromiumos/platform/ec/+/HEAD/docs/usb-c.md
  • https://chromium.googlesource.com/chromiumos/platform/ec/+/HEAD/docs/usb-tcpmv2.md

Linux Kernel TCPM

Full TCPM framework in drivers/usb/typec/tcpm/. Provides PD state machines, Type-C connection management, and a driver interface for TCPC chips. Supports generic TCPCI (including PTN5110), FUSB302, Richtek RT1711H, MediaTek MT6360, Maxim MAX33359, and others. GPL v2.

  • https://github.com/torvalds/linux/blob/master/drivers/usb/typec/tcpm/tcpci.c

Zephyr RTOS USB-C Stack

A port of the ChromeOS TCPM stack to Zephyr. Currently supports sink-only and source-only; DRP not yet implemented. Apache 2.0.

  • https://docs.zephyrproject.org/latest/connectivity/usb/pd/ucds.html

pdsink (2025)

A recent MIT-licensed sink-only USB PD 3.2 implementation. Platform-agnostic C++ core with no HAL or RTOS dependency. Supports SPR and EPR (up to 240W). Reference implementation: FUSB302B + FreeRTOS on ESP32-C3. Closest in spirit to the archived NXP stack — device-independent policy logic separated from the PHY driver.

  • https://github.com/pdsink/pdsink
  • https://www.cnx-software.com/2025/11/17/pdsink-an-open-source-usb-pd-3-2-sink-stack-for-embedded-devices/

Vendor-locked stacks

  • Microchip PSF: Designed for Microchip’s UPD350/UPD301B/C. Proprietary license restricts use to Microchip products. Final planned release is v1.14 (PD 3.0). https://github.com/MicrochipTech/usb-pd-software-framework
  • ST X-CUBE-USB-PD: USB-IF certified for STM32. Also supports ST’s integrated UCPD peripheral on STM32G0/G4 (no external TCPC needed). Proprietary license. https://www.st.com/en/embedded-software/x-cube-usb-pd.html
  • ReclaimerLabs USB_PD: Arduino-targeted FUSB302B sink code derived from ChromeOS. MIT. https://github.com/ReclaimerLabs/USB_PD

Comparison table

Stack License Scope PD Version TCPC Chips Platform
ChromeOS EC TCPMv2 BSD Full (DRP, Alt Modes) PD 3.0+ 12+ chip families ChromeOS EC MCUs
Linux kernel TCPM GPL v2 Full (DRP) PD 3.0+ 7+ chip families Any Linux platform
Zephyr USB-C Apache 2.0 Sink/Source only PD 3.0 Via TCPC drivers Zephyr-supported MCUs
pdsink MIT Sink only PD 3.2 (EPR) FUSB302B (ref) Any (C++, no RTOS dep)
NXP MCUXpresso PD BSD-3-Clause Full PD 3.0 PTN5110 NXP LPC MCUs
Microchip PSF Proprietary Full PD 3.0 UPD350, UPD301B/C Microchip MCUs only
ST X-CUBE-USB-PD Proprietary Full (certified) PD 3.0 STM32 UCPD + ext TCPC STM32

The BSD-3-Clause license makes the NXP stack relatively unusual — most vendor PD stacks are proprietary.

B. USBPD Specification Landscape

Version history

Version Year Key changes Max power
PD 1.0 2012 First spec. Five fixed voltage profiles. Pre-Type-C. 60W
PD 2.0 2013-14 PDO system (5V/9V/12V/15V/20V). Aligned with USB Type-C. 100W
PD 3.0 2015 PPS (Programmable Power Supply). Extended messages. 100W
PD 3.1 2021 EPR: 28V/36V/48V fixed. AVS. 240W
PD 3.2 2023 Mandatory AVS >27W. Mandatory FRS. Multi-port power sharing. 240W

USB-IF discontinued PD 2.0 certifications as of August 2020. PD 3.1 certification deadline extended to March 2026.

TCPCI specification

  • R2.0 V1.0 (Oct 2017), V1.1 (Mar 2020), V1.2 (Nov 2020), V1.3 (Jan 2022 — added EPR support)
  • Key R2.0 additions over R1.0: extended messages (260-byte buffers), Fast Role Swap, general-purpose timer, vSafe0V reporting

Sources:

  • https://www.usb.org/document-library/usb-power-delivery
  • https://www.graniteriverlabs.com/en-us/technical-blog/usb-pd-power-delivery-spec-versions
  • https://www.graniteriverlabs.com/en-us/technical-blog/usb-pd-spec-3.2

C. NXP’s USBPD Ecosystem

PTN5110 — still active

The PTN5110 remains NXP’s current TCPC PHY with no announced successor. A January 2025 application note (AN14545) demonstrates USB-C PD on the MCX A153 MCU with the PTN5110, confirming it is still in active use. It implements Type-C CC interface, USB PD BMC physical layer, and I2C interface to the host TCPM.

NXP also offers the PTN5150, a simpler CC logic chip for Type-C detection without PD support.

MCUXpresso SDK PD stack

The MCUXpresso SDK continues to include the USB PD stack as middleware. It is the direct descendant of the archived code, updated to be RTOS-independent, using pd_handle * state pointers instead of global data structures, and decoupled from I2C. The PD stack is integrated within the broader USB middleware rather than being a standalone component:

  • Official repo: https://github.com/nxp-mcuxpresso/mcuxsdk-middleware-usb (under the nxp-mcuxpresso GitHub org)
  • Archived extraction: https://github.com/nakane1chome/MCUXpresso-SDK-USBPD-Stack (just the PD stack, extracted from the larger middleware)

Sources:

  • https://www.nxp.com/products/interfaces/usb-interfaces/usb-type-c/usb-pd-phy-and-cc-logic/usb-pd-tcpc-phy-ic:PTN5110
  • https://www.nxp.com/docs/en/application-note/AN14545.pdf
  • https://mcuxpresso.nxp.com/mcuxsdk/latest/html/_static/usb/MCUXpresso_SDK_USB_Type-C_PD_Stack_Reference_Manual.pdf
  • https://github.com/nxp-mcuxpresso/mcuxsdk-middleware-usb

D. The TCPC Architecture Pattern

TCPC/TCPM split — still the standard

The TCPCI specification defines the canonical split: TCPC handles CC lines, PD BMC physical layer, and VBUS/VCONN control; TCPM runs policy engine, protocol layer, and Type-C state machines on the host MCU. This is the architecture used by the archived stack and remains dominant for designs where an MCU is already present and PD behavior needs to be customizable.

Alternative: autonomous integrated controllers

The industry has bifurcated since the stack was written:

  • Infineon EZ-PD CCGx: Integrated Cortex-M0 + PD controller + power path. ROM-based firmware, configurable via NVM. Industry’s most complete USB-C PD controller portfolio. Used in laptops, chargers, docks, automotive.
  • TI TPS65987D/TPS65988: Stand-alone USB-C PD controllers. ROM-based firmware, no external MCU required. TPS65988 can source 200W.
  • ST STUSB4500: Autonomous sink controller. Negotiates power from NVM-configured PDO profiles without any MCU.
  • STM32 integrated UCPD: STM32G0/G4 MCUs integrate a USB-C PD physical layer on-die, eliminating the need for an external TCPC chip entirely.

The autonomous controller pattern is preferred when minimizing BOM, when PD behavior is fixed, or when no MCU is available for PD management.

Sources:

  • https://www.infineon.com/cms/en/product/universal-serial-bus/usb-c-power-delivery-controllers/
  • https://www.ti.com/product/TPS65988
  • https://www.st.com/en/interfaces-and-transceivers/stusb4500.html

E. Historical Context

8051-to-Cortex-M0 migration

The trajectory described in the blog post reflects a broader industry pattern. 8051 cores were widely used in USB PHY and interface ICs circa 2012. As PD complexity grew (PD 2.0’s expanded PDO negotiation, PD 3.0’s PPS and extended messages), the 8051’s limited address space became a constraint. NXP’s LPC series (Cortex-M0/M0+) offered a natural target — NXP silicon with Keil toolchain support, and the LPC800/LPC1100 families were positioned as 8051 replacements.

Keil RTX → CMSIS-RTOS transition

Documented in Keil Application Note AN264 (May 2014): “Migrate from RTX to CMSIS-RTOS.” ARM defined the CMSIS-RTOS v1 API in 2013 as part of the Cortex Microcontroller Software Interface Standard. Keil RTX was updated to implement this API, becoming the reference implementation. The API was further updated to CMSIS-RTOS v2 / RTX5, which is now open source on GitHub.

The timeline aligns with the archived stack’s history: code written for Keil RTX (pre-2013), adapted when RTX adopted the CMSIS-RTOS API (2013-2014), then refactored by NXP to be RTOS-independent for the MCUXpresso middleware release.

Sources:

  • https://www.keil.com/appnotes/files/apnt_264.pdf
  • https://github.com/ARM-software/CMSIS-RTX
  • https://www.arm.com/products/development-tools/embedded-and-software/rtx5-rtos

Summary

The archived NXP USBPD stack occupies a specific position in the landscape: a genuinely open source (BSD-3-Clause), full-scope, device-independent PD stack using the canonical TCPC/TCPM architecture. Its BSD license distinguishes it from most vendor stacks (Microchip, ST, Infineon are proprietary). The PTN5110 target hardware remains current. The PD specification has advanced to 3.2 (240W EPR, mandatory AVS) since the stack’s PD 3.0 endpoint. The industry has bifurcated between the TCPC/TCPM split pattern and autonomous integrated controllers, but the TCPC/TCPM architecture remains the standard for customizable MCU-based designs.