usbcsource  2.0.0.0
usbcsource.h
Go to the documentation of this file.
1 /****************************************************************************
2 ** Copyright (C) 2020 MikroElektronika d.o.o.
3 ** Contact: https://www.mikroe.com/contact
4 **
5 ** Permission is hereby granted, free of charge, to any person obtaining a copy
6 ** of this software and associated documentation files (the "Software"), to deal
7 ** in the Software without restriction, including without limitation the rights
8 ** to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 ** copies of the Software, and to permit persons to whom the Software is
10 ** furnished to do so, subject to the following conditions:
11 ** The above copyright notice and this permission notice shall be
12 ** included in all copies or substantial portions of the Software.
13 **
14 ** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15 ** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
16 ** OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
17 ** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
18 ** DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
19 ** OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
20 ** USE OR OTHER DEALINGS IN THE SOFTWARE.
21 ****************************************************************************/
22 
28 #ifndef USBCSOURCE_H
29 #define USBCSOURCE_H
30 
31 #ifdef __cplusplus
32 extern "C"{
33 #endif
34 
35 #include "mikrosdk_version.h"
36 
37 #ifdef __GNUC__
38 #if mikroSDK_GET_VERSION < 20800ul
39 #include "rcu_delays.h"
40 #else
41 #include "delays.h"
42 #endif
43 #endif
44 
45 #include "drv_digital_out.h"
46 #include "drv_digital_in.h"
47 #include "drv_i2c_master.h"
48 
69 #define USBCSOURCE_REG_ALERT_STATUS_REG 0x0B
70 #define USBCSOURCE_REG_ALERT_STATUS_MASK_CTRL 0x0C
71 #define USBCSOURCE_REG_CC_CONNECTION_STATUS_TRANS 0x0D
72 #define USBCSOURCE_REG_CC_CONNECTION_STATUS_1 0x0E
73 #define USBCSOURCE_REG_MONITORING_STATUS_TRANS 0x0F
74 #define USBCSOURCE_REG_MONITORING_STATUS 0x10
75 #define USBCSOURCE_REG_CC_CONNECTION_STATUS_2 0x11
76 #define USBCSOURCE_REG_HW_FAULT_STATUS_TRANS 0x12
77 #define USBCSOURCE_REG_HW_FAULT_STATUS 0x13
78 #define USBCSOURCE_REG_CC_CAPABILITY_CTRL 0x18
79 #define USBCSOURCE_REG_RESET_CTRL 0x23
80 #define USBCSOURCE_REG_VBUS_DISCHARGE_TIME_CTRL 0x25
81 #define USBCSOURCE_REG_VBUS_DISCHARGE_STATUS 0x26
82 #define USBCSOURCE_REG_VBUS_ENABLE_STATUS 0x27
83 #define USBCSOURCE_REG_VBUS_MONITORING_CTRL 0x2E
84 
85 #define USBCSOURCE_REG_SRC_PDO1 0x71
86 #define USBCSOURCE_REG_SRC_PDO2 0x75
87 #define USBCSOURCE_REG_SRC_PDO3 0x79
88 #define USBCSOURCE_REG_SRC_PDO4 0x7D
89 #define USBCSOURCE_REG_SRC_PDO5 0x81
90  // usbcsource_reg
92 
112 #define USBCSOURCE_SEL_PDO1 0x01
113 #define USBCSOURCE_SEL_PDO2 0x02
114 #define USBCSOURCE_SEL_PDO3 0x03
115 #define USBCSOURCE_SEL_PDO4 0x04
116 #define USBCSOURCE_SEL_PDO5 0x05
117 
122 #define USBCSOURCE_PDO_NVM_VOLT_CFG_9_V 0x00
123 #define USBCSOURCE_PDO_NVM_VOLT_CFG_15_V 0x01
124 #define USBCSOURCE_PDO_NVM_VOLT_CFG_FLEX_V1 0x02
125 #define USBCSOURCE_PDO_NVM_VOLT_CFG_FLEX_V2 0x03
126 
131 #define USBCSOURCE_PDO_NVM_CUR_FLEX_I 0x00
132 #define USBCSOURCE_PDO_NVM_CUR_1_50_A 0x01
133 #define USBCSOURCE_PDO_NVM_CUR_1_75_A 0x02
134 #define USBCSOURCE_PDO_NVM_CUR_2_00_A 0x03
135 #define USBCSOURCE_PDO_NVM_CUR_2_25_A 0x04
136 #define USBCSOURCE_PDO_NVM_CUR_2_50_A 0x05
137 #define USBCSOURCE_PDO_NVM_CUR_2_75_A 0x06
138 #define USBCSOURCE_PDO_NVM_CUR_3_00_A 0x07
139 #define USBCSOURCE_PDO_NVM_CUR_3_25_A 0x08
140 #define USBCSOURCE_PDO_NVM_CUR_3_50_A 0x09
141 #define USBCSOURCE_PDO_NVM_CUR_3_75_A 0x0A
142 #define USBCSOURCE_PDO_NVM_CUR_4_00_A 0x0B
143 #define USBCSOURCE_PDO_NVM_CUR_4_25_A 0x0C
144 #define USBCSOURCE_PDO_NVM_CUR_4_50_A 0x0D
145 #define USBCSOURCE_PDO_NVM_CUR_4_75_A 0x0E
146 #define USBCSOURCE_PDO_NVM_CUR_5_00_A 0x0F
147 
152 #define USBCSOURCE_RESET_DIS 0x00
153 #define USBCSOURCE_RESET_EN 0x01
154 
159 #define USBCSOURCE_ALERT_STAT_HARD_RESET_AL 0x80
160 #define USBCSOURCE_ALERT_STAT_PORT_STAT_AL 0x40
161 #define USBCSOURCE_ALERT_STAT_TYPEC_MON_AL 0x20
162 #define USBCSOURCE_ALERT_STAT_CC_HW_FAULT_AL 0x10
163 #define USBCSOURCE_ALERT_STAT_DPM_STAT_AL 0x08
164 #define USBCSOURCE_ALERT_STAT_PE_STAT_AL 0x04
165 #define USBCSOURCE_ALERT_STAT_PRT_STAT_AL 0x02
166 #define USBCSOURCE_ALERT_STAT_PHY_STAT_AL 0x01
167 
172 #define USBCSOURCE_ATTACHED_DEVICE_NONE_ATT 0x00
173 #define USBCSOURCE_ATTACHED_DEVICE_SNK_ATT 0x01
174 #define USBCSOURCE_ATTACHED_DEVICE_SRC_ATT 0x02
175 #define USBCSOURCE_ATTACHED_DEVICE_DBG_ATT 0x03
176 #define USBCSOURCE_ATTACHED_DEVICE_AUD_ATT 0x04
177 #define USBCSOURCE_ATTACHED_DEVICE_POW_ACC_ATT 0x05
178 
183 #define USBCSOURCE_LOW_POWER_STANDBY_OFF 0x00
184 #define USBCSOURCE_LOW_POWER_STANDBY_ON 0x01
185 
190 #define USBCSOURCE_POWER_MODE_SNK 0x00
191 #define USBCSOURCE_POWER_MODE_SRC 0x01
192 
197 #define USBCSOURCE_DATA_MODE_UFP 0x00
198 #define USBCSOURCE_DATA_MODE_DFP 0x01
199 
204 #define USBCSOURCE_CONN_UNATTACHED 0x00
205 #define USBCSOURCE_CONN_ATTACHED 0x01
206 
211 #define USBCSOURCE_VBUS_READY_DISCONNECTED 0x00
212 #define USBCSOURCE_VBUS_READY_CONNECTED 0x01
213 
214 #define USBCSOURCE_VBUS_VSAFE0V_0_8V_HIGHER 0x00
215 #define USBCSOURCE_VBUS_VSAFE0V_0_8V_LOWER 0x01
216 
217 #define USBCSOURCE_VBUS_VALID_3_9V_LOWER 0x00
218 #define USBCSOURCE_VBUS_VALID_3_9V_HIGHER 0x01
219 
224 #define USBCSOURCE_STATUS_ERROR 0x00
225 #define USBCSOURCE_STATUS_SUCCESS 0x01
226 
232 #define USBCSOURCE_I2C_SLAVE_ADR_GND 0x28
233 #define USBCSOURCE_I2C_SLAVE_ADR_VCC 0x29
234  // usbcsource_set
236 
251 #define USBCSOURCE_MAP_MIKROBUS( cfg, mikrobus ) \
252  cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
253  cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
254  cfg.rst = MIKROBUS( mikrobus, MIKROBUS_RST ); \
255  cfg.int_pin = MIKROBUS( mikrobus, MIKROBUS_INT )
256  // usbcsource_map // usbcsource
259 
264 typedef struct
265 {
266  // Output pins
267  digital_out_t rst;
269  // Input pins
270  digital_in_t int_pin;
272  // Modules
273  i2c_master_t i2c;
275  // I2C slave address
276  uint8_t slave_address;
278 } usbcsource_t;
279 
284 typedef struct
285 {
286  pin_name_t scl;
287  pin_name_t sda;
289  pin_name_t rst;
290  pin_name_t int_pin;
292  uint32_t i2c_speed;
293  uint8_t i2c_address;
296 
301 typedef struct
302 {
303  uint8_t hard_reset_al;
304  uint8_t port_status_al;
307  uint8_t prt_status_al;
308  uint8_t phy_status_al;
310 
315 typedef struct
316 {
319  uint8_t power_mode;
320  uint8_t data_mode;
321  uint8_t vconn_mode;
322  uint8_t attach;
323 } port_status_t;
324 
329 typedef struct
330 {
332  uint8_t vbus_ready;
333  uint8_t vbus_vsafe0v;
334  uint8_t vbus_valid;
335  uint8_t vconn_valid;
337 
342 typedef struct
343 {
344  uint8_t cc_reverse;
348 
353 typedef struct
354 {
355  uint8_t th_145_status;
361  uint8_t vpu_ovp_fault;
362  uint8_t vpu_valid;
370 
375 typedef struct
376 {
377  uint8_t pdo_number;
378  uint8_t fixed_supply;
381  uint8_t unconstr_power;
383  uint8_t dual_role_data;
385  uint8_t peak_current;
386  float vtg_data;
387  float curr_data;
388 } pdo_config_t;
389 
394 typedef enum
395 {
397  USBCSOURCE_ERROR = -1
398 
400 
417 
432 
447 err_t usbcsource_generic_write ( usbcsource_t *ctx, uint8_t reg, uint8_t *tx_buf, uint8_t tx_len );
448 
463 err_t usbcsource_generic_read ( usbcsource_t *ctx, uint8_t reg, uint8_t *rx_buf, uint8_t rx_len );
464 
477 void usbcsource_write_byte ( usbcsource_t *ctx, uint8_t reg, uint8_t tx_data );
478 
490 uint8_t usbcsource_read_byte ( usbcsource_t *ctx, uint8_t reg );
491 
503 
515 
528 void usbcsource_get_alert_status ( usbcsource_t *ctx, alert_status_t *alert_status_data );
529 
542 void usbcsource_set_alert_status ( usbcsource_t *ctx, alert_status_t alert_status_data );
543 
556 
569 void usbcsource_get_port_status ( usbcsource_t *ctx, port_status_t *port_status_data );
570 
585 
599 
614 
626 
638 uint8_t usbcsource_set_pdo_config ( usbcsource_t *ctx, pdo_config_t pdo_cfg_data );
639 
652 uint8_t usbcsource_get_pdo_config ( usbcsource_t *ctx, uint8_t pdo_numb, pdo_config_t *pdo_cfg_data );
653 
672 
673 #ifdef __cplusplus
674 }
675 #endif
676 #endif // USBCSOURCE_H
677  // usbcsource
679 
680 // ------------------------------------------------------------------------ END
fault_status_t::vconn_sw_ocp_fault_cc1
uint8_t vconn_sw_ocp_fault_cc1
Definition: usbcsource.h:365
usbcsource_default_config
void usbcsource_default_config(usbcsource_t *ctx)
Default configuration function.
monitor_status_t::vconn_valid
uint8_t vconn_valid
Definition: usbcsource.h:335
usbcsource_get_port_status
void usbcsource_get_port_status(usbcsource_t *ctx, port_status_t *port_status_data)
Get port status function.
usbcsource_t
USB-C Source Click context object.
Definition: usbcsource.h:265
port_status_t::attached_device
uint8_t attached_device
Definition: usbcsource.h:317
usbcsource_t::int_pin
digital_in_t int_pin
Definition: usbcsource.h:270
monitor_status_t::vbus_vsafe0v
uint8_t vbus_vsafe0v
Definition: usbcsource.h:333
fault_status_t::vconn_sw_ovp_fault_trans
uint8_t vconn_sw_ovp_fault_trans
Definition: usbcsource.h:360
pdo_config_t::unch_exd_mesg_support
uint8_t unch_exd_mesg_support
Definition: usbcsource.h:384
connection_status_t::snk_power_level
uint8_t snk_power_level
Definition: usbcsource.h:345
alert_status_t::port_status_al
uint8_t port_status_al
Definition: usbcsource.h:304
monitor_status_t::pd_typec_hand_check
uint8_t pd_typec_hand_check
Definition: usbcsource.h:331
connection_status_t::typec_fsm_state
uint8_t typec_fsm_state
Definition: usbcsource.h:346
fault_status_t::vconn_sw_ovp_fault_cc1
uint8_t vconn_sw_ovp_fault_cc1
Definition: usbcsource.h:367
alert_status_t::phy_status_al
uint8_t phy_status_al
Definition: usbcsource.h:308
pdo_config_t::vtg_data
float vtg_data
Definition: usbcsource.h:386
fault_status_t
USB-C Source Click fault status object.
Definition: usbcsource.h:354
fault_status_t::vconn_sw_ovp_fault_cc2
uint8_t vconn_sw_ovp_fault_cc2
Definition: usbcsource.h:368
port_status_t::low_power_standby
uint8_t low_power_standby
Definition: usbcsource.h:318
usbcsource_hw_reset
void usbcsource_hw_reset(usbcsource_t *ctx)
HW reset function.
pdo_config_t::peak_current
uint8_t peak_current
Definition: usbcsource.h:385
fault_status_t::vconn_sw_rvp_fault_cc1
uint8_t vconn_sw_rvp_fault_cc1
Definition: usbcsource.h:363
usbcsource_init
err_t usbcsource_init(usbcsource_t *ctx, usbcsource_cfg_t *cfg)
USB-C Source initialization function.
usbcsource_cfg_t::int_pin
pin_name_t int_pin
Definition: usbcsource.h:290
port_status_t::power_mode
uint8_t power_mode
Definition: usbcsource.h:319
usbcsource_write_byte
void usbcsource_write_byte(usbcsource_t *ctx, uint8_t reg, uint8_t tx_data)
Generic write function.
monitor_status_t::vbus_valid
uint8_t vbus_valid
Definition: usbcsource.h:334
pdo_config_t::usb_commun_capable
uint8_t usb_commun_capable
Definition: usbcsource.h:382
fault_status_t::vpu_valid_trans
uint8_t vpu_valid_trans
Definition: usbcsource.h:357
pdo_config_t::pdo_number
uint8_t pdo_number
Definition: usbcsource.h:377
alert_status_t::typec_monitoring_status_al
uint8_t typec_monitoring_status_al
Definition: usbcsource.h:305
fault_status_t::vconn_sw_ocp_fault_trans
uint8_t vconn_sw_ocp_fault_trans
Definition: usbcsource.h:359
fault_status_t::vpu_valid
uint8_t vpu_valid
Definition: usbcsource.h:362
port_status_t::attach
uint8_t attach
Definition: usbcsource.h:322
monitor_status_t
USB-C Source Click monitor status object.
Definition: usbcsource.h:330
alert_status_t
USB-C Source Click alert status object.
Definition: usbcsource.h:302
usbcsource_cfg_t::rst
pin_name_t rst
Definition: usbcsource.h:289
usbcsource_sw_reset
void usbcsource_sw_reset(usbcsource_t *ctx)
SW reset function.
monitor_status_t::vbus_ready
uint8_t vbus_ready
Definition: usbcsource.h:332
port_status_t::data_mode
uint8_t data_mode
Definition: usbcsource.h:320
pdo_config_t::curr_data
float curr_data
Definition: usbcsource.h:387
port_status_t
USB-C Source Click port status object.
Definition: usbcsource.h:316
usbcsource_check_attach_trans
uint8_t usbcsource_check_attach_trans(usbcsource_t *ctx)
Check attach trans function.
alert_status_t::prt_status_al
uint8_t prt_status_al
Definition: usbcsource.h:307
USBCSOURCE_ERROR
@ USBCSOURCE_ERROR
Definition: usbcsource.h:397
alert_status_t::cc_hw_fault_status_al
uint8_t cc_hw_fault_status_al
Definition: usbcsource.h:306
usbcsource_cfg_t::i2c_address
uint8_t i2c_address
Definition: usbcsource.h:293
usbcsource_t::i2c
i2c_master_t i2c
Definition: usbcsource.h:273
usbcsource_get_pdo_config
uint8_t usbcsource_get_pdo_config(usbcsource_t *ctx, uint8_t pdo_numb, pdo_config_t *pdo_cfg_data)
Get PDO configuration function.
fault_status_t::vpu_ovp_fault_trans
uint8_t vpu_ovp_fault_trans
Definition: usbcsource.h:356
port_status_t::vconn_mode
uint8_t vconn_mode
Definition: usbcsource.h:321
fault_status_t::th_145_status
uint8_t th_145_status
Definition: usbcsource.h:355
usbcsource_get_alert_status
void usbcsource_get_alert_status(usbcsource_t *ctx, alert_status_t *alert_status_data)
Get alert status function.
usbcsource_cfg_t::scl
pin_name_t scl
Definition: usbcsource.h:286
usbcsource_generic_write
err_t usbcsource_generic_write(usbcsource_t *ctx, uint8_t reg, uint8_t *tx_buf, uint8_t tx_len)
USB-C Source I2C writing function.
pdo_config_t::dual_role_data
uint8_t dual_role_data
Definition: usbcsource.h:383
pdo_config_t::usb_suspend_support
uint8_t usb_suspend_support
Definition: usbcsource.h:380
fault_status_t::vpu_ovp_fault
uint8_t vpu_ovp_fault
Definition: usbcsource.h:361
usbcsource_set_pdo_config
uint8_t usbcsource_set_pdo_config(usbcsource_t *ctx, pdo_config_t pdo_cfg_data)
Set PDO configuration function.
usbcsource_int_pin_state
uint8_t usbcsource_int_pin_state(usbcsource_t *ctx)
Get INT pin state function.
usbcsource_cfg_t::i2c_speed
uint32_t i2c_speed
Definition: usbcsource.h:292
pdo_config_t
USB-C Source Click PDO config object.
Definition: usbcsource.h:376
usbcsource_t::slave_address
uint8_t slave_address
Definition: usbcsource.h:276
USBCSOURCE_OK
@ USBCSOURCE_OK
Definition: usbcsource.h:396
usbcsource_get_monitoring_status
void usbcsource_get_monitoring_status(usbcsource_t *ctx, monitor_status_t *monitor_status_data)
Get monitoring status function.
usbcsource_set_alert_status
void usbcsource_set_alert_status(usbcsource_t *ctx, alert_status_t alert_status_data)
Set alert status function.
usbcsource_generic_read
err_t usbcsource_generic_read(usbcsource_t *ctx, uint8_t reg, uint8_t *rx_buf, uint8_t rx_len)
USB-C Source I2C reading function.
pdo_config_t::dual_role_power
uint8_t dual_role_power
Definition: usbcsource.h:379
usbcsource_read_byte
uint8_t usbcsource_read_byte(usbcsource_t *ctx, uint8_t reg)
Generic read function.
fault_status_t::vconn_sw_ocp_fault_cc2
uint8_t vconn_sw_ocp_fault_cc2
Definition: usbcsource.h:366
usbcsource_return_value_t
usbcsource_return_value_t
USB-C Source Click return value data.
Definition: usbcsource.h:395
fault_status_t::vconn_sw_rvp_fault_cc2
uint8_t vconn_sw_rvp_fault_cc2
Definition: usbcsource.h:364
alert_status_t::hard_reset_al
uint8_t hard_reset_al
Definition: usbcsource.h:303
usbcsource_cfg_setup
void usbcsource_cfg_setup(usbcsource_cfg_t *cfg)
USB-C Source configuration object setup function.
usbcsource_get_fault_status
void usbcsource_get_fault_status(usbcsource_t *ctx, fault_status_t *fault_data)
Get fault status function.
connection_status_t::cc_reverse
uint8_t cc_reverse
Definition: usbcsource.h:344
usbcsource_t::rst
digital_out_t rst
Definition: usbcsource.h:267
pdo_config_t::unconstr_power
uint8_t unconstr_power
Definition: usbcsource.h:381
fault_status_t::vconn_sw_rvp_fault_trans
uint8_t vconn_sw_rvp_fault_trans
Definition: usbcsource.h:358
usbcsource_get_connection_status
void usbcsource_get_connection_status(usbcsource_t *ctx, connection_status_t *conn_data)
Get connection status function.
usbcsource_cfg_t::sda
pin_name_t sda
Definition: usbcsource.h:287
connection_status_t
USB-C Source Click connection status object.
Definition: usbcsource.h:343
pdo_config_t::fixed_supply
uint8_t fixed_supply
Definition: usbcsource.h:378
usbcsource_cfg_t
USB-C Source Click configuration object.
Definition: usbcsource.h:285