usbcsink4  2.1.0.0
usbcsink4.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 USBCSINK4_H
29 #define USBCSINK4_H
30 
31 #ifdef __cplusplus
32 extern "C"{
33 #endif
34 
39 #ifdef PREINIT_SUPPORTED
40 #include "preinit.h"
41 #endif
42 
43 #ifdef MikroCCoreVersion
44  #if MikroCCoreVersion >= 1
45  #include "delays.h"
46  #endif
47 #endif
48 
49 #include "drv_digital_out.h"
50 #include "drv_digital_in.h"
51 #include "drv_i2c_master.h"
52 
73 #define USBCSINK4_REG_DEVICE_MODE 0x0000u
74 #define USBCSINK4_REG_SILICON_ID 0x0002u
75 #define USBCSINK4_REG_INTERRUPT 0x0006u
76 #define USBCSINK4_REG_TYPE_C_STATUS 0x100Cu
77 #define USBCSINK4_REG_BUS_VOLTAGE 0x100Du
78 #define USBCSINK4_REG_BUS_CURRENT 0x1058u
79 #define USBCSINK4_REG_EVENT_STATUS 0x1034u
80 #define USBCSINK4_REG_CHARGING_MODE_STATUS 0x1095u
81 #define USBCSINK4_REG_RESET 0x0008u
82 #define USBCSINK4_REG_EVENT_MASK 0x1024u
83 #define USBCSINK4_REG_FAULT_PIN_MASK 0x1080u
84 #define USBCSINK4_REG_OVP_CONFIG 0x1088u
85 #define USBCSINK4_REG_SNK_FET_DISABLE 0x1084u
86 #define USBCSINK4_REG_SNK_FET_CONTROL 0x1085u
87 #define USBCSINK4_REG_SAFE_PWR_CONTROL 0x1086u
88 #define USBCSINK4_REG_CHARGING_MODE_DISABLE 0x1094u
89 #define USBCSINK4_REG_DEV_RESPONSE 0x007Eu
90 #define USBCSINK4_REG_PD_RESPONSE 0x1400u
91 #define USBCSINK4_REG_READ_DATA_MEMORY_START 0x1404u
92 #define USBCSINK4_REG_READ_DATA_MEMORY_STOP 0x150Bu
93 #define USBCSINK4_REG_WRITE_DATA_MEMORY_START 0x1800u
94 #define USBCSINK4_REG_WRITE_DATA_MEMORY_STOP 0x19FFu
95  // usbcsink4_reg
97 
112 #define USBCSINK4_TYPE_C_ST_PORT_DISCONN 0x00
113 #define USBCSINK4_TYPE_C_ST_PORT_CONN 0x01
114 #define USBCSINK4_TYPE_C_ST_PORT_BITMAKS 0x01
115 #define USBCSINK4_TYPE_C_ST_CC_1 0x00
116 #define USBCSINK4_TYPE_C_ST_CC_2 0x01
117 #define USBCSINK4_TYPE_C_ST_CC_BITMAKS 0x01
118 #define USBCSINK4_TYPE_C_ST_ATT_NTH 0x00
119 #define USBCSINK4_TYPE_C_ST_ATT_SRC 0x02
120 #define USBCSINK4_TYPE_C_ST_ATT_DEBUG 0x03
121 #define USBCSINK4_TYPE_C_ST_ATT_BITMAKS 0x07
122 #define USBCSINK4_TYPE_C_ST_CURR_0_9A 0x00
123 #define USBCSINK4_TYPE_C_ST_CURR_1A 0x01
124 #define USBCSINK4_TYPE_C_ST_CURR_3A 0x02
125 #define USBCSINK4_TYPE_C_ST_CURR_BITMAKS 0x03
126 
131 #define USBCSINK4_CHARGING_MODE_ENABLE 0x00
132 #define USBCSINK4_CHARGING_MODE_DISABLE 0x01
133 #define USBCSINK4_CHG_MODE_STATUS_CLEAR 0xFF
134 
139 #define USBCSINK4_CHG_MODE_STATUS_NO_LGC 0x00
140 #define USBCSINK4_CHG_MODE_STATUS_BC1_2DCP_CDC 0x01
141 #define USBCSINK4_CHG_MODE_STATUS_QC2_1 0x02
142 #define USBCSINK4_CHG_MODE_STATUS_AFC 0x04
143 #define USBCSINK4_CHG_MODE_STATUS_APPLE 0x05
144 
149 #define USBCSINK4_INTERRUPT_RESPONSE_NO 0x00
150 #define USBCSINK4_INTERRUPT_RESPONSE_DEV 0x01
151 #define USBCSINK4_INTERRUPT_RESPONSE_PD 0x02
152 
157 #define USBCSINK4_VOLTAGE_SENS 0.1f
158 #define USBCSINK4_CURRENT_SENS 0.05f
159 
164 #define USBCSINK4_OVP_CONFIG_SIG_DISABLE 'D'
165 #define USBCSINK4_OVP_CONFIG_SIG_RE_ENABLE 'C'
166 #define USBCSINK4_OVP_CONFIG_THOLD_DEFAULT 0x28
167 #define USBCSINK4_OVP_CONFIG_DBNC_DEFAULT 0x0A
168 
173 #define USBCSINK4_SIG_RESET 'R'
174 #define USBCSINK4_RESET_I2C 0x00
175 #define USBCSINK4_RESET_DEVICE 0x01
176 
181 #define USBCSINK4_DEV_RSP_CMD_REG_WRITE 0x00
182 #define USBCSINK4_DEV_RSP_ASYNC_EVENT 0x80
183 #define USBCSINK4_DEV_RSP_CODE_NO_RSP 0x00
184 #define USBCSINK4_DEV_RSP_CODE_SUCCESS 0x02
185 #define USBCSINK4_DEV_RSP_CODE_INVALID 0x05
186 #define USBCSINK4_DEV_RSP_CODE_UNEXPECTED 0x09
187 #define USBCSINK4_DEV_RSP_CODE_NOT_SUPPORTED 0x0A
188 #define USBCSINK4_DEV_RSP_CODE_TXN_FAILED 0x0C
189 #define USBCSINK4_DEV_RSP_CODE_PD_CMD_FAILED 0x0D
190 #define USBCSINK4_DEV_RSP_CODE_PORT_BUSY 0x12
191 #define USBCSINK4_DEV_RSP_CODE_RST_CPLT 0x80
192 #define USBCSINK4_DEV_RSP_CODE_MSG_QUEUE_OVF 0x81
193 #define USBCSINK4_DEV_RSP_CODE_OVC 0x82
194 #define USBCSINK4_DEV_RSP_CODE_OVV 0x83
195 #define USBCSINK4_DEV_RSP_CODE_PORT_CONN 0x84
196 #define USBCSINK4_DEV_RSP_CODE_PORT_DISCONN 0x85
197 #define USBCSINK4_DEV_RSP_CODE_PD_NEG_CPLT 0x86
198 #define USBCSINK4_DEV_RSP_CODE_SWAP_CPLT 0x87
199 #define USBCSINK4_DEV_RSP_CODE_PS_RDY 0x8A
200 #define USBCSINK4_DEV_RSP_CODE_GOTOMIN 0x8B
201 #define USBCSINK4_DEV_RSP_CODE_ACCEPT 0x8C
202 #define USBCSINK4_DEV_RSP_CODE_REJECT 0x8D
203 #define USBCSINK4_DEV_RSP_CODE_WAIT 0x8E
204 #define USBCSINK4_DEV_RSP_CODE_HARD_RST 0x8F
205 #define USBCSINK4_DEV_RSP_CODE_VDM_REC 0x90
206 #define USBCSINK4_DEV_RSP_CODE_SRC_CAPB 0x91
207 #define USBCSINK4_DEV_RSP_CODE_SINK_CAPB 0x92
208 #define USBCSINK4_DEV_RSP_CODE_HARD_RST_SENT 0x9A
209 #define USBCSINK4_DEV_RSP_CODE_SOFT_RST_SENT 0x9B
210 #define USBCSINK4_DEV_RSP_CODE_SRC_DIS 0x9D
211 #define USBCSINK4_DEV_RSP_CODE_NO_VDM_RES_REC 0x9F
212 
217 #define USBCSINK4_SILICON_ID_BCR_LITE 0x20A2u
218 
224 #define USBCSINK4_DEVICE_ADDRESS 0x08
225  // usbcsink4_set
227 
242 #define USBCSINK4_MAP_MIKROBUS( cfg, mikrobus ) \
243  cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
244  cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
245  cfg.flt = MIKROBUS( mikrobus, MIKROBUS_AN ); \
246  cfg.int_pin = MIKROBUS( mikrobus, MIKROBUS_INT )
247  // usbcsink4_map // usbcsink4
250 
255 typedef struct
256 {
257  // Input pins
258  digital_in_t flt;
259  digital_in_t int_pin;
261  // Modules
262  i2c_master_t i2c;
264  // I2C slave address
265  uint8_t slave_address;
267 } usbcsink4_t;
268 
273 typedef struct
274 {
275  pin_name_t scl;
276  pin_name_t sda;
278  pin_name_t flt;
279  pin_name_t int_pin;
281  uint32_t i2c_speed;
282  uint8_t i2c_address;
285 
290 typedef struct
291 {
292  uint8_t port_par_cxn;
293  uint8_t cc_pol;
294  uint8_t att_dev_type;
295  uint8_t curr_lvl;
298 
303 typedef struct
304 {
305  uint8_t dev_att;
306  uint8_t dev_disc;
307  uint8_t pd_cn_comp;
308  uint8_t pwr_role;
309  uint8_t data_role;
310  uint8_t vconn;
311  uint8_t hw_rst_rec;
312  uint8_t hw_rst_sent;
313  uint8_t soft_rst_sent;
314  uint8_t cable_rst_sent;
315  uint8_t err_rcvy;
316  uint8_t vbus_err;
317  uint8_t vbus_vtg_ovr;
318  uint8_t vbus_curr_ovr;
321 
322 
327 typedef enum
328 {
330  USBCSINK4_ERROR = -1
331 
333 
350 
365 
379 
394 err_t usbcsink4_generic_write ( usbcsink4_t *ctx, uint16_t reg, uint8_t *data_in, uint8_t len );
395 
410 err_t usbcsink4_generic_read ( usbcsink4_t *ctx, uint16_t reg, uint8_t *data_out, uint8_t len );
411 
424 err_t usbcsink4_get_silicon_id ( usbcsink4_t *ctx, uint16_t *silicon_id );
425 
440 
453 err_t usbcsink4_get_bus_voltage ( usbcsink4_t *ctx, float *vbus_v );
454 
467 err_t usbcsink4_get_bus_current ( usbcsink4_t *ctx, float *vbus_c );
468 
484 
497 err_t usbcsink4_get_chrg_mode ( usbcsink4_t *ctx, uint8_t *chrg_mode );
498 
511 
524 
537 err_t usbcsink4_get_response ( usbcsink4_t *ctx, uint8_t *rsp_code );
538 
549 
560 
561 #ifdef __cplusplus
562 }
563 #endif
564 #endif // USBCSINK4_H
565  // usbcsink4
567 
568 
569 // ------------------------------------------------------------------------ END
usbcsink4_get_silicon_id
err_t usbcsink4_get_silicon_id(usbcsink4_t *ctx, uint16_t *silicon_id)
USB-C Sink 4 get Silicon ID function.
usbcsink4_event_status_t::hw_rst_rec
uint8_t hw_rst_rec
Definition: usbcsink4.h:311
usbcsink4_type_c_status_t::curr_lvl
uint8_t curr_lvl
Definition: usbcsink4.h:295
usbcsink4_event_status_t::vbus_vtg_ovr
uint8_t vbus_vtg_ovr
Definition: usbcsink4.h:317
USBCSINK4_OK
@ USBCSINK4_OK
Definition: usbcsink4.h:329
usbcsink4_event_status_t::vbus_err
uint8_t vbus_err
Definition: usbcsink4.h:316
usbcsink4_cfg_t
USB-C Sink 4 Click configuration object.
Definition: usbcsink4.h:274
usbcsink4_event_status_t::dev_disc
uint8_t dev_disc
Definition: usbcsink4.h:306
usbcsink4_event_status_t::vbus_curr_ovr
uint8_t vbus_curr_ovr
Definition: usbcsink4.h:318
usbcsink4_get_chrg_mode
err_t usbcsink4_get_chrg_mode(usbcsink4_t *ctx, uint8_t *chrg_mode)
USB-C Sink 4 get charging mode function.
usbcsink4_type_c_status_t::cc_pol
uint8_t cc_pol
Definition: usbcsink4.h:293
usbcsink4_get_bus_voltage
err_t usbcsink4_get_bus_voltage(usbcsink4_t *ctx, float *vbus_v)
USB-C Sink 4 get VBUS function.
usbcsink4_t::int_pin
digital_in_t int_pin
Definition: usbcsink4.h:259
usbcsink4_reset_device
err_t usbcsink4_reset_device(usbcsink4_t *ctx)
USB-C Sink 4 reset the device function.
usbcsink4_cfg_t::flt
pin_name_t flt
Definition: usbcsink4.h:278
usbcsink4_cfg_t::int_pin
pin_name_t int_pin
Definition: usbcsink4.h:279
usbcsink4_default_cfg
err_t usbcsink4_default_cfg(usbcsink4_t *ctx)
USB-C Sink 4 default configuration function.
usbcsink4_event_status_t::err_rcvy
uint8_t err_rcvy
Definition: usbcsink4.h:315
usbcsink4_get_interrupt
uint8_t usbcsink4_get_interrupt(usbcsink4_t *ctx)
USB-C Sink 4 get interrupt function.
usbcsink4_event_status_t::hw_rst_sent
uint8_t hw_rst_sent
Definition: usbcsink4.h:312
USBCSINK4_ERROR
@ USBCSINK4_ERROR
Definition: usbcsink4.h:330
usbcsink4_cfg_t::scl
pin_name_t scl
Definition: usbcsink4.h:275
usbcsink4_cfg_t::i2c_speed
uint32_t i2c_speed
Definition: usbcsink4.h:281
usbcsink4_event_status_t::pd_cn_comp
uint8_t pd_cn_comp
Definition: usbcsink4.h:307
usbcsink4_event_status_t
USB-C Sink 4 Click status of the event.
Definition: usbcsink4.h:304
usbcsink4_init
err_t usbcsink4_init(usbcsink4_t *ctx, usbcsink4_cfg_t *cfg)
USB-C Sink 4 initialization function.
usbcsink4_event_status_t::pwr_role
uint8_t pwr_role
Definition: usbcsink4.h:308
usbcsink4_event_status_t::vconn
uint8_t vconn
Definition: usbcsink4.h:310
usbcsink4_type_c_status_t
USB-C Sink 4 Click status of the Type-C port.
Definition: usbcsink4.h:291
usbcsink4_event_status_t::dev_att
uint8_t dev_att
Definition: usbcsink4.h:305
usbcsink4_event_status_t::cable_rst_sent
uint8_t cable_rst_sent
Definition: usbcsink4.h:314
usbcsink4_get_event_status
err_t usbcsink4_get_event_status(usbcsink4_t *ctx, usbcsink4_event_status_t *event_status)
USB-C Sink 4 get event status function.
usbcsink4_event_status_t::data_role
uint8_t data_role
Definition: usbcsink4.h:309
usbcsink4_cfg_t::i2c_address
uint8_t i2c_address
Definition: usbcsink4.h:282
usbcsink4_cfg_setup
void usbcsink4_cfg_setup(usbcsink4_cfg_t *cfg)
USB-C Sink 4 configuration object setup function.
usbcsink4_t::i2c
i2c_master_t i2c
Definition: usbcsink4.h:262
usbcsink4_get_fault_condition
uint8_t usbcsink4_get_fault_condition(usbcsink4_t *ctx)
USB-C Sink 4 get fault indicator function.
usbcsink4_event_status_t::soft_rst_sent
uint8_t soft_rst_sent
Definition: usbcsink4.h:313
usbcsink4_return_value_t
usbcsink4_return_value_t
USB-C Sink 4 Click return value data.
Definition: usbcsink4.h:328
usbcsink4_t
USB-C Sink 4 Click context object.
Definition: usbcsink4.h:256
usbcsink4_t::slave_address
uint8_t slave_address
Definition: usbcsink4.h:265
usbcsink4_generic_write
err_t usbcsink4_generic_write(usbcsink4_t *ctx, uint16_t reg, uint8_t *data_in, uint8_t len)
USB-C Sink 4 I2C writing function.
usbcsink4_generic_read
err_t usbcsink4_generic_read(usbcsink4_t *ctx, uint16_t reg, uint8_t *data_out, uint8_t len)
USB-C Sink 4 I2C reading function.
usbcsink4_get_bus_current
err_t usbcsink4_get_bus_current(usbcsink4_t *ctx, float *vbus_c)
USB-C Sink 4 get VBUS current function.
usbcsink4_get_response
err_t usbcsink4_get_response(usbcsink4_t *ctx, uint8_t *rsp_code)
USB-C Sink 4 get response function.
usbcsink4_t::flt
digital_in_t flt
Definition: usbcsink4.h:258
usbcsink4_type_c_status_t::att_dev_type
uint8_t att_dev_type
Definition: usbcsink4.h:294
usbcsink4_type_c_status_t::port_par_cxn
uint8_t port_par_cxn
Definition: usbcsink4.h:292
usbcsink4_get_type_c_status
err_t usbcsink4_get_type_c_status(usbcsink4_t *ctx, usbcsink4_type_c_status_t *type_c_status)
USB-C Sink 4 get Type-C status function.
usbcsink4_reset_i2c
err_t usbcsink4_reset_i2c(usbcsink4_t *ctx)
USB-C Sink 4 reset the I2C block function.
usbcsink4_cfg_t::sda
pin_name_t sda
Definition: usbcsink4.h:276