Basic USB-C DRP

Browse source code on GitHub

Overview

This example demonstrates how to create a USB-C Power Delivery application using the USB-C subsystem. The application implements a USB-C Dual Role Power (DRP) device that can operate as either a Source or Sink.

When no device is attached, the DRP device toggles between Source and Sink roles according to the configured DRP period and duty cycle. Once a device is attached, the DRP device detects the power role by reading the CC line resistor advertisement (Rd/Rp) from the port partner and starts the corresponding Policy Engine state machine (usbc_pe_snk_states for Sink role or usbc_pe_src_states for Source role). The device can provide power as a Source (5V at 100mA, 9V at 100mA, or 15V at 100mA) or consume power as a Sink (5V at 100mA).

Requirements

The TCPC device used by the sample is specified in the devicetree node that’s compatible with usb-c-connector. The sample has been tested on stm32g081b_eval. An overlay file is provided.

Hardware Configuration

This sample uses hardwired connections for stm32g081b_eval to the UCPD daughterboard for power control (VBUS source enable, DC-DC enable, VCONN enables, and VBUS discharge control). The specific pin assignments and their functions are defined in the board overlay file. For detailed pin mapping information, refer to the STM32G081B-EVAL board datasheet and UCPD daughterboard documentation.

Building and Running

Build and flash as follows, changing stm32g081b_eval for your board:

west build -b stm32g081b_eval samples/subsys/usb_c/drp
west flash

Connect a Source or Sink device and see console output:

Sample Sink Output

# DRP Toggling ...
Unattached.SNK
Unattached.SRC
Unattached.SNK
Unattached.SRC
# Attach Source Device
Unattached.SNK
AttachWait.SNK
Attached.SNK
PE_SNK_Startup
PRL_INIT
PRL_HR_Wait_for_Request
PRL_Tx_PHY_Layer_Reset
PRL_Tx_Wait_for_Message_Request
PE_SNK_Discovery
PE_SNK_Wait_For_Capabilities
RECV 61a1/6
   [0]0a01912c
   [1]0002d12c
   [2]0003c12c
   [3]0004b12c
   [4]000641f4
   [5]c1a42164
PE_SNK_Evaluate_Capability
PE_SNK_Select_Capability
PRL_Tx_Wait_for_PHY_response
RECV 0161/0
PRL_Tx_Wait_for_Message_Request
RECV 03a3/0
PE_SNK_Transition_Sink
RECV 05a6/0
PE_SNK_Ready
Source Caps:
PDO 0:0x0a01912c
 Type:                FIXED
 Current:             3000
 Voltage:             5000
 Peak Current:        0
 Uchunked Support:    0
 Dual Role Data:      1
 USB Comms:           0
 Unconstrained Pwr:   1
 USB Suspend:         0
 Dual Role Power:     0
PDO 1:0x0002d12c
 Type:                FIXED
 Current:             3000
 Voltage:             9000
 Peak Current:        0
 Uchunked Support:    0
 Dual Role Data:      0
 USB Comms:           0
 Unconstrained Pwr:   0
 USB Suspend:         0
 Dual Role Power:     0
PDO 2:0x0003c12c
 Type:                FIXED
 Current:             3000
 Voltage:             12000
 Peak Current:        0
 Uchunked Support:    0
 Dual Role Data:      0
 USB Comms:           0
 Unconstrained Pwr:   0
 USB Suspend:         0
 Dual Role Power:     0
PDO 3:0x0004b12c
 Type:                FIXED
 Current:             3000
 Voltage:             15000
 Peak Current:        0
 Uchunked Support:    0
 Dual Role Data:      0
 USB Comms:           0
 Unconstrained Pwr:   0
 USB Suspend:         0
 Dual Role Power:     0
PDO 4:0x000641f4
 Type:                FIXED
 Current:             5000
 Voltage:             20000
 Peak Current:        0
 Uchunked Support:    0
 Dual Role Data:      0
 USB Comms:           0
 Unconstrained Pwr:   0
 USB Suspend:         0
 Dual Role Power:     0
PDO 5:0xc1a42164
 Type:                AUGMENTED
 Min Voltage:         3300
 Max Voltage:         21000
 Max Current:         5000
 PPS Power Limited:   0

Sample Source Output

# DRP Toggling ...
Unattached.SRC
Unattached.SNK
Unattached.SRC
Unattached.SNK
# Attach Sink Device
Unattached.SRC
AttachWait.SRC
Attached.SRC
PE_SRC_Startup
PRL_INIT
PRL_HR_Wait_for_Request
PRL_Tx_PHY_Layer_Reset
PRL_Tx_Wait_for_Message_Request
PE_SRC_Send_Capabilities
PRL_Tx_Wait_for_PHY_response
PRL_Tx_Wait_for_Message_Request
PE_SRC_Discovery
PE_SRC_Send_Capabilities
PRL_Tx_Wait_for_PHY_response
PRL_Tx_Wait_for_Message_Request
PE_SRC_Discovery
PE_SRC_Send_Capabilities
PRL_Tx_Wait_for_PHY_response
RECV 0a41/0
PRL_Tx_Wait_for_Message_Request
RECV 1082/1
   [0]1680292c
PE_SRC_Negotiate_Capability
PE_SRC_Transition_Supply
PRL_Tx_Wait_for_PHY_response
RECV 0c41/0
PRL_Tx_Wait_for_Message_Request
RDO :0x1680292c
 Type:                FIXED
 Object Position:     1
 Giveback:            0
 Capability Mismatch: 1
 USB Comm Capable:    1
 No USB Suspend:      0
 Unchunk Ext MSG Support: 1
 Operating Current:   100 mA
PE_SRC_Ready

See also

USB-C Device API