TI BQ27220 I2C based, battery State of Charge and Coulomb Counter

Fork of bq27210 by Kevin Braun

Committer:
loopsva
Date:
Mon Jul 31 19:12:28 2017 +0000
Revision:
3:1b12fa9dc673
Parent:
2:d52fb7ef7429
Working code.  On hold for now.  Moving to BQ34Z100-G1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
loopsva 2:d52fb7ef7429 1 #ifndef MBED_BQ27220
loopsva 2:d52fb7ef7429 2 #define MBED_BQ27220
loopsva 0:96d5698a376f 3
loopsva 2:d52fb7ef7429 4 #define BQ_SHUNT_RESISTOR 10 // 0.010 ohms * 1000
loopsva 0:96d5698a376f 5
loopsva 0:96d5698a376f 6 // Set data into "addr"
loopsva 2:d52fb7ef7429 7 #define BQ27220_ADDR 0xAA
loopsva 0:96d5698a376f 8
loopsva 2:d52fb7ef7429 9 // Standard Commands
loopsva 2:d52fb7ef7429 10 #define BQ_CNTL 0x00
loopsva 2:d52fb7ef7429 11 #define BQ_AR 0x02
loopsva 0:96d5698a376f 12 #define BQ_ARTTE 0x04
loopsva 0:96d5698a376f 13 #define BQ_TEMP 0x06
loopsva 0:96d5698a376f 14 #define BQ_VOLT 0x08
loopsva 0:96d5698a376f 15 #define BQ_FLAGS 0x0A
loopsva 2:d52fb7ef7429 16 #define BQ_CURRENT 0x0C
loopsva 2:d52fb7ef7429 17
loopsva 2:d52fb7ef7429 18 #define BQ_RM 0x10
loopsva 2:d52fb7ef7429 19 #define BQ_FCC 0x12
loopsva 0:96d5698a376f 20 #define BQ_AI 0x14
loopsva 0:96d5698a376f 21 #define BQ_TTE 0x16
loopsva 0:96d5698a376f 22 #define BQ_TTF 0x18
loopsva 0:96d5698a376f 23 #define BQ_SI 0x1A
loopsva 0:96d5698a376f 24 #define BQ_STTE 0x1C
loopsva 2:d52fb7ef7429 25 #define BQ_MLI 0x1E
loopsva 2:d52fb7ef7429 26
loopsva 2:d52fb7ef7429 27 #define BQ_MLTTE 0x20
loopsva 2:d52fb7ef7429 28 #define BQ_RCC 0x22
loopsva 2:d52fb7ef7429 29 #define BQ_AP 0x24
loopsva 2:d52fb7ef7429 30
loopsva 2:d52fb7ef7429 31 #define BQ_INTTEMP 0x28
loopsva 2:d52fb7ef7429 32 #define BQ_CYC 0x2A
loopsva 2:d52fb7ef7429 33 #define BQ_SOC 0x2C
loopsva 2:d52fb7ef7429 34 #define BQ_SOH 0x2E
loopsva 2:d52fb7ef7429 35
loopsva 2:d52fb7ef7429 36 #define BQ_CV 0x30
loopsva 2:d52fb7ef7429 37 #define BQ_CC 0x32
loopsva 2:d52fb7ef7429 38 #define BQ_BTPD 0x34
loopsva 2:d52fb7ef7429 39 #define BQ_BTPC 0x36
loopsva 2:d52fb7ef7429 40
loopsva 2:d52fb7ef7429 41 #define BQ_OS 0x3A
loopsva 2:d52fb7ef7429 42 #define BQ_DC 0x3C
loopsva 3:1b12fa9dc673 43 #define BQ_SUB 0x3E
loopsva 0:96d5698a376f 44
loopsva 2:d52fb7ef7429 45 #define BQ_MACDATA 0x40
loopsva 2:d52fb7ef7429 46
loopsva 2:d52fb7ef7429 47 #define BQ_MACDATASUM 0x60
loopsva 2:d52fb7ef7429 48 #define BQ_MACDATALEN 0x61
loopsva 2:d52fb7ef7429 49
loopsva 2:d52fb7ef7429 50 #define BQ_ANACNT 0x79
loopsva 2:d52fb7ef7429 51 #define BQ_RAWC 0x7A
loopsva 2:d52fb7ef7429 52 #define BQ_RAWV 0x7C
loopsva 2:d52fb7ef7429 53 #define BQ_RAWT 0x7E
loopsva 0:96d5698a376f 54
loopsva 2:d52fb7ef7429 55 // Sub Commands
loopsva 2:d52fb7ef7429 56 #define BQ_CNTL_STAT 0x0000
loopsva 2:d52fb7ef7429 57 #define BQ_DEVICE_NUMBER 0x0001
loopsva 2:d52fb7ef7429 58 #define BQ_FW_VERSION 0x0002
loopsva 3:1b12fa9dc673 59 #define BQ_HW_VERSION 0x0003
loopsva 2:d52fb7ef7429 60
loopsva 2:d52fb7ef7429 61 #define BQ_BOARD_OFFSET 0x0009
loopsva 2:d52fb7ef7429 62 #define BQ_CC_OFFSET 0x000A
loopsva 2:d52fb7ef7429 63 #define BQ_CC_OFFSET_SAVE 0x000B
loopsva 2:d52fb7ef7429 64 #define BQ_OCV_CMD 0x000C
loopsva 2:d52fb7ef7429 65 #define BQ_BAT_INSERT 0x000D
loopsva 2:d52fb7ef7429 66 #define BQ_BAT_REMOVE 0x000E
loopsva 0:96d5698a376f 67
loopsva 2:d52fb7ef7429 68 #define BQ_SET_SNOOZE 0x0013
loopsva 2:d52fb7ef7429 69 #define BQ_CLEAR_SNOOZE 0x0014
loopsva 2:d52fb7ef7429 70 #define BQ_SET_PROFILE_1 0x0015
loopsva 2:d52fb7ef7429 71 #define BQ_SET_PROFILE_2 0x0016
loopsva 2:d52fb7ef7429 72 #define BQ_SET_PROFILE_3 0x0017
loopsva 2:d52fb7ef7429 73 #define BQ_SET_PROFILE_4 0x0018
loopsva 2:d52fb7ef7429 74 #define BQ_SET_PROFILE_5 0x0019
loopsva 2:d52fb7ef7429 75 #define BQ_SET_PROFILE_6 0x001A
loopsva 2:d52fb7ef7429 76
loopsva 2:d52fb7ef7429 77 #define BQ_CAL_TOGGLE 0x002D
loopsva 0:96d5698a376f 78
loopsva 2:d52fb7ef7429 79 #define BQ_SET_SEALED 0x0030
loopsva 2:d52fb7ef7429 80
loopsva 3:1b12fa9dc673 81 #define BQ_RESET 0x0041
loopsva 3:1b12fa9dc673 82
loopsva 3:1b12fa9dc673 83 #define BQ_OP_STATUS 0x0054
loopsva 3:1b12fa9dc673 84 #define BQ_GAUGE_STATUS 0x0056
loopsva 0:96d5698a376f 85
loopsva 2:d52fb7ef7429 86 #define BQ_EXIT_CAL 0x0080
loopsva 2:d52fb7ef7429 87 #define BQ_ENTER_CAL 0x0081
loopsva 2:d52fb7ef7429 88
loopsva 2:d52fb7ef7429 89 #define BQ_ENTER_CFG_UPDATE 0x0090
loopsva 2:d52fb7ef7429 90 #define BQ_EXIT_CFG_UPDATE_REINIT 0x0091
loopsva 2:d52fb7ef7429 91 #define BQ_EXIT_CFG_UPDATE 0x0092
loopsva 0:96d5698a376f 92
loopsva 2:d52fb7ef7429 93 #define BQ_RETURN_TO_ROM 0x0F00
loopsva 0:96d5698a376f 94
loopsva 3:1b12fa9dc673 95 // Configuration parameters
loopsva 3:1b12fa9dc673 96 #define BQ_CONFIG_CC_GAIN 0x9184 //float
loopsva 3:1b12fa9dc673 97
loopsva 3:1b12fa9dc673 98 #define BQ_CONFIG_CHG_INH_LO 0x91f5 //int16_t
loopsva 3:1b12fa9dc673 99 #define BQ_CONFIG_CHG_INH_HI 0x91f7 //int16_t
loopsva 3:1b12fa9dc673 100 #define BQ_CONFIG_CHG_INH_HYST 0x91f9 //int16_t
loopsva 3:1b12fa9dc673 101 #define BQ_CONFIG_CHG_CURR 0x91fb //int16_t
loopsva 3:1b12fa9dc673 102 #define BQ_CONFIG_CHG_VOLT 0x91fd //int16_t
loopsva 3:1b12fa9dc673 103
loopsva 3:1b12fa9dc673 104 #define BQ_CONFIG_TAPER_CURR 0x9201 //int16_t
loopsva 3:1b12fa9dc673 105 #define BQ_CONFIG_OP_CONFIG_A 0x9206 //uint16_t
loopsva 3:1b12fa9dc673 106 #define BQ_CONFIG_OP_CONFIG_B 0x9208 //uint16_t
loopsva 3:1b12fa9dc673 107 #define BQ_CONFIG_SOC_DELTA 0x920b //uint8_t
loopsva 3:1b12fa9dc673 108 #define BQ_CONFIG_CLK_CTRL 0x920c //uint8_t
loopsva 3:1b12fa9dc673 109 #define BQ_CONFIG_IO_CONFIG 0x920d //uint8_t
loopsva 3:1b12fa9dc673 110 #define BQ_CONFIG_INIT_DIS_SET 0x920e //int16_t
loopsva 3:1b12fa9dc673 111 #define BQ_CONFIG_INIT_CHG_SET 0x9210 //int16_t
loopsva 3:1b12fa9dc673 112 #define BQ_CONFIG_DEVICE_TYPE 0x9212 //uint16_t
loopsva 3:1b12fa9dc673 113
loopsva 3:1b12fa9dc673 114 #define BQ_CONFIG_SLEEP_CURR 0x9217 //int16_t
loopsva 3:1b12fa9dc673 115 #define BQ_CONFIG_BUS_LO_TIME 0x9219 //uint8_t
loopsva 3:1b12fa9dc673 116 #define BQ_CONFIG_OC_INH_T_LO 0x921a //int16_t
loopsva 3:1b12fa9dc673 117 #define BQ_CONFIG_OC_INH_T_HI 0x921c //int16_t
loopsva 3:1b12fa9dc673 118 #define BQ_CONFIG_SLEEP_V_TIME 0x921e //uint8_t
loopsva 3:1b12fa9dc673 119 #define BQ_CONFIG_SLEEP_C_TIME 0x921f //uint8_t
loopsva 3:1b12fa9dc673 120
loopsva 3:1b12fa9dc673 121 #define BQ_CONFIG_DIS_DET_THRES 0x9228 //int16_t
loopsva 3:1b12fa9dc673 122 #define BQ_CONFIG_CHG_DET_THRES 0x922a //int16_t
loopsva 3:1b12fa9dc673 123 #define BQ_CONFIG_QUIT_CURR 0x922c //int16_t
loopsva 3:1b12fa9dc673 124 #define BQ_CONFIG_DIS_RELAX_TI 0x922e //uint16_t
loopsva 3:1b12fa9dc673 125
loopsva 3:1b12fa9dc673 126 #define BQ_CONFIG_CHG_RELAX_TI 0x9230 //uint8_t
loopsva 3:1b12fa9dc673 127 #define BQ_CONFIG_QUIT_RELAX_TI 0x9231 //uint8_t
loopsva 3:1b12fa9dc673 128
loopsva 3:1b12fa9dc673 129 #define BQ_CONFIG_OT_CHG 0x9232 //int16_t
loopsva 3:1b12fa9dc673 130 #define BQ_CONFIG_OT_CHG_TIME 0x9234 //uint8_t
loopsva 3:1b12fa9dc673 131 #define BQ_CONFIG_OT_CGH_RECOV 0x9235 //int16_t
loopsva 3:1b12fa9dc673 132 #define BQ_CONFIG_OT_DSG 0x9237 //int16_t
loopsva 3:1b12fa9dc673 133 #define BQ_CONFIG_OT_DSG_TIME 0x9239 //uint8_t
loopsva 3:1b12fa9dc673 134 #define BQ_CONFIG_OT_DSG_RECOV 0x923a //int16_t
loopsva 3:1b12fa9dc673 135 #define BQ_CONFIG_INIT_STBY 0x923c //int8_t
loopsva 3:1b12fa9dc673 136
loopsva 3:1b12fa9dc673 137 #define BQ_CONFIG_SYSD_S_VTHRS 0x9240 //int16_t
loopsva 3:1b12fa9dc673 138 #define BQ_CONFIG_SYSD_S_VTIME 0x9242 //uint8_t
loopsva 3:1b12fa9dc673 139 #define BQ_CONFIG_SYSD_C_VTHRS 0x9243 //int16_t
loopsva 3:1b12fa9dc673 140
loopsva 3:1b12fa9dc673 141 #define BQ_GG_SMOOTHING_CONFIG 0x9271 //uint8_t
loopsva 3:1b12fa9dc673 142 #define BQ_CONFIG_FLAG_CONFIG_A 0x927f //uint16_t
loopsva 3:1b12fa9dc673 143 #define BQ_CONFIG_FLAG_CONFIG_B 0x9281 //uint8_t
loopsva 3:1b12fa9dc673 144
loopsva 3:1b12fa9dc673 145 #define BQ_CONFIG_BATTERY_ID 0x929a //uint8_t
loopsva 3:1b12fa9dc673 146
loopsva 3:1b12fa9dc673 147 // Gas Gauge parameters
loopsva 3:1b12fa9dc673 148 #define BQ_GG_CEDVp1_GAUGE_CONF 0x929b //uint16_t
loopsva 3:1b12fa9dc673 149 #define BQ_GG_CEDVp1_FULLC_CAP 0x929d //int16_t 15 bits
loopsva 3:1b12fa9dc673 150 #define BQ_GG_CEDVp1_DESIGN_CAP 0x929f //int16_t 15 bits
loopsva 3:1b12fa9dc673 151 #define BQ_GG_CEDVp1_DESIGN_V 0x92a3 //int16_t 15 bits
loopsva 3:1b12fa9dc673 152 #define BQ_GG_CEDVp1_CHG_TERM_V 0x92a5 //int16_t
loopsva 3:1b12fa9dc673 153 #define BQ_GG_CEDVp1_EMF 0x92a7 //uint16_t
loopsva 3:1b12fa9dc673 154 #define BQ_GG_CEDVp1_C0 0x92a9 //uint16_t
loopsva 3:1b12fa9dc673 155 #define BQ_GG_CEDVp1_R0 0x92ab //uint16_t
loopsva 3:1b12fa9dc673 156 #define BQ_GG_CEDVp1_T0 0x92ad //uint16_t
loopsva 3:1b12fa9dc673 157 #define BQ_GG_CEDVp1_R1 0x92af //uint16_t
loopsva 3:1b12fa9dc673 158 #define BQ_GG_CEDVp1_TC 0x92b1 //uint8_t
loopsva 3:1b12fa9dc673 159 #define BQ_GG_CEDVp1_C1 0x92b2 //uint8_t
loopsva 3:1b12fa9dc673 160 #define BQ_GG_CEDVp1_AGE_FACTOR 0x92b3 //uint8_t
loopsva 3:1b12fa9dc673 161 #define BQ_GG_CEDVp1_FIXED_EDV0 0x92b4 //int16_t
loopsva 3:1b12fa9dc673 162 #define BQ_GG_CEDVp1_HOLDT_EDV0 0x92b6 //uint8_t
loopsva 3:1b12fa9dc673 163 #define BQ_GG_CEDVp1_FIXED_EDV1 0x92b7 //int16_t
loopsva 3:1b12fa9dc673 164 #define BQ_GG_CEDVp1_HOLDT_EDV1 0x92b9 //uint8_t
loopsva 3:1b12fa9dc673 165 #define BQ_GG_CEDVp1_FIXED_EDV2 0x92ba //int16_t
loopsva 3:1b12fa9dc673 166 #define BQ_GG_CEDVp1_HOLDT_EDV2 0x92bc //uint8_t
loopsva 3:1b12fa9dc673 167
loopsva 2:d52fb7ef7429 168 // CNTL_STAT register bit equates
loopsva 2:d52fb7ef7429 169 #define BQ_BIT_CS_CCA 0x0020
loopsva 2:d52fb7ef7429 170 #define BQ_BIT_CS_BCA 0x0010
loopsva 2:d52fb7ef7429 171 #define BQ_BIT_CS_SNOOZE 0x0008
loopsva 2:d52fb7ef7429 172 #define BQ_BIT_CS_BAT_ID2 0x0004
loopsva 2:d52fb7ef7429 173 #define BQ_BIT_CS_BAT_ID1 0x0002
loopsva 2:d52fb7ef7429 174 #define BQ_BIT_CS_BAT_ID0 0x0001
loopsva 3:1b12fa9dc673 175 #define BQ_BIT_CS_BAT_ID (BQ_BIT_CS_BAT_ID2 | BQ_BIT_CS_BAT_ID1 | BQ_BIT_CS_BAT_ID0)
loopsva 0:96d5698a376f 176
loopsva 3:1b12fa9dc673 177 // Gauging Status register bit equates
loopsva 2:d52fb7ef7429 178 #define BQ_BIT_GS_VDQ 0x8000
loopsva 2:d52fb7ef7429 179 #define BQ_BIT_GS_EDV2 0x4000
loopsva 2:d52fb7ef7429 180 #define BQ_BIT_GS_EDV1 0x2000
loopsva 3:1b12fa9dc673 181 #define BQ_BIT_GS_RSVD1 0x1000
loopsva 3:1b12fa9dc673 182 #define BQ_BIT_GS_RSVD2 0x0800
loopsva 2:d52fb7ef7429 183 #define BQ_BIT_GS_FCCX 0x0400
loopsva 3:1b12fa9dc673 184 #define BQ_BIT_GS_RSVD3 0x0200
loopsva 3:1b12fa9dc673 185 #define BQ_BIT_GS_RSVD4 0x0100
loopsva 2:d52fb7ef7429 186 #define BQ_BIT_GS_CF 0x0080
loopsva 2:d52fb7ef7429 187 #define BQ_BIT_GS_DSG 0x0040
loopsva 2:d52fb7ef7429 188 #define BQ_BIT_GS_EDV 0x0020
loopsva 3:1b12fa9dc673 189 #define BQ_BIT_GS_RSVD5 0x0010
loopsva 2:d52fb7ef7429 190 #define BQ_BIT_GS_TC 0x0008
loopsva 2:d52fb7ef7429 191 #define BQ_BIT_GS_TD 0x0004
loopsva 2:d52fb7ef7429 192 #define BQ_BIT_GS_FC 0x0002
loopsva 2:d52fb7ef7429 193 #define BQ_BIT_GS_FD 0x0001
loopsva 0:96d5698a376f 194
loopsva 3:1b12fa9dc673 195 // CEDV Gauging Configuration register bit equates
loopsva 3:1b12fa9dc673 196 #define BQ_BIT_GC_SME0 0x1000
loopsva 3:1b12fa9dc673 197 #define BQ_BIT_GC_IGNORE_SD 0x0800
loopsva 3:1b12fa9dc673 198 #define BQ_BIT_GC_FC_FOR_VDQ 0x0400
loopsva 3:1b12fa9dc673 199 #define BQ_BIT_GC_FCC_LIMIT 0x0100
loopsva 3:1b12fa9dc673 200 #define BQ_BIT_GC_FIXED_EDV0 0x0020
loopsva 3:1b12fa9dc673 201 #define BQ_BIT_GC_SC 0x0010
loopsva 3:1b12fa9dc673 202 #define BQ_BIT_GC_EDV_CMP 0x0008
loopsva 3:1b12fa9dc673 203 #define BQ_BIT_GC_CSYNC 0x0002
loopsva 3:1b12fa9dc673 204 #define BQ_BIT_GC_CCT 0x0001
loopsva 0:96d5698a376f 205
loopsva 0:96d5698a376f 206 // FLAGS register bit equates
loopsva 2:d52fb7ef7429 207 #define BQ_BIT_F_FD 0x8000
loopsva 2:d52fb7ef7429 208 #define BQ_BIT_F_OCV_COMP 0x4000
loopsva 2:d52fb7ef7429 209 #define BQ_BIT_F_OCV_FAIL 0x2000
loopsva 2:d52fb7ef7429 210 #define BQ_BIT_F_SLEEP 0x1000
loopsva 2:d52fb7ef7429 211 #define BQ_BIT_F_OTC 0x0800
loopsva 2:d52fb7ef7429 212 #define BQ_BIT_F_OTD 0x0400
loopsva 2:d52fb7ef7429 213 #define BQ_BIT_F_FC 0x0200
loopsva 2:d52fb7ef7429 214 #define BQ_BIT_F_CHGINH 0x0100
loopsva 2:d52fb7ef7429 215 #define BQ_BIT_F_TCA 0x0040
loopsva 2:d52fb7ef7429 216 #define BQ_BIT_F_OCVGD 0x0020
loopsva 2:d52fb7ef7429 217 #define BQ_BIT_F_AUTH_GD 0x0010
loopsva 2:d52fb7ef7429 218 #define BQ_BIT_F_BATTPRES 0x0008
loopsva 2:d52fb7ef7429 219 #define BQ_BIT_F_TDA 0x0004
loopsva 2:d52fb7ef7429 220 #define BQ_BIT_F_SYSDWN 0x0002
loopsva 2:d52fb7ef7429 221 #define BQ_BIT_F_DSG 0x0001
loopsva 0:96d5698a376f 222
loopsva 2:d52fb7ef7429 223 // OS register bit equates
loopsva 2:d52fb7ef7429 224 #define BQ_BIT_OS_CFGUPDATE 0x0400
loopsva 2:d52fb7ef7429 225 #define BQ_BIT_OS_BTPINT 0x0080
loopsva 2:d52fb7ef7429 226 #define BQ_BIT_OS_SMTH 0x0040
loopsva 2:d52fb7ef7429 227 #define BQ_BIT_OS_INITCOMP 0x0020
loopsva 2:d52fb7ef7429 228 #define BQ_BIT_OS_VDQ 0x0010
loopsva 2:d52fb7ef7429 229 #define BQ_BIT_OS_EDV2 0x0008
loopsva 2:d52fb7ef7429 230 #define BQ_BIT_OS_SEC1 0x0004
loopsva 2:d52fb7ef7429 231 #define BQ_BIT_OS_SEC0 0x0002
loopsva 2:d52fb7ef7429 232 #define BQ_BIT_OS_CALMD 0x0001
loopsva 3:1b12fa9dc673 233
loopsva 3:1b12fa9dc673 234 // Operation Config Reg A bit equates
loopsva 3:1b12fa9dc673 235 #define BQ_BIT_OCA_TEMPS 0x8000
loopsva 3:1b12fa9dc673 236 #define BQ_BIT_OCA_RSVD1 0x4000
loopsva 3:1b12fa9dc673 237 #define BQ_BIT_OCA_BATG_POL 0x2000
loopsva 3:1b12fa9dc673 238 #define BQ_BIT_OCA_BATG_EN 0x1000
loopsva 3:1b12fa9dc673 239 #define BQ_BIT_OCA_RSVD2 0x0800
loopsva 3:1b12fa9dc673 240 #define BQ_BIT_OCA_SLEEP 0x0400
loopsva 3:1b12fa9dc673 241 #define BQ_BIT_OCA_SLPWAKECHG 0x0200
loopsva 3:1b12fa9dc673 242 #define BQ_BIT_OCA_WRTEMP 0x0100
loopsva 3:1b12fa9dc673 243 #define BQ_BIT_OCA_BIE 0x0080
loopsva 3:1b12fa9dc673 244 #define BQ_BIT_OCA_RSVD3 0x0040
loopsva 3:1b12fa9dc673 245 #define BQ_BIT_OCA_BI_PUP_EN 0x0020
loopsva 3:1b12fa9dc673 246 #define BQ_BIT_OCA_PFC_CFG1 0x0010
loopsva 3:1b12fa9dc673 247 #define BQ_BIT_OCA_PFC_CFG0 0x0008
loopsva 3:1b12fa9dc673 248 #define BQ_BIT_OCA_WAKE_EN 0x0004
loopsva 3:1b12fa9dc673 249 #define BQ_BIT_OCA_WK_TH1 0x0002
loopsva 3:1b12fa9dc673 250 #define BQ_BIT_OCA_WK_TH0 0x0001
loopsva 3:1b12fa9dc673 251
loopsva 3:1b12fa9dc673 252 // Operation Config Reg B bit equates
loopsva 3:1b12fa9dc673 253 #define BQ_BIT_OCB_RSVD1 0x8000
loopsva 3:1b12fa9dc673 254 #define BQ_BIT_OCB_RSVD2 0x4000
loopsva 3:1b12fa9dc673 255 #define BQ_BIT_OCB_RSVD3 0x2000
loopsva 3:1b12fa9dc673 256 #define BQ_BIT_OCB_RSVD4 0x1000
loopsva 3:1b12fa9dc673 257 #define BQ_BIT_OCB_DEF_SEAL 0x0800
loopsva 3:1b12fa9dc673 258 #define BQ_BIT_OCB_NR 0x0400
loopsva 3:1b12fa9dc673 259 #define BQ_BIT_OCB_RSVD5 0x0200
loopsva 3:1b12fa9dc673 260 #define BQ_BIT_OCB_RSVD6 0x0100
loopsva 3:1b12fa9dc673 261 #define BQ_BIT_OCB_INT_BREM 0x0080
loopsva 3:1b12fa9dc673 262 #define BQ_BIT_OCB_INT_BATL 0x0040
loopsva 3:1b12fa9dc673 263 #define BQ_BIT_OCB_INT_STATE 0x0020
loopsva 3:1b12fa9dc673 264 #define BQ_BIT_OCB_INT_OCV 0x0010
loopsva 3:1b12fa9dc673 265 #define BQ_BIT_OCB_RSVD7 0x0008
loopsva 3:1b12fa9dc673 266 #define BQ_BIT_OCB_INT_OT 0x0004
loopsva 3:1b12fa9dc673 267 #define BQ_BIT_OCB_INT_POL 0x0002
loopsva 3:1b12fa9dc673 268 #define BQ_BIT_OCB_INT_FOCV 0x0001
loopsva 3:1b12fa9dc673 269
loopsva 3:1b12fa9dc673 270 // SOC Flags Reg A bit equates
loopsva 3:1b12fa9dc673 271 #define BQ_BIT_SOCFA_TCSETVCT 0x0800
loopsva 3:1b12fa9dc673 272 #define BQ_BIT_SOCFA_FCSETVCT 0x0400
loopsva 3:1b12fa9dc673 273 #define BQ_BIT_SOCFA_TCCLEARRSOC 0x0080
loopsva 3:1b12fa9dc673 274 #define BQ_BIT_SOCFA_TCSETRSOC 0x0040
loopsva 3:1b12fa9dc673 275 #define BQ_BIT_SOCFA_TCCLEARV 0x0020
loopsva 3:1b12fa9dc673 276 #define BQ_BIT_SOCFA_TCSETV 0x0010
loopsva 3:1b12fa9dc673 277 #define BQ_BIT_SOCFA_TDCLEARRSOC 0x0008
loopsva 3:1b12fa9dc673 278 #define BQ_BIT_SOCFA_TDSETRSOC 0x0004
loopsva 3:1b12fa9dc673 279 #define BQ_BIT_SOCFA_TDCLEARV 0x0002
loopsva 3:1b12fa9dc673 280 #define BQ_BIT_SOCFA_TDSETV 0x0001
loopsva 3:1b12fa9dc673 281
loopsva 3:1b12fa9dc673 282 // SOC Flags Reg B bit equates
loopsva 3:1b12fa9dc673 283 #define BQ_BIT_SOCFB_FCCLEARRSOC 0x0080
loopsva 3:1b12fa9dc673 284 #define BQ_BIT_SOCFB_FCSETRSOC 0x0040
loopsva 3:1b12fa9dc673 285 #define BQ_BIT_SOCFB_FCCLEARV 0x0020
loopsva 3:1b12fa9dc673 286 #define BQ_BIT_SOCFB_FCSETV 0x0010
loopsva 3:1b12fa9dc673 287 #define BQ_BIT_SOCFB_FDCLEARRSOC 0x0008
loopsva 3:1b12fa9dc673 288 #define BQ_BIT_SOCFB_FDSETRSOC 0x0004
loopsva 3:1b12fa9dc673 289 #define BQ_BIT_SOCFB_FDCCLEARV 0x0002
loopsva 3:1b12fa9dc673 290 #define BQ_BIT_SOCFB_FDSETV 0x0001
loopsva 3:1b12fa9dc673 291
loopsva 3:1b12fa9dc673 292 // IO Config bit equates
loopsva 3:1b12fa9dc673 293 #define BQ_BIT_IOCFG_BtpIntPol 0x0002
loopsva 3:1b12fa9dc673 294 #define BQ_BIT_SOCFB_BTpIntEn 0x0001
loopsva 3:1b12fa9dc673 295
loopsva 3:1b12fa9dc673 296 // Smoothing Config bit equates
loopsva 3:1b12fa9dc673 297 #define BQ_BIT_SMOC_SMOOTH_EOC_EN 0x0008
loopsva 3:1b12fa9dc673 298 #define BQ_BIT_SMOC_CMEXT 0x0004
loopsva 3:1b12fa9dc673 299 #define BQ_BIT_SMOC_VAVG 0x0002
loopsva 3:1b12fa9dc673 300 #define BQ_BIT_SMOC_SMEN 0x0001
loopsva 1:ab433d7c3e30 301
loopsva 2:d52fb7ef7429 302 class BQ27220
loopsva 0:96d5698a376f 303 {
loopsva 0:96d5698a376f 304 public:
loopsva 0:96d5698a376f 305 /**
loopsva 2:d52fb7ef7429 306 * Data structure for BQ27220 data values.
loopsva 0:96d5698a376f 307 *
loopsva 0:96d5698a376f 308 **/
loopsva 0:96d5698a376f 309 typedef struct {
loopsva 2:d52fb7ef7429 310 uint16_t cntlReg; /*!< CNTL register */
loopsva 3:1b12fa9dc673 311 int16_t arReg; /*!< AR register */
loopsva 0:96d5698a376f 312 uint16_t artteReg; /*!< ARTTE register */
loopsva 0:96d5698a376f 313 uint16_t tempReg; /*!< TEMP register */
loopsva 0:96d5698a376f 314 uint16_t voltReg; /*!< VOLT register */
loopsva 2:d52fb7ef7429 315
loopsva 2:d52fb7ef7429 316 uint16_t flagsReg; /*!< FLAGS register */
loopsva 3:1b12fa9dc673 317 int16_t currentReg; /*!< CURRENT register */
loopsva 2:d52fb7ef7429 318 uint16_t rmReg; /*!< RM register */
loopsva 2:d52fb7ef7429 319 uint16_t fccReg; /*!< FCC register */
loopsva 0:96d5698a376f 320 uint16_t aiReg; /*!< AI register */
loopsva 2:d52fb7ef7429 321
loopsva 0:96d5698a376f 322 uint16_t tteReg; /*!< TTE register */
loopsva 0:96d5698a376f 323 uint16_t ttfReg; /*!< TTF register */
loopsva 3:1b12fa9dc673 324 int16_t siReg; /*!< SI register */
loopsva 0:96d5698a376f 325 uint16_t stteReg; /*!< STTE register */
loopsva 3:1b12fa9dc673 326 int16_t mliReg; /*!< MLI register */
loopsva 2:d52fb7ef7429 327
loopsva 2:d52fb7ef7429 328 uint16_t mltteReg; /*!< MLTTE register */
loopsva 2:d52fb7ef7429 329 uint16_t rawccReg; /*!< RCC register */
loopsva 3:1b12fa9dc673 330 int16_t apReg; /*!< AP register */
loopsva 2:d52fb7ef7429 331 uint16_t intTempReg; /*!< INTTEMP register */
loopsva 2:d52fb7ef7429 332 uint16_t cycReg; /*!< CYC register */
loopsva 2:d52fb7ef7429 333
loopsva 2:d52fb7ef7429 334 uint16_t socReg; /*!< SOC register */
loopsva 2:d52fb7ef7429 335 uint16_t sohReg; /*!< SOH register */
loopsva 2:d52fb7ef7429 336 uint16_t cvReg; /*!< CV register */
loopsva 2:d52fb7ef7429 337 uint16_t ccReg; /*!< CC register */
loopsva 2:d52fb7ef7429 338 uint16_t btpdReg; /*!< BTPD register */
loopsva 2:d52fb7ef7429 339
loopsva 2:d52fb7ef7429 340 uint16_t btpcReg; /*!< BTPC register */
loopsva 2:d52fb7ef7429 341 uint16_t osReg; /*!< OS register */
loopsva 2:d52fb7ef7429 342 uint16_t dcReg; /*!< DC register */
loopsva 3:1b12fa9dc673 343 uint16_t subReg; /*!< SUB command register */
loopsva 2:d52fb7ef7429 344 char macData[32]; /*!< MAC Data array */
loopsva 3:1b12fa9dc673 345 uint8_t macSumReg; /*!< MAC Data Sum register */
loopsva 2:d52fb7ef7429 346
loopsva 3:1b12fa9dc673 347 uint8_t macLenReg; /*!< MAC Data Len register */
loopsva 2:d52fb7ef7429 348 uint8_t anacReg; /*!< Analog Count register */
loopsva 2:d52fb7ef7429 349 uint16_t rawcReg; /*!< RAWC register */
loopsva 2:d52fb7ef7429 350 uint16_t rawvReg; /*!< RAWV register */
loopsva 2:d52fb7ef7429 351 uint16_t rawtReg; /*!< RAWT register */
loopsva 3:1b12fa9dc673 352
loopsva 3:1b12fa9dc673 353 uint8_t checksum; /*!< calculated checksum result */
loopsva 2:d52fb7ef7429 354
loopsva 3:1b12fa9dc673 355 int16_t shunt_res; /*!< Shunt Resistor value / 1000 */
loopsva 3:1b12fa9dc673 356 char i2c_Bufx[48]; /*!< i2c buffer */
loopsva 2:d52fb7ef7429 357 } BQ27220_TypeDef;
loopsva 0:96d5698a376f 358
loopsva 0:96d5698a376f 359 /** Configure data pin
loopsva 0:96d5698a376f 360 * @param data SDA and SCL pins
loopsva 2:d52fb7ef7429 361 * // @param digital output 21V control pin
loopsva 0:96d5698a376f 362 **/
loopsva 2:d52fb7ef7429 363 //BQ27220(PinName p_sda, PinName p_scl, PinName p_pgrm);
loopsva 2:d52fb7ef7429 364 BQ27220(PinName p_sda, PinName p_scl);
loopsva 3:1b12fa9dc673 365 BQ27220(PinName p_sda, PinName p_scl, int freq);
loopsva 1:ab433d7c3e30 366
loopsva 1:ab433d7c3e30 367 /** Write default values for CNTL register and shunt resistor * 1000
loopsva 1:ab433d7c3e30 368 * @param I2c pins
loopsva 1:ab433d7c3e30 369 * @param programming enable EEPROM pin (21V)
loopsva 1:ab433d7c3e30 370 * @return none
loopsva 1:ab433d7c3e30 371 */
loopsva 2:d52fb7ef7429 372 void default_init(BQ27220_TypeDef& dataSTR);
loopsva 0:96d5698a376f 373
loopsva 3:1b12fa9dc673 374 uint16_t get_OS_reg(BQ27220_TypeDef& dataSTR);
loopsva 3:1b12fa9dc673 375
loopsva 0:96d5698a376f 376 /** Read all bq registers and put them into the data structure
loopsva 1:ab433d7c3e30 377 * @param pointer to data structure
loopsva 0:96d5698a376f 378 * @return i2c error, 0 = no error
loopsva 0:96d5698a376f 379 */
loopsva 2:d52fb7ef7429 380 int read_registers(BQ27220_TypeDef& dataSTR);
loopsva 0:96d5698a376f 381
loopsva 3:1b12fa9dc673 382 /** Send sub-command and read data and/or result from sub-command
loopsva 3:1b12fa9dc673 383 * @param pointer to data structure
loopsva 3:1b12fa9dc673 384 * @return result and/or data
loopsva 3:1b12fa9dc673 385 */
loopsva 3:1b12fa9dc673 386 uint16_t get_sub_cmmd(BQ27220_TypeDef& dataSTR, uint16_t cmmd);
loopsva 3:1b12fa9dc673 387
loopsva 3:1b12fa9dc673 388 /** Like above, without extra delays
loopsva 3:1b12fa9dc673 389 * @param pointer to data structure
loopsva 3:1b12fa9dc673 390 * @return result and/or data
loopsva 3:1b12fa9dc673 391 */
loopsva 3:1b12fa9dc673 392 uint16_t get_sub_cmmd_s(BQ27220_TypeDef& dataSTR, uint16_t cmmd);
loopsva 3:1b12fa9dc673 393
loopsva 3:1b12fa9dc673 394 void change_cfg_OT_chg_time(BQ27220_TypeDef& dataSTR, uint8_t newtime);
loopsva 3:1b12fa9dc673 395 void change_ram_1_2_4(BQ27220_TypeDef& dataSTR, uint16_t sub_cmmd, uint32_t value, int qty, bool pre);
loopsva 3:1b12fa9dc673 396 void change_cfg_6_1(BQ27220_TypeDef& dataSTR);
loopsva 3:1b12fa9dc673 397 uint16_t get_cs_len(BQ27220_TypeDef& dataSTR, bool pf);
loopsva 3:1b12fa9dc673 398 void exitCfgUpdateReInit(BQ27220_TypeDef& dataSTR);
loopsva 3:1b12fa9dc673 399 void exitCfgUpdateExit(BQ27220_TypeDef& dataSTR);
loopsva 3:1b12fa9dc673 400 void set_reg(BQ27220_TypeDef& dataSTR, uint16_t reg, uint16_t da, int byt);
loopsva 3:1b12fa9dc673 401
loopsva 3:1b12fa9dc673 402 uint16_t get_reg_2B(BQ27220_TypeDef& dataSTR, uint8_t reg);
loopsva 3:1b12fa9dc673 403
loopsva 3:1b12fa9dc673 404 void unseal(BQ27220_TypeDef& dataSTR);
loopsva 3:1b12fa9dc673 405 void full_access(BQ27220_TypeDef& dataSTR);
loopsva 3:1b12fa9dc673 406 void enter_cfg_update(BQ27220_TypeDef& dataSTR);
loopsva 3:1b12fa9dc673 407 void seal(BQ27220_TypeDef& dataSTR);
loopsva 3:1b12fa9dc673 408 void useProfile_1(BQ27220_TypeDef& dataSTR);
loopsva 3:1b12fa9dc673 409 void reset(BQ27220_TypeDef& dataSTR);
loopsva 3:1b12fa9dc673 410
loopsva 3:1b12fa9dc673 411 /** Send sub-command to get device ID
loopsva 3:1b12fa9dc673 412 * @param pointer to data structure
loopsva 3:1b12fa9dc673 413 * @return sub-command + device id
loopsva 3:1b12fa9dc673 414 */
loopsva 3:1b12fa9dc673 415 uint32_t get_dev_id(BQ27220_TypeDef& dataSTR);
loopsva 3:1b12fa9dc673 416
loopsva 3:1b12fa9dc673 417 /** Send sub-command to get firmware revision
loopsva 3:1b12fa9dc673 418 * @param pointer to data structure
loopsva 3:1b12fa9dc673 419 * @return revision
loopsva 3:1b12fa9dc673 420 */
loopsva 3:1b12fa9dc673 421 uint32_t get_fw_rev(BQ27220_TypeDef& dataSTR);
loopsva 3:1b12fa9dc673 422
loopsva 3:1b12fa9dc673 423 /** Send sub-command to get firmware revision
loopsva 3:1b12fa9dc673 424 * @param pointer to data structure
loopsva 3:1b12fa9dc673 425 * @return revision
loopsva 3:1b12fa9dc673 426 */
loopsva 3:1b12fa9dc673 427 uint32_t get_hw_rev(BQ27220_TypeDef& dataSTR);
loopsva 3:1b12fa9dc673 428
loopsva 3:1b12fa9dc673 429 uint8_t calc_checksum_rx(BQ27220_TypeDef& dataSTR, int length);
loopsva 3:1b12fa9dc673 430 uint8_t calc_checksum_tx(BQ27220_TypeDef& dataSTR, int length);
loopsva 3:1b12fa9dc673 431
loopsva 3:1b12fa9dc673 432 /** Send sub-command to get 32 bytes data
loopsva 3:1b12fa9dc673 433 * @param pointer to data structure
loopsva 3:1b12fa9dc673 434 * @param sub-command
loopsva 3:1b12fa9dc673 435 * @return 32 bytes in macData
loopsva 3:1b12fa9dc673 436 */
loopsva 3:1b12fa9dc673 437 uint32_t get_data_32(BQ27220_TypeDef& dataSTR, uint16_t sub_cmmd, int length);
loopsva 3:1b12fa9dc673 438
loopsva 3:1b12fa9dc673 439 /** Get signed 16 bit value
loopsva 3:1b12fa9dc673 440 * @param pointer to data structure
loopsva 3:1b12fa9dc673 441 * @param sub-command
loopsva 3:1b12fa9dc673 442 * @return 16 bit signed value
loopsva 3:1b12fa9dc673 443 */
loopsva 3:1b12fa9dc673 444 uint16_t get_16(BQ27220_TypeDef& dataSTR, uint16_t cmmd);
loopsva 3:1b12fa9dc673 445
loopsva 3:1b12fa9dc673 446 /** Get unsigned 8 bit value
loopsva 3:1b12fa9dc673 447 * @param pointer to data structure
loopsva 3:1b12fa9dc673 448 * @param sub-command
loopsva 3:1b12fa9dc673 449 * @return 8 bit signed value
loopsva 3:1b12fa9dc673 450 */
loopsva 3:1b12fa9dc673 451 uint8_t get_8(BQ27220_TypeDef& dataSTR, uint16_t cmmd);
loopsva 3:1b12fa9dc673 452
loopsva 3:1b12fa9dc673 453 void set_ntc_as_sensor(BQ27220_TypeDef& dataSTR, bool ntc);
loopsva 3:1b12fa9dc673 454
loopsva 1:ab433d7c3e30 455 /** Initialize SoC for a new battery
loopsva 1:ab433d7c3e30 456 * @param pointer to data structure
loopsva 1:ab433d7c3e30 457 * @return error, 0 = no error
loopsva 1:ab433d7c3e30 458 */
loopsva 2:d52fb7ef7429 459 int new_battery_init(BQ27220_TypeDef& dataSTR);
loopsva 1:ab433d7c3e30 460
loopsva 0:96d5698a376f 461 /** Read all bq EEPROM registers and put them into the data structure
loopsva 1:ab433d7c3e30 462 * @param pointer to data structure
loopsva 0:96d5698a376f 463 * @return i2c error, 0 = no error
loopsva 0:96d5698a376f 464 */
loopsva 2:d52fb7ef7429 465 int read_eep_registers(BQ27220_TypeDef& dataSTR);
loopsva 2:d52fb7ef7429 466
loopsva 2:d52fb7ef7429 467 protected:
loopsva 2:d52fb7ef7429 468 I2C _i2c;
loopsva 1:ab433d7c3e30 469
loopsva 0:96d5698a376f 470 private:
loopsva 0:96d5698a376f 471
loopsva 0:96d5698a376f 472 };
loopsva 0:96d5698a376f 473
loopsva 2:d52fb7ef7429 474 #endif // MBED_BQ27220