Basic USBC SINK

Overview

This example demonstrates how to create a USBC Power Delivery application using a TypeC Port Controller (TCPC) driver. The application implements a USBC Sink device.

After the USBC Sink device is powered, an LED begins to blink and when the USBC Sink device is plugged into a Power Delivery charger, it negotiates with the charger to provide 5V@100mA and displays all Power Delivery Objects (PDOs) provided by the charger.

Please note that this example does not implement any of the features and requirements outlined in the USBC Specification needed to create a robust USBC Sink device. It is meant for demonstration purposes only.

Requirements

The TCPC device that’s used by the sample is specified by defining a devicetree node label named tcpc. The sample has been tested on ST STM32G081B Evaluation and provides an overlay file for both board.

For the ST STM32G081B Evaluation, Port 2 is configured as a Sink and Port 1 is unused. So, the charger must be plugged into Port 2.

Building and Running

Build and flash Sink as follows, changing stm32g081b_eval_board for your board:

west build -b stm32g081b_eval_board samples/boards/usbc/sink
west flash

After flashing, the LED starts to blink. Connect a charger and see console output:

Sample Output

UnAttached.SNK
AttachedWait.SNK
Attached.SNK
Got PD_CTRL_ACCEPT
Got PD_CTRL_PS_RDY
Source Caps:
PDO 0:
       Type:     FIXED
       DRP:      0
       Suspend:  0
       UP:       1
       USB Comm: 0
       DRD:      0
       Voltage:  5000 mV
       Current:  2400 mA
PDO 1:
       Type:     FIXED
       DRP:      0
       Suspend:  0
       UP:       0
       USB Comm: 0
       DRD:      0
       Voltage:  9000 mV
       Current:  3000 mA
PDO 2:
       Type:     FIXED
       DRP:      0
       Suspend:  0
       UP:       0
       USB Comm: 0
       DRD:      0
       Voltage:  20000 mV
       Current:  3000 mA
SNK_READY