Stage 4 Research Report: NXP USBPD Stack vs Industry Landscape
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-mcuxpressoGitHub 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.