usbcsink  2.0.0.0
Main Page

USB-C Sink click

USB-C Sink Click is a compact add-on board that contains a standalone autonomous USB power delivery controller. This board features the STUSB4500, a USB-C sink-only controller compatible with Power-Delivery (PD) from STMicroelectronics. It supports dead battery mode to allow a system to be powered from an external source directly, establishes a valid source-to-sink connection, and negotiates a USB power delivery (PD) contract with a PD capable source device.

click Product page


Click library

  • Author : Stefan Ilic
  • Date : Aug 2021.
  • Type : I2C type

Software Support

We provide a library for the USBCSink Click as well as a demo application (example), developed using MikroElektronika compilers. The demo can run on all the main MikroElektronika development boards.

Package can be downloaded/installed directly from NECTO Studio Package Manager(recommended way), downloaded from our LibStock™ or found on Mikroe github account.

Library Description

This library contains API for USBCSink Click driver.

Standard key functions :

Example key functions :

Example Description

This is an example which demonstrates the use of USB-C Sink Click board.

The demo application is composed of two sections :

Application Init

Initialization driver enables - I2C, set hw reset, set PDO2 profile and current value for PDO2 1.5A, upload new data and reset device to write NVM settings to the STUSB450, also write log.

void application_init ( void ) {
log_cfg_t log_cfg;
usbcsink_cfg_t usbcsink_cfg;
LOG_MAP_USB_UART( log_cfg );
log_init( &logger, &log_cfg );
log_info( &logger, " Application Init " );
// Click initialization.
usbcsink_cfg_setup( &usbcsink_cfg );
USBCSINK_MAP_MIKROBUS( usbcsink_cfg, MIKROBUS_1 );
err_t init_flag = usbcsink_init( &usbcsink, &usbcsink_cfg );
if ( I2C_MASTER_ERROR == init_flag ) {
log_error( &logger, " Application Init Error. " );
log_info( &logger, " Please, run program again... " );
for ( ; ; );
}
usbcsink_hw_reset( &usbcsink );
Delay_ms ( 1000 );
log_printf( &logger , "- - - - - - - - - - - - \r\n" );
log_printf( &logger , " Setting PDO ~ PDO%d \r\n", ( uint16_t ) sel_profile );
log_printf( &logger , "- - - - - - - - - - - - \r\n" );
Delay_ms ( 1000 );
usbcsink_hw_reset( &usbcsink );
Delay_ms ( 1000 );
log_info( &logger, " Application Task " );
}

Application Task

USB-C Sink Click board can be used to read the Power Data Objects (PDO) highest priority profile: PDO1 : 5V, PDO2 : 12V, PDO3 : 20V. All data logs write on USB uart changes for every 5 sec.

void application_task ( void ) {
usbcsink_load_data( &usbcsink );
log_printf( &logger , " New Parameters \r\n" );
log_printf( &logger , "------------------------\r\n" );
log_printf( &logger , " PDO Number ~ PDO%d\r\n", ( uint16_t ) sel_profile );
log_printf( &logger , "- - - - - - - - - - - - \r\n" );
log_printf( &logger , " Voltage : %.2f V\r\n", demo_data );
log_printf( &logger , " Current : %.2f A\r\n", demo_data );
log_printf( &logger , "------------------------\r\n" );
Delay_ms ( 1000 );
Delay_ms ( 1000 );
Delay_ms ( 1000 );
Delay_ms ( 1000 );
Delay_ms ( 1000 );
}

The full application code, and ready to use projects can be installed directly from NECTO Studio Package Manager(recommended way), downloaded from our LibStock™ or found on Mikroe github account.

Other Mikroe Libraries used in the example:

  • MikroSDK.Board
  • MikroSDK.Log
  • Click.USBCSink

Additional notes and informations

Depending on the development board you are using, you may need USB UART click, USB UART 2 Click or RS232 Click to connect to your PC, for development systems with no UART to USB interface available on the board. UART terminal is available in all MikroElektronika compilers.


usbcsink_write_byte
void usbcsink_write_byte(usbcsink_t *ctx, uint8_t reg, uint8_t tx_data)
Write byte function.
usbcsink_cfg_setup
void usbcsink_cfg_setup(usbcsink_cfg_t *cfg)
USB-C Sink configuration object setup function.
usbcsink_set_current
void usbcsink_set_current(uint8_t pdo_numb, float curr)
Set the current function.
USBCSINK_UPLOAD_NEW_DATA_VAL
#define USBCSINK_UPLOAD_NEW_DATA_VAL
Definition: usbcsink.h:217
usbcsink_load_data
void usbcsink_load_data(usbcsink_t *ctx)
Load data function.
usbcsink_init
err_t usbcsink_init(usbcsink_t *ctx, usbcsink_cfg_t *cfg)
USB-C Sink initialization function.
USBCSINK_SET_PDO_2
#define USBCSINK_SET_PDO_2
Definition: usbcsink.h:214
application_task
void application_task(void)
Definition: main.c:86
demo_data
float demo_data
Definition: main.c:36
usbcsink_cfg_t
USB-C Sink Click configuration object.
Definition: usbcsink.h:284
usbcsink_t
USB-C Sink Click context object.
Definition: usbcsink.h:262
usbcsink_upload_new_data
void usbcsink_upload_new_data(usbcsink_t *ctx, uint8_t def_vals)
Upload data function.
usbcsink_hw_reset
void usbcsink_hw_reset(usbcsink_t *ctx)
HW reset function.
application_init
void application_init(void)
Definition: main.c:38
sel_profile
uint8_t sel_profile
Definition: main.c:35
usbcsink_get_pdo2
uint8_t usbcsink_get_pdo2(usbcsink_t *ctx)
Get PO2 pin state function.
USBCSINK_MAP_MIKROBUS
#define USBCSINK_MAP_MIKROBUS(cfg, mikrobus)
MikroBUS pin mapping.
Definition: usbcsink.h:246
usbcsink_get_current
float usbcsink_get_current(uint8_t pdo_numb)
Get the current function.
usbcsink_get_pdo_num
uint8_t usbcsink_get_pdo_num(void)
Get the number of sink function.
usbcsink_set_pdo_num
void usbcsink_set_pdo_num(uint8_t pdo_numb)
Set the number of sink function.
usbcsink_get_voltage
float usbcsink_get_voltage(uint8_t pdo_numb)
Get the voltage function.