main_ubi_sdk v 0.1.3
This is UBI4 documentation
BQ25883.h
Go to the documentation of this file.
1/*
2 ******************************************************************************
3 * @file BQ25883.h
4 * @author A.Alborov
5 ******************************************************************************
6*/
7
8#ifndef SRC_BQ25883_H_
9#define SRC_BQ25883_H_
10
11#include "bq2588x_reg.h"
12#include "stdint.h"
13#include "stdbool.h"
15
16#ifdef ENABLE_BQ25883
17
18#define BQ25883_WRITE_ADDRESS 0xD7
19#define BQ25883_READ_ADDRESS 0xD7
20
21
22
23typedef BQ25883_I2C_STATUS_ENUM (*write_i2c_bq25883)(uint8_t Address, uint8_t Register, uint8_t* Data, uint8_t size);
24typedef BQ25883_I2C_STATUS_ENUM (*read_i2c_bq25883)(uint8_t Address, uint8_t Register, uint8_t* Data, uint8_t size);
25
26
27
28typedef struct
29{
30 write_i2c_bq25883 write_func;
31 read_i2c_bq25883 read_func;
32}BQ25883_init_struct;
33
34
35typedef struct
36{
37 uint8_t VINDPM: 5;
38 uint8_t PFM_OOA_DIS: 1;
39 uint8_t EN_BAT_DISCHG: 1;
40 uint8_t EN_VINDPM_RST: 1;
41 uint16_t MinVoltage_mV;
42}__attribute__((__packed__)) InputVoltageLimitRegisterMask;
43
44typedef struct
45{
46 uint8_t IINDPM: 5;
47 uint8_t EN_ICO: 1;
48 uint8_t FORCE_INDET: 1;
49 uint8_t FORCE_ICO: 1;
50}__attribute__((__packed__)) InputCurrentLimitRegisterMask;
51
52
53typedef enum
54{
55 TREG_60C = 0x00,
56 TREG_80C = 0x01,
57 TREG_100C = 0x02,
58 TREG_120C = 0x03
59}ThermalRegulationThresholdEnum;
60
61typedef enum
62{
63 VRECHG_100_MV = 0x00,
64 VRECHG_200_MV = 0x01,
65 VRECHG_300_MV = 0x02,
66 VRECHG_400_MV = 0x03
67}BatteryRechargeThresholdOffsetEnum;
68
69typedef struct
70{
71 uint8_t VRECHG: 2;
72 uint8_t BATLOWV: 1;
73 uint8_t EN_CHG: 1;
74 uint8_t TREG: 2;
75 uint8_t AUTO_INDET_EN: 1;
76 uint8_t EN_OTG: 1;
77}__attribute__((__packed__)) ChargerControl2RegisterMask;
78
79
80typedef enum
81{
82 CONTINUOUS_CONVERSION = 0x00,
83 ONE_SHOT_CONVERSION = 0x01
84}ADCModeEnum;
85
86typedef enum
87{
88 RESOLUTION_15_BIT = 0x00,
89 RESOLUTION_14_BIT = 0x01,
90 RESOLUTION_13_BIT = 0x02,
91 RESOLUTION_12_BIT = 0x03
92}ADCResolutionEnum;
93
94typedef struct
95{
96 uint8_t RESERVED: 4;
97 uint8_t ADC_SAMPLE: 2;
98 uint8_t ADC_RATE: 1;
99 uint8_t ADC_EN: 1;
100}__attribute__((__packed__)) ADCControlRegisterMask;
101
102typedef struct
103{
104 uint8_t TDIE_ADC_DIS: 1;
105 uint8_t RESERVED: 1;
106 uint8_t TS_ADC_DIS: 1;
107 uint8_t VSYS_ADC_DIS: 1;
108 uint8_t VBAT_ADC_DIS: 1;
109 uint8_t VBUS_ADC_DIS: 1;
110 uint8_t ICHG_ADC_DIS: 1;
111 uint8_t IBUS_ADC_DIS: 1;
112}__attribute__((__packed__)) ADCFunctionDisableRegisterMask;
113
114
115typedef enum
116{
117 CSE_NOT_CHARGING = 0x00,
118 CSE_TRICKLE_CHARGE = 0x01,
119 CSE_PRE_CHARGE = 0x02,
120 CSE_FAST_CHARGE = 0x03,
121 CSE_TAPER_CHARGE = 0x04,
122 CSE_TOP_OFF_TIMER_CHARGING = 0x05,
123 CSE_CHARGE_TERMINATION_DONE = 0x06
124}ChargeStatusEnum;
125
126typedef struct
127{
128 uint8_t CHRG_STAT: 3;
129 uint8_t WD_STAT: 1;
130 uint8_t TREG_STAT: 1;
131 uint8_t VINDPM_STAT: 1;
132 uint8_t IINDPM_STAT: 1;
133 uint8_t RESERVED: 1;
134}__attribute__((__packed__)) ChargerStatus1RegisterMask;
135
136typedef enum
137{
138 VDSE_NO_INPUT = 0x00,
139 VDSE_USB_HOST_SDP = 0x01,
140 VDSE_USB_CDP = 0x02,
141 VDSE_ADAPTER = 0x03,
142 VDSE_POORSRC = 0x04,
143 VDSE_UNKNOWN_ADAPTER = 0x05,
144 VDSE_NON_STANDARD_ADAPTER = 0x06,
145 VDSE_OTG = 0x07
146}VBUSDetectionStatusEnum;
147
148typedef struct
149{
150 uint8_t VSYS_STAT: 1;
151 uint8_t ICO_STAT: 2;
152 uint8_t RESERVED: 1;
153 uint8_t VBUS_STAT: 3;
154 uint8_t PG_STAT: 1;
155}__attribute__((__packed__)) ChargerStatus2RegisterMask;
156
157
158typedef enum
159{
160 NTCSE_NORMAL = 0x00,
161 NTCSE_TS_WARM = 0x02,
162 NTCSE_TS_COOL = 0x03,
163 NTCSE_TS_COLD = 0x05,
164 NTCSE_TS_HOT = 0x06
165}NTCStatusEnum;
166
167typedef struct
168{
169 uint8_t TS_STAT: 3;
170 uint8_t RESERVED: 5;
171}__attribute__((__packed__)) NTCStatusRegisterMask;
172
173typedef struct
174{
175 uint8_t RESERVED: 4;
176 uint8_t TMR_STAT: 1;
177 uint8_t BATOVP_STAT: 1;
178 uint8_t TSHUT_STAT: 1;
179 uint8_t VBUS_OVP_STAT: 1;
180}__attribute__((__packed__)) FAULTStatusRegisterMask;
181
182typedef struct
183{
184 ChargerStatus1RegisterMask Status1;
185 ChargerStatus2RegisterMask Status2;
186 NTCStatusRegisterMask NTC_Status;
187 FAULTStatusRegisterMask Fault_Status;
188}__attribute__((__packed__)) ChargerStatusMask;
189
190
191typedef struct
192{
193 uint8_t RESERVED: 4;
194 uint8_t TMR_STAT: 1;
195 uint8_t BATOVP_STAT: 1;
196 uint8_t TSHUT_STAT: 1;
197 uint8_t VBUS_OVP_STAT: 1;
198}__attribute__((__packed__)) FAULT_StatusRegisterMask;
199
200typedef struct
201{
202 uint8_t ICHG: 6;
203 uint8_t EN_ILIM: 1;
204 uint8_t EN_HIZ: 1;
205 uint16_t ChargeCurrent_mA;
206}__attribute__((__packed__)) ChargerCurrentLimitRegisterMask;
207
208typedef struct
209{
210 uint8_t ICO_ILIM: 4;
211 uint8_t RESERVED: 4;
212 uint16_t CurrentLimit_mA;
213}__attribute__((__packed__)) ICO_CurrentLimitRegisterMask;
214
215
216void BQ25883_init(BQ25883_init_struct* init_struct);
217
218BQ25883_I2C_STATUS_ENUM BQ25883_GetRegister(uint8_t reg_num, uint8_t* value);
219BQ25883_I2C_STATUS_ENUM BQ25883_SetRegister(uint8_t reg_num, uint8_t* value);
220
221BQ25883_I2C_STATUS_ENUM BQ25883_Reset();
222
223BQ25883_I2C_STATUS_ENUM BQ25883_GetPartInfo(uint8_t* value);
224
225BQ25883_I2C_STATUS_ENUM BQ25883_SetMaxBatteryChargeVoltage(uint16_t value_mV);
226BQ25883_I2C_STATUS_ENUM BQ25883_GetMaxBatteryChargeVoltage(uint16_t* value);
227
228BQ25883_I2C_STATUS_ENUM BQ25883_SetBatteryChargeCurrent(bool updateFullRegistr, ChargerCurrentLimitRegisterMask RegField, uint16_t value_mA);
229BQ25883_I2C_STATUS_ENUM BQ25883_GetBatteryChargeCurrent(ChargerCurrentLimitRegisterMask* value);
230
231BQ25883_I2C_STATUS_ENUM BQ25883_SetMinInputVoltage(bool updateFullRegistr, InputVoltageLimitRegisterMask RegField, uint16_t value_mV);
232BQ25883_I2C_STATUS_ENUM BQ25883_GetMinInputVoltage(InputVoltageLimitRegisterMask* value);
233
234BQ25883_I2C_STATUS_ENUM BQ25883_SetMinInputCurrent(bool updateFullRegistr, InputCurrentLimitRegisterMask RegField, uint16_t value_mA);
235
236BQ25883_I2C_STATUS_ENUM BQ25883_Set2ControlRegister(ChargerControl2RegisterMask RegField);
237BQ25883_I2C_STATUS_ENUM BQ25883_Get2ControlRegister(ChargerControl2RegisterMask* RegField);
238
239BQ25883_I2C_STATUS_ENUM BQ25883_SetADCControlRegister(ADCControlRegisterMask RegField);
240BQ25883_I2C_STATUS_ENUM BQ25883_GetADCControlRegister(ADCControlRegisterMask* value);
241
242BQ25883_I2C_STATUS_ENUM BQ25883_SetADCFunctionDisableRegister(ADCFunctionDisableRegisterMask RegField);
243
244BQ25883_I2C_STATUS_ENUM BQ25883_GetChargeStatus1Register(ChargerStatus1RegisterMask* value);
245
246BQ25883_I2C_STATUS_ENUM BQ25883_GetChargerStatus(ChargerStatusMask* status);
247BQ25883_I2C_STATUS_ENUM BQ25883_GetChargerCurrentLimitICO(ICO_CurrentLimitRegisterMask* value);
248
249
250BQ25883_I2C_STATUS_ENUM BQ25883_GetIBUS(int16_t* value);
251BQ25883_I2C_STATUS_ENUM BQ25883_GetICHG(int16_t* value);
252BQ25883_I2C_STATUS_ENUM BQ25883_GetVBUS(int16_t* value);
253BQ25883_I2C_STATUS_ENUM BQ25883_GetVBAT(int16_t* value);
254BQ25883_I2C_STATUS_ENUM BQ25883_GetVSYS(int16_t* value);
255BQ25883_I2C_STATUS_ENUM BQ25883_GetTS(int16_t* value);
256BQ25883_I2C_STATUS_ENUM BQ25883_GetTDIE(int16_t* value);
257
258BQ25883_I2C_STATUS_ENUM BQ25883_GetADC(uint8_t Reg, int16_t* value);
259
260#endif /* ENABLE_BQ25883 */
261
262#endif /* SRC_BQ25883_H_ */