charger25  2.1.0.0
charger25.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 CHARGER25_H
29 #define CHARGER25_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 CHARGER25_REG_MINIMAL_SYSTEM_VOLTAGE 0x00
70 #define CHARGER25_REG_CHARGE_VOLTAGE_LIMIT 0x01
71 #define CHARGER25_REG_CHARGE_CURRENT_LIMIT 0x03
72 #define CHARGER25_REG_INPUT_VOLTAGE_LIMIT 0x05
73 #define CHARGER25_REG_INPUT_CURRENT_LIMIT 0x06
74 #define CHARGER25_REG_PRECHARGE_CONTROL 0x08
75 #define CHARGER25_REG_TERMINATION_CONTROL 0x09
76 #define CHARGER25_REG_RECHARGE_CONTROL 0x0A
77 #define CHARGER25_REG_VOTG_REGULATION 0x0B
78 #define CHARGER25_REG_IOTG_REGULATION 0x0D
79 #define CHARGER25_REG_TIMER_CONTROL 0x0E
80 #define CHARGER25_REG_CHARGER_CONTROL_0 0x0F
81 #define CHARGER25_REG_CHARGER_CONTROL_1 0x10
82 #define CHARGER25_REG_CHARGER_CONTROL_2 0x11
83 #define CHARGER25_REG_CHARGER_CONTROL_3 0x12
84 #define CHARGER25_REG_CHARGER_CONTROL_4 0x13
85 #define CHARGER25_REG_CHARGER_CONTROL_5 0x14
86 #define CHARGER25_REG_RESERVED 0x15
87 #define CHARGER25_REG_TEMPERATURE_CONTROL 0x16
88 #define CHARGER25_REG_NTC_CONTROL_0 0x17
89 #define CHARGER25_REG_NTC_CONTROL_1 0x18
90 #define CHARGER25_REG_ICO_CURRENT_LIMIT 0x19
91 #define CHARGER25_REG_CHARGER_STATUS_0 0x1B
92 #define CHARGER25_REG_CHARGER_STATUS_1 0x1C
93 #define CHARGER25_REG_CHARGER_STATUS_2 0x1D
94 #define CHARGER25_REG_CHARGER_STATUS_3 0x1E
95 #define CHARGER25_REG_CHARGER_STATUS_4 0x1F
96 #define CHARGER25_REG_FAULT_STATUS_0 0x20
97 #define CHARGER25_REG_FAULT_STATUS_1 0x21
98 #define CHARGER25_REG_CHARGER_FLAG_0 0x22
99 #define CHARGER25_REG_CHARGER_FLAG_1 0x23
100 #define CHARGER25_REG_CHARGER_FLAG_2 0x24
101 #define CHARGER25_REG_CHARGER_FLAG_3 0x25
102 #define CHARGER25_REG_FAULT_FLAG_0 0x26
103 #define CHARGER25_REG_FAULT_FLAG_1 0x27
104 #define CHARGER25_REG_CHARGER_MASK_0 0x28
105 #define CHARGER25_REG_CHARGER_MASK_1 0x29
106 #define CHARGER25_REG_CHARGER_MASK_2 0x2A
107 #define CHARGER25_REG_CHARGER_MASK_3 0x2B
108 #define CHARGER25_REG_FAULT_MASK_0 0x2C
109 #define CHARGER25_REG_FAULT_MASK_1 0x2D
110 #define CHARGER25_REG_ADC_CONTROL 0x2E
111 #define CHARGER25_REG_ADC_FUNCTION_DISABLE_0 0x2F
112 #define CHARGER25_REG_ADC_FUNCTION_DISABLE_1 0x30
113 #define CHARGER25_REG_IBUS_ADC 0x31
114 #define CHARGER25_REG_IBAT_ADC 0x33
115 #define CHARGER25_REG_VBUS_ADC 0x35
116 #define CHARGER25_REG_VAC1_ADC 0x37
117 #define CHARGER25_REG_VAC2_ADC 0x39
118 #define CHARGER25_REG_VBAT_ADC 0x3B
119 #define CHARGER25_REG_VSYS_ADC 0x3D
120 #define CHARGER25_REG_TS_ADC 0x3F
121 #define CHARGER25_REG_TDIE_ADC 0x41
122 #define CHARGER25_REG_D_P_ADC 0x43
123 #define CHARGER25_REG_D_M_ADC 0x45
124 #define CHARGER25_REG_DPDM_DRIVER 0x47
125 #define CHARGER25_REG_PART_INFORMATION 0x48
126  // charger25_reg
128 
143 #define CHARGER25_SOFT_RESET 0x40
144 
149 #define CHARGER25_VSYS_MIN_BIT_MASK 0x3F
150 #define CHARGER25_VSYS_MIN_STEP_SIZE 250
151 #define CHARGER25_VSYS_MIN_FIXED_OFFSET 2500
152 
157 #define CHARGER25_VTG_LIM_MSB_BIT_MASK 0x07
158 #define CHARGER25_VTG_CONV_V_MV 10
159 #define CHARGER25_VTG_CELL_COUNT_DIV 3
160 #define CHARGER25_VTG_CELL_SEL_1 1
161 #define CHARGER25_VTG_CELL_SEL_2 2
162 #define CHARGER25_VTG_CELL_SEL_3 3
163 #define CHARGER25_VTG_CELL_SEL_4 4
164 #define CHARGER25_VTG_CELL_COUNT_MIN 1
165 #define CHARGER25_VTG_CELL_COUNT_MAX 4
166 #define CHARGER25_VTG_CELL_COUNT_MUL 7
167 
172 #define CHARGER25_CURR_LIM_MSB_BIT_MASK 0x01
173 #define CHARGER25_CURR_CONV_A_MA 10
174 
179 #define CHARGER25_INPUT_VTG_CONV_V_MV 100
180 
185 #define CHARGER25_SET_ADC_FUNC_ENABLE 0x00
186 #define CHARGER25_SET_ADC_FUNC_DISABLE 0x01
187 #define CHARGER25_SET_ADC_CTRL_DISABLE 0x00
188 #define CHARGER25_SET_ADC_CTRL_ENABLE 0x01
189 
194 #define CHARGER25_SET_ADC_RATE_CONT_CNV 0x00
195 #define CHARGER25_SET_ADC_ONES_HOT_CNV 0x01
196 #define CHARGER25_SET_ADC_SAMPLE_15_BIT 0x00
197 #define CHARGER25_SET_ADC_SAMPLE_14_BIT 0x01
198 #define CHARGER25_SET_ADC_SAMPLE_13_BIT 0x02
199 #define CHARGER25_SET_ADC_SAMPLE_12_BIT 0x03
200 
205 #define CHARGER25_SET_ADC_AVG_SINGLE_VAL 0x00
206 #define CHARGER25_SET_ADC_AVG_RUN_AVG 0x01
207 #define CHARGER25_SET_ADC_AVG_INIT_EXI_VAL 0x00
208 #define CHARGER25_SET_ADC_AVG_INIT_ADC_CNV 0x01
209 
214 #define CHARGER25_CH_STAT_NOT_CHARGING 0x00
215 #define CHARGER25_CH_STAT_TRICKLE_CHARGE 0x01
216 #define CHARGER25_CH_STAT_PRE_CHARGE 0x02
217 #define CHARGER25_CH_STAT_FAST_CHARGE 0x03
218 #define CHARGER25_CH_STAT_TAPER_CHARGE 0x04
219 #define CHARGER25_CH_STAT_TIMER_ACT_CHARGING 0x06
220 #define CHARGER25_CH_STAT_CHARGE_TERMIN_DONE 0x07
221 
226 #define CHARGER25_STATE_PIN_QON_LOW 0x00
227 #define CHARGER25_STATE_PIN_QON_HIGH 0x01
228 
234 #define CHARGER25_DEVICE_ADDRESS 0x6B
235  // charger25_set
237 
252 #define CHARGER25_MAP_MIKROBUS( cfg, mikrobus ) \
253  cfg.scl = MIKROBUS( mikrobus, MIKROBUS_SCL ); \
254  cfg.sda = MIKROBUS( mikrobus, MIKROBUS_SDA ); \
255  cfg.qon = MIKROBUS( mikrobus, MIKROBUS_AN ); \
256  cfg.ce = MIKROBUS( mikrobus, MIKROBUS_PWM ); \
257  cfg.int_pin = MIKROBUS( mikrobus, MIKROBUS_INT )
258  // charger25_map // charger25
261 
266 typedef struct
267 {
268  // Output pins
269  digital_out_t qon;
270  digital_out_t ce;
272  // Input pins
273  digital_in_t int_pin;
275  // Modules
276  i2c_master_t i2c;
278  // I2C slave address
279  uint8_t slave_address;
281 } charger25_t;
282 
287 typedef struct
288 {
289  pin_name_t scl;
290  pin_name_t sda;
292  pin_name_t qon;
293  pin_name_t ce;
294  pin_name_t int_pin;
296  uint32_t i2c_speed;
297  uint8_t i2c_address;
300 
305 typedef struct
306 {
307  uint8_t iindpm_stat;
308  uint8_t vindpm_stat;
309  uint8_t wd_stat;
310  uint8_t poorsrc_stat;
311  uint8_t pg_stat;
315  uint8_t chg_stat;
316  uint8_t vbus_stat;
317  uint8_t bc1_2_done;
318  uint8_t ico_stat;
319  uint8_t treg_stat;
320  uint8_t dpdm_stat;
322  uint8_t acrb2_stat;
323  uint8_t acrb1_stat;
324  uint8_t adc_done_stat;
325  uint8_t vsys_stat;
326  uint8_t chg_tmr_stat;
327  uint8_t trichg_tmr_stat;
328  uint8_t prechg_tmr_stat;
330  uint8_t ts_cold_stat;
331  uint8_t ts_cool_stat;
332  uint8_t ts_warm_stat;
333  uint8_t ts_hot_stat;
336 
341 typedef struct
342 {
343  uint8_t adc_en;
344  uint8_t adc_rate;
345  uint8_t adc_sample;
346  uint8_t adc_avg;
347  uint8_t adc_avg_init;
350 
355 typedef struct
356 {
357  uint8_t ibus_adc_dis;
358  uint8_t ibat_adc_dis;
359  uint8_t vbus_adc_dis;
360  uint8_t vbat_adc_dis;
361  uint8_t vsys_adc_dis;
362  uint8_t ts_adc_dis;
363  uint8_t tdie_adc_dis;
364  uint8_t dp_adc_dis;
365  uint8_t dm_adc_dis;
366  uint8_t vac2_adc_dis;
367  uint8_t vac1_adc_dis;
370 
375 typedef enum
376 {
378  CHARGER25_ERROR = -1
379 
381 
382 
383 
400 
415 
429 
444 err_t charger25_generic_write ( charger25_t *ctx, uint8_t reg, uint8_t *data_in, uint8_t len );
445 
460 err_t charger25_generic_read ( charger25_t *ctx, uint8_t reg, uint8_t *data_out, uint8_t len );
461 
475 void charger25_set_qon_pin ( charger25_t *ctx, uint8_t state );
476 
489 
502 
516 
531 
546 err_t charger25_get_vbat ( charger25_t *ctx, uint16_t *vbat );
547 
562 err_t charger25_get_vsys_min ( charger25_t *ctx, uint16_t *vsys_min );
563 
580 
597 
612 err_t charger25_get_vbat_lim ( charger25_t *ctx, uint16_t *vtg_lim );
613 
632 err_t charger25_set_vbat_lim ( charger25_t *ctx, uint16_t vtg_lim );
633 
652 err_t charger25_get_cell_count ( charger25_t *ctx, uint8_t *cell_count );
653 
672 err_t charger25_set_cell_count ( charger25_t *ctx, uint8_t cell_count );
673 
688 err_t charger25_get_current_limit ( charger25_t *ctx, uint16_t *current_lim );
689 
704 err_t charger25_set_current_limit ( charger25_t *ctx, uint16_t current_lim );
705 
720 err_t charger25_get_input_vtg_limit ( charger25_t *ctx, uint16_t *input_vtg_limit );
721 
736 err_t charger25_set_input_vtg_limit ( charger25_t *ctx, uint16_t input_vtg_limit );
737 
752 err_t charger25_get_input_curr_limit ( charger25_t *ctx, uint16_t *input_curr_limit );
753 
768 err_t charger25_set_input_curr_limit ( charger25_t *ctx, uint16_t input_curr_limit );
769 
786 
787 #ifdef __cplusplus
788 }
789 #endif
790 #endif // CHARGER25_H
791  // charger25
793 
794 // ------------------------------------------------------------------------ END
charger25_adc_func_t::dp_adc_dis
uint8_t dp_adc_dis
Definition: charger25.h:364
charger25_status_t::chg_tmr_stat
uint8_t chg_tmr_stat
Definition: charger25.h:326
charger25_cfg_t
Charger 25 Click configuration object.
Definition: charger25.h:288
charger25_adc_func_t::ibus_adc_dis
uint8_t ibus_adc_dis
Definition: charger25.h:357
charger25_cfg_t::scl
pin_name_t scl
Definition: charger25.h:289
charger25_adc_ctrl_t::adc_avg_init
uint8_t adc_avg_init
Definition: charger25.h:347
charger25_status_t::ac1_present_stat
uint8_t ac1_present_stat
Definition: charger25.h:313
charger25_set_adc_control
err_t charger25_set_adc_control(charger25_t *ctx, charger25_adc_ctrl_t adc_ctrl)
Charger 25 set ADC control function.
charger25_set_adc_function
err_t charger25_set_adc_function(charger25_t *ctx, charger25_adc_func_t adc_func)
Charger 25 set ADC function function.
charger25_status_t::acrb2_stat
uint8_t acrb2_stat
Definition: charger25.h:322
charger25_generic_write
err_t charger25_generic_write(charger25_t *ctx, uint8_t reg, uint8_t *data_in, uint8_t len)
Charger 25 I2C writing function.
charger25_status_t::ts_hot_stat
uint8_t ts_hot_stat
Definition: charger25.h:333
charger25_status_t::poorsrc_stat
uint8_t poorsrc_stat
Definition: charger25.h:310
charger25_t
Charger 25 Click context object.
Definition: charger25.h:267
charger25_status_t::ts_cold_stat
uint8_t ts_cold_stat
Definition: charger25.h:330
charger25_cfg_t::qon
pin_name_t qon
Definition: charger25.h:292
charger25_disable
void charger25_disable(charger25_t *ctx)
Charger 25 charge disable function.
charger25_set_input_curr_limit
err_t charger25_set_input_curr_limit(charger25_t *ctx, uint16_t input_curr_limit)
Charger 25 set input current limit function.
charger25_get_input_curr_limit
err_t charger25_get_input_curr_limit(charger25_t *ctx, uint16_t *input_curr_limit)
Charger 25 get input current limit function.
charger25_sw_reset
err_t charger25_sw_reset(charger25_t *ctx)
Charger 25 software reset function.
charger25_status_t::vbus_stat
uint8_t vbus_stat
Definition: charger25.h:316
charger25_cfg_t::i2c_address
uint8_t i2c_address
Definition: charger25.h:297
charger25_t::int_pin
digital_in_t int_pin
Definition: charger25.h:273
charger25_cfg_t::ce
pin_name_t ce
Definition: charger25.h:293
charger25_status_t::ico_stat
uint8_t ico_stat
Definition: charger25.h:318
charger25_get_interrupt
uint8_t charger25_get_interrupt(charger25_t *ctx)
Charger 25 get interrupt function.
charger25_status_t::iindpm_stat
uint8_t iindpm_stat
Definition: charger25.h:307
charger25_adc_func_t
Charger 25 Click ADC function object.
Definition: charger25.h:356
charger25_t::i2c
i2c_master_t i2c
Definition: charger25.h:276
charger25_get_vbat
err_t charger25_get_vbat(charger25_t *ctx, uint16_t *vbat)
Charger 25 get VBAT function.
charger25_adc_func_t::vsys_adc_dis
uint8_t vsys_adc_dis
Definition: charger25.h:361
charger25_status_t::dpdm_stat
uint8_t dpdm_stat
Definition: charger25.h:320
charger25_return_value_t
charger25_return_value_t
Charger 25 Click return value data.
Definition: charger25.h:376
charger25_set_cell_count
err_t charger25_set_cell_count(charger25_t *ctx, uint8_t cell_count)
Charger 25 set battery cell count function.
charger25_status_t::vbus_present_stat
uint8_t vbus_present_stat
Definition: charger25.h:314
charger25_set_input_vtg_limit
err_t charger25_set_input_vtg_limit(charger25_t *ctx, uint16_t input_vtg_limit)
Charger 25 set input voltage limit function.
charger25_enable
void charger25_enable(charger25_t *ctx)
Charger 25 charge enable function.
charger25_get_status
err_t charger25_get_status(charger25_t *ctx, charger25_status_t *status)
Charger 25 get charging status function.
charger25_status_t::bc1_2_done
uint8_t bc1_2_done
Definition: charger25.h:317
charger25_adc_func_t::vbat_adc_dis
uint8_t vbat_adc_dis
Definition: charger25.h:360
charger25_adc_ctrl_t
Charger 25 Click ADC control object.
Definition: charger25.h:342
charger25_status_t::pg_stat
uint8_t pg_stat
Definition: charger25.h:311
charger25_adc_func_t::ts_adc_dis
uint8_t ts_adc_dis
Definition: charger25.h:362
charger25_set_qon_pin
void charger25_set_qon_pin(charger25_t *ctx, uint8_t state)
Charger 25 set QON pin state function.
charger25_cfg_t::i2c_speed
uint32_t i2c_speed
Definition: charger25.h:296
charger25_default_cfg
err_t charger25_default_cfg(charger25_t *ctx)
Charger 25 default configuration function.
charger25_t::ce
digital_out_t ce
Definition: charger25.h:270
charger25_adc_func_t::tdie_adc_dis
uint8_t tdie_adc_dis
Definition: charger25.h:363
charger25_adc_func_t::vac1_adc_dis
uint8_t vac1_adc_dis
Definition: charger25.h:367
charger25_adc_func_t::ibat_adc_dis
uint8_t ibat_adc_dis
Definition: charger25.h:358
charger25_t::slave_address
uint8_t slave_address
Definition: charger25.h:279
charger25_adc_ctrl_t::adc_rate
uint8_t adc_rate
Definition: charger25.h:344
charger25_status_t
Charger 25 Click status object.
Definition: charger25.h:306
charger25_status_t::chg_stat
uint8_t chg_stat
Definition: charger25.h:315
charger25_get_cell_count
err_t charger25_get_cell_count(charger25_t *ctx, uint8_t *cell_count)
Charger 25 get battery cell count function.
charger25_status_t::vindpm_stat
uint8_t vindpm_stat
Definition: charger25.h:308
charger25_get_vsys_min
err_t charger25_get_vsys_min(charger25_t *ctx, uint16_t *vsys_min)
Charger 25 get VSYS function.
charger25_init
err_t charger25_init(charger25_t *ctx, charger25_cfg_t *cfg)
Charger 25 initialization function.
charger25_adc_ctrl_t::adc_avg
uint8_t adc_avg
Definition: charger25.h:346
charger25_status_t::prechg_tmr_stat
uint8_t prechg_tmr_stat
Definition: charger25.h:328
charger25_get_input_vtg_limit
err_t charger25_get_input_vtg_limit(charger25_t *ctx, uint16_t *input_vtg_limit)
Charger 25 get input voltage limit function.
charger25_generic_read
err_t charger25_generic_read(charger25_t *ctx, uint8_t reg, uint8_t *data_out, uint8_t len)
Charger 25 I2C reading function.
charger25_cfg_t::int_pin
pin_name_t int_pin
Definition: charger25.h:294
charger25_status_t::adc_done_stat
uint8_t adc_done_stat
Definition: charger25.h:324
charger25_cfg_setup
void charger25_cfg_setup(charger25_cfg_t *cfg)
Charger 25 configuration object setup function.
charger25_status_t::wd_stat
uint8_t wd_stat
Definition: charger25.h:309
charger25_status_t::vsys_stat
uint8_t vsys_stat
Definition: charger25.h:325
CHARGER25_OK
@ CHARGER25_OK
Definition: charger25.h:377
charger25_status_t::ac2_present_stat
uint8_t ac2_present_stat
Definition: charger25.h:312
charger25_status_t::ts_cool_stat
uint8_t ts_cool_stat
Definition: charger25.h:331
charger25_status_t::vbat_present_stat
uint8_t vbat_present_stat
Definition: charger25.h:321
CHARGER25_ERROR
@ CHARGER25_ERROR
Definition: charger25.h:378
charger25_status_t::trichg_tmr_stat
uint8_t trichg_tmr_stat
Definition: charger25.h:327
charger25_status_t::ts_warm_stat
uint8_t ts_warm_stat
Definition: charger25.h:332
charger25_adc_func_t::vac2_adc_dis
uint8_t vac2_adc_dis
Definition: charger25.h:366
charger25_status_t::acrb1_stat
uint8_t acrb1_stat
Definition: charger25.h:323
charger25_set_vbat_lim
err_t charger25_set_vbat_lim(charger25_t *ctx, uint16_t vtg_lim)
Charger 25 set battery voltage limit function.
charger25_cfg_t::sda
pin_name_t sda
Definition: charger25.h:290
charger25_get_vbat_lim
err_t charger25_get_vbat_lim(charger25_t *ctx, uint16_t *vtg_lim)
Charger 25 get battery voltage limit function.
charger25_status_t::vbatotg_low_stat
uint8_t vbatotg_low_stat
Definition: charger25.h:329
charger25_adc_func_t::dm_adc_dis
uint8_t dm_adc_dis
Definition: charger25.h:365
charger25_adc_ctrl_t::adc_sample
uint8_t adc_sample
Definition: charger25.h:345
charger25_adc_ctrl_t::adc_en
uint8_t adc_en
Definition: charger25.h:343
charger25_adc_func_t::vbus_adc_dis
uint8_t vbus_adc_dis
Definition: charger25.h:359
charger25_set_current_limit
err_t charger25_set_current_limit(charger25_t *ctx, uint16_t current_lim)
Charger 25 set charge current limit function.
charger25_t::qon
digital_out_t qon
Definition: charger25.h:269
charger25_status_t::treg_stat
uint8_t treg_stat
Definition: charger25.h:319
charger25_get_current_limit
err_t charger25_get_current_limit(charger25_t *ctx, uint16_t *current_lim)
Charger 25 get charge current limit function.