cancel
Showing results for 
Search instead for 
Did you mean: 

USBPD EPR Source

xGloooM
Visitor

Hi, I'm trying to implement USBPD EPR Source with DisplayPort Alt Mode on a STM32G071.

I use the latest https://github.com/STMicroelectronics/stm32-mw-usbpd-core, which seems to support EPR, but I couldn't find any complete examples with a working EPR source.

Now I successfully enter EPR mode, and Sink receives EPR PDOs, but can't negotiate any PDO except the 1st. Even SPR PDOs

The stack sends REJECT after PE_SRC_NEGOTIATE_CAPABILITY.

It works perfectly in SPR mode and can switch between PDOs, but fails the same PDO in EPR mode

1st PDO in EPR mode ACCEPT:

Screenshot_20260131_122834.png

2nd PDO REJECT:

Screenshot_20260131_122749.png

How can I debug these things inside the stack? What am I missing?

Spoiler
uint32_t PORT0_PDO_ListSRC[USBPD_MAX_NB_PDO] =
{
  /* PDO 1 */
  (
    USBPD_PDO_TYPE_FIXED                 | /* Fixed supply PDO            */

    USBPD_PDO_SRC_FIXED_SET_VOLTAGE(5000U)         | /* Voltage in mV               */
    USBPD_PDO_SRC_FIXED_SET_MAX_CURRENT(1000U)     | /* Max current in mA           */
    USBPD_PDO_SRC_FIXED_PEAKCURRENT_EQUAL          | /* Peak Current info           */

    /* Common definitions applicable to all PDOs, defined only in PDO 1 */
    USBPD_PDO_SRC_FIXED_EPR_SUPPORTED              | /* EPR Mode Capable            */
    USBPD_PDO_SRC_FIXED_UNCHUNK_SUPPORTED      | /* Unchunked Extended Messages */
    USBPD_PDO_SRC_FIXED_DRD_SUPPORTED          | /* Dual-Role Data              */
    USBPD_PDO_SRC_FIXED_USBCOMM_NOT_SUPPORTED      | /* USB Communications          */
    USBPD_PDO_SRC_FIXED_EXT_POWER_NOT_AVAILABLE    | /* External Power              */
    USBPD_PDO_SRC_FIXED_USBSUSPEND_NOT_SUPPORTED   | /* USB Suspend Supported		 */
    USBPD_PDO_SRC_FIXED_DRP_SUPPORTED            /* Dual-Role Power             */
  ),
  /* PDO 2 */
  (
    USBPD_PDO_TYPE_FIXED                        | /* Fixed supply                */

    USBPD_PDO_SRC_FIXED_SET_VOLTAGE(9000U)         | /* Voltage in mV               */
    USBPD_PDO_SRC_FIXED_SET_MAX_CURRENT(3000U)     | /* Max current in mA           */
    USBPD_PDO_SRC_FIXED_PEAKCURRENT_EQUAL            /* Peak Current info           */
  ),

 

1 ACCEPTED SOLUTION

Accepted Solutions
xGloooM
Visitor

After creating a topic, I found my bad in USBPD_PWR_IF_SearchRequestedPDO while in EPR mode. 

Would be nice to have an EPR Source example from ST.

View solution in original post

1 REPLY 1
xGloooM
Visitor

After creating a topic, I found my bad in USBPD_PWR_IF_SearchRequestedPDO while in EPR mode. 

Would be nice to have an EPR Source example from ST.