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

Fork of bq27210 by Kevin Braun

Committer:
loopsva
Date:
Mon Jun 19 22:28:50 2017 +0000
Revision:
1:ab433d7c3e30
Parent:
0:96d5698a376f
Made the same as CLI version

Who changed what in which revision?

UserRevisionLine numberNew contents of line
loopsva 0:96d5698a376f 1 #ifndef MBED_BQ27210
loopsva 0:96d5698a376f 2 #define MBED_BQ27210
loopsva 0:96d5698a376f 3
loopsva 0:96d5698a376f 4 #define BQ_SHUNT_RESISTOR 20 // 0.020 ohms * 1000
loopsva 1:ab433d7c3e30 5 #define BQ_AR_VALUE 1121 // 200mA
loopsva 1:ab433d7c3e30 6
loopsva 1:ab433d7c3e30 7 #define BQ_NEW_ILMD 0x21
loopsva 1:ab433d7c3e30 8 #define BQ_NEW_SEDVF 0x02
loopsva 1:ab433d7c3e30 9 #define BQ_NEW_SEDV1 0x24
loopsva 0:96d5698a376f 10
loopsva 0:96d5698a376f 11 // Set data into "addr"
loopsva 0:96d5698a376f 12 #define BQ27210_ADDR 0xAA
loopsva 0:96d5698a376f 13
loopsva 0:96d5698a376f 14 // read/write registers RAM
loopsva 0:96d5698a376f 15 #define BQ_CRTL 0x00
loopsva 0:96d5698a376f 16 #define BQ_MODE 0x01
loopsva 0:96d5698a376f 17 #define BQ_AR 0x02
loopsva 0:96d5698a376f 18 #define BQ_AR_LO 0x02
loopsva 0:96d5698a376f 19 #define BQ_AR_HI 0x03
loopsva 0:96d5698a376f 20
loopsva 0:96d5698a376f 21 // read only registers RAM
loopsva 0:96d5698a376f 22 #define BQ_ARTTE 0x04
loopsva 0:96d5698a376f 23 #define BQ_ARTTE_LO 0x04
loopsva 0:96d5698a376f 24 #define BQ_ARTTE_HI 0x05
loopsva 0:96d5698a376f 25 #define BQ_TEMP 0x06
loopsva 0:96d5698a376f 26 #define BQ_TEMP_LO 0x06
loopsva 0:96d5698a376f 27 #define BQ_TEMP_HI 0x07
loopsva 0:96d5698a376f 28 #define BQ_VOLT 0x08
loopsva 0:96d5698a376f 29 #define BQ_VOLT_LO 0x08
loopsva 0:96d5698a376f 30 #define BQ_VOLT_HI 0x09
loopsva 0:96d5698a376f 31 #define BQ_FLAGS 0x0A
loopsva 0:96d5698a376f 32 #define BQ_RSOC 0x0B
loopsva 0:96d5698a376f 33 #define BQ_NAC 0x0C
loopsva 0:96d5698a376f 34 #define BQ_NAC_LO 0x0C
loopsva 0:96d5698a376f 35 #define BQ_NAC_HI 0x0D
loopsva 0:96d5698a376f 36 #define BQ_LMD 0x0E
loopsva 0:96d5698a376f 37 #define BQ_LMD_LO 0x0E
loopsva 0:96d5698a376f 38 #define BQ_LMD_HI 0x0F
loopsva 0:96d5698a376f 39 #define BQ_CAC 0x10
loopsva 0:96d5698a376f 40 #define BQ_CAC_LO 0x10
loopsva 0:96d5698a376f 41 #define BQ_CAC_HI 0x11
loopsva 0:96d5698a376f 42 #define BQ_FCAC 0x12
loopsva 0:96d5698a376f 43 #define BQ_FCAC_LO 0x12
loopsva 0:96d5698a376f 44 #define BQ_FCAC_HI 0x13
loopsva 0:96d5698a376f 45 #define BQ_AI 0x14
loopsva 0:96d5698a376f 46 #define BQ_AI_LO 0x14
loopsva 0:96d5698a376f 47 #define BQ_AI_HI 0x15
loopsva 0:96d5698a376f 48 #define BQ_TTE 0x16
loopsva 0:96d5698a376f 49 #define BQ_TTE_LO 0x16
loopsva 0:96d5698a376f 50 #define BQ_TTE_HI 0x17
loopsva 0:96d5698a376f 51 #define BQ_TTF 0x18
loopsva 0:96d5698a376f 52 #define BQ_TTF_LO 0x18
loopsva 0:96d5698a376f 53 #define BQ_TTF_HI 0x19
loopsva 0:96d5698a376f 54 #define BQ_SI 0x1A
loopsva 0:96d5698a376f 55 #define BQ_SI_LO 0x1A
loopsva 0:96d5698a376f 56 #define BQ_SI_HI 0x1B
loopsva 0:96d5698a376f 57 #define BQ_STTE 0x1C
loopsva 0:96d5698a376f 58 #define BQ_STTE_LO 0x1C
loopsva 0:96d5698a376f 59 #define BQ_STTE_HI 0x1D
loopsva 0:96d5698a376f 60 #define BQ_CEDV 0x20
loopsva 0:96d5698a376f 61 #define BQ_CEDV_LO 0x20
loopsva 0:96d5698a376f 62 #define BQ_CEDV_HI 0x21
loopsva 0:96d5698a376f 63 #define BQ_TTECP 0x26
loopsva 0:96d5698a376f 64 #define BQ_TTECP_LO 0x26
loopsva 0:96d5698a376f 65 #define BQ_TTECP_HI 0x27
loopsva 0:96d5698a376f 66 #define BQ_CYCL 0x28
loopsva 0:96d5698a376f 67 #define BQ_CYCL_LO 0x28
loopsva 0:96d5698a376f 68 #define BQ_CYCL_HI 0x29
loopsva 0:96d5698a376f 69 #define BQ_CYCT 0x2A
loopsva 0:96d5698a376f 70 #define BQ_CYCT_LO 0x2A
loopsva 0:96d5698a376f 71 #define BQ_CYCT_HI 0x2B
loopsva 0:96d5698a376f 72 #define BQ_CSOC 0x2C
loopsva 0:96d5698a376f 73
loopsva 0:96d5698a376f 74 // read/write registers EEPROM
loopsva 0:96d5698a376f 75 #define BQ_EE_EN 0x6E
loopsva 1:ab433d7c3e30 76 #define BQ_EE_WRITE_EN 0xdd
loopsva 0:96d5698a376f 77
loopsva 0:96d5698a376f 78 #define BQ_ILMD 0x76
loopsva 0:96d5698a376f 79 #define BQ_SEDVF 0x77
loopsva 0:96d5698a376f 80 #define BQ_SEDV1 0x78
loopsva 0:96d5698a376f 81 #define BQ_ISLC_EDVT 0x79
loopsva 0:96d5698a376f 82 #define BQ_DMFSD 0x7A
loopsva 0:96d5698a376f 83 #define BQ_TAPER 0x7B
loopsva 0:96d5698a376f 84 #define BQ_PKCFG 0x7C
loopsva 0:96d5698a376f 85 #define BQ_GAF_DEDV 0x7D
loopsva 0:96d5698a376f 86 #define BQ_DCOMP 0x7E
loopsva 0:96d5698a376f 87 #define BQ_TCOMP 0x7F
loopsva 0:96d5698a376f 88
loopsva 0:96d5698a376f 89 // CNTL and MODE bit equates
loopsva 0:96d5698a376f 90 #define BQ_COMMAND_0xA9 0xA9
loopsva 0:96d5698a376f 91 #define BQ_COMMAND_0x56 0x56
loopsva 0:96d5698a376f 92 #define BQ_COMMAND_0xC5 0xC5
loopsva 0:96d5698a376f 93
loopsva 1:ab433d7c3e30 94 // bits common to all COMMAND types
loopsva 0:96d5698a376f 95 #define BQ_BIT_GPIEN 0x80
loopsva 0:96d5698a376f 96 #define BQ_BIT_GPSTAT 0x40
loopsva 0:96d5698a376f 97 #define BQ_BIT_INIT 0x04
loopsva 0:96d5698a376f 98
loopsva 1:ab433d7c3e30 99 // bits unique to COMMAND types
loopsva 0:96d5698a376f 100 #define BQ_BIT_WRTNAC 0x20
loopsva 0:96d5698a376f 101 #define BQ_BIT_CEO 0x20
loopsva 0:96d5698a376f 102 #define BQ_BIT_UPDC 0x20
loopsva 0:96d5698a376f 103
loopsva 0:96d5698a376f 104 #define BQ_BIT_DONE 0x10
loopsva 0:96d5698a376f 105 #define BQ_BIT_CIO 0x10
loopsva 0:96d5698a376f 106 #define BQ_BIT_UPEDVI 0x10
loopsva 0:96d5698a376f 107
loopsva 0:96d5698a376f 108 #define BQ_BIT_PRST 0x08
loopsva 0:96d5698a376f 109 #define BQ_BIT_WNACCI 0x08
loopsva 0:96d5698a376f 110 #define BQ_BIT_UPDMF 0x08
loopsva 0:96d5698a376f 111
loopsva 0:96d5698a376f 112 #define BQ_BIT_FRST 0x02
loopsva 0:96d5698a376f 113 #define BQ_BIT_WRTCYC 0x02
loopsva 0:96d5698a376f 114 #define BQ_BIT_UPCFG 0x02
loopsva 0:96d5698a376f 115
loopsva 0:96d5698a376f 116 #define BQ_BIT_SHIP 0x01
loopsva 0:96d5698a376f 117 #define BQ_BIT_WRTLMD 0x01
loopsva 0:96d5698a376f 118 #define BQ_BIT_UPCOMP 0x01
loopsva 0:96d5698a376f 119
loopsva 0:96d5698a376f 120 // FLAGS register bit equates
loopsva 0:96d5698a376f 121 #define BQ_BIT_CHGS 0x80
loopsva 0:96d5698a376f 122 #define BQ_BIT_NOACT 0x40
loopsva 0:96d5698a376f 123 #define BQ_BIT_IMIN 0x20
loopsva 0:96d5698a376f 124 #define BQ_BIT_CI 0x10
loopsva 0:96d5698a376f 125 #define BQ_BIT_CALIP 0x08
loopsva 0:96d5698a376f 126 #define BQ_BIT_VDQ 0x04
loopsva 0:96d5698a376f 127 #define BQ_BIT_EDVI 0x02
loopsva 0:96d5698a376f 128 #define BQ_BIT_EDVF 0x01
loopsva 0:96d5698a376f 129
loopsva 1:ab433d7c3e30 130 /**
loopsva 1:ab433d7c3e30 131 * Factory default EEPROM data values, starting at BQ_ILMD
loopsva 1:ab433d7c3e30 132 *
loopsva 1:ab433d7c3e30 133 **/
loopsva 1:ab433d7c3e30 134 static const char bq_EEP_Defaults[10] = {
loopsva 1:ab433d7c3e30 135 0x2c, 0x77, 0xa9, 0x48, 0x48, 0x89, 0x63, 0x66, 0x6c, 0x46
loopsva 1:ab433d7c3e30 136 };
loopsva 1:ab433d7c3e30 137
loopsva 0:96d5698a376f 138 class BQ27210
loopsva 0:96d5698a376f 139 {
loopsva 0:96d5698a376f 140 public:
loopsva 0:96d5698a376f 141 /**
loopsva 0:96d5698a376f 142 * Data structure for BQ27210 data values.
loopsva 0:96d5698a376f 143 *
loopsva 0:96d5698a376f 144 **/
loopsva 0:96d5698a376f 145 typedef struct {
loopsva 0:96d5698a376f 146 uint8_t cntlReg; /*!< CNTL register */
loopsva 0:96d5698a376f 147 uint8_t modeReg; /*!< MODE register */
loopsva 0:96d5698a376f 148 uint16_t arReg; /*!< AR register */
loopsva 0:96d5698a376f 149 uint16_t artteReg; /*!< ARTTE register */
loopsva 0:96d5698a376f 150 uint16_t tempReg; /*!< TEMP register */
loopsva 0:96d5698a376f 151 uint16_t voltReg; /*!< VOLT register */
loopsva 0:96d5698a376f 152 uint8_t flagsReg; /*!< FLAGS register */
loopsva 0:96d5698a376f 153 uint8_t rsocReg; /*!< RSOC register */
loopsva 0:96d5698a376f 154 uint16_t nacReg; /*!< NAC register */
loopsva 0:96d5698a376f 155 uint16_t lmdReg; /*!< LMD register */
loopsva 0:96d5698a376f 156 uint16_t cacReg; /*!< CAC register */
loopsva 0:96d5698a376f 157 uint16_t fcacReg; /*!< FCAC register */
loopsva 0:96d5698a376f 158 uint16_t aiReg; /*!< AI register */
loopsva 0:96d5698a376f 159 uint16_t tteReg; /*!< TTE register */
loopsva 0:96d5698a376f 160 uint16_t ttfReg; /*!< TTF register */
loopsva 0:96d5698a376f 161 uint16_t siReg; /*!< SI register */
loopsva 0:96d5698a376f 162 uint16_t stteReg; /*!< STTE register */
loopsva 0:96d5698a376f 163 uint16_t junk1; /*!< reserved */
loopsva 0:96d5698a376f 164 uint16_t cedvReg; /*!< CEDV register */
loopsva 0:96d5698a376f 165 uint16_t junk2; /*!< reserved */
loopsva 0:96d5698a376f 166 uint16_t junk3; /*!< reserved */
loopsva 0:96d5698a376f 167 uint16_t ttecpReg; /*!< TTECP register */
loopsva 0:96d5698a376f 168 uint16_t cyclReg; /*!< CYCL register */
loopsva 0:96d5698a376f 169 uint16_t cyctReg; /*!< CYCT register */
loopsva 0:96d5698a376f 170 uint8_t csocReg; /*!< CSOC register */
loopsva 0:96d5698a376f 171 /*!< big gap */
loopsva 0:96d5698a376f 172 uint8_t eeEnReg; /*!< EE_EN register */
loopsva 0:96d5698a376f 173 /*!< big gap */
loopsva 0:96d5698a376f 174 uint8_t ilmdReg; /*!< ILMD register */
loopsva 0:96d5698a376f 175 uint8_t sedvfReg; /*!< SEDVF register */
loopsva 0:96d5698a376f 176 uint8_t sedv1Reg; /*!< SEDV1 register */
loopsva 0:96d5698a376f 177 uint8_t islcEdvtReg; /*!< ISLC/EDVT register */
loopsva 0:96d5698a376f 178 uint8_t dmfsdReg; /*!< DMFSD register */
loopsva 0:96d5698a376f 179 uint8_t taperReg; /*!< TAPER register */
loopsva 0:96d5698a376f 180 uint8_t pkcfgReg; /*!< PKCFG register */
loopsva 0:96d5698a376f 181 uint8_t gafDedvReg; /*!< GAF/DEDV register */
loopsva 0:96d5698a376f 182 uint8_t dcompReg; /*!< DCOMP register */
loopsva 0:96d5698a376f 183 uint8_t tcompReg; /*!< TCOMP register */
loopsva 1:ab433d7c3e30 184 int8_t cmmd_key; /*!< Command Key 0xA9, 0x56 or 0xC5 */
loopsva 0:96d5698a376f 185 int16_t shunt_res; /*!< Shunt Resistor value * 1000, 20 = 0.020 ohm */
loopsva 1:ab433d7c3e30 186 char i2c_Bufx[48]; /*!< i2c buffer */
loopsva 0:96d5698a376f 187 } BQ27210_TypeDef;
loopsva 0:96d5698a376f 188
loopsva 0:96d5698a376f 189 /** Configure data pin
loopsva 0:96d5698a376f 190 * @param data SDA and SCL pins
loopsva 1:ab433d7c3e30 191 * @param digital output 21V control pin
loopsva 0:96d5698a376f 192 **/
loopsva 1:ab433d7c3e30 193 BQ27210(PinName p_sda, PinName p_scl, PinName p_pgrm);
loopsva 1:ab433d7c3e30 194
loopsva 1:ab433d7c3e30 195 /** Write default values for CNTL register and shunt resistor * 1000
loopsva 1:ab433d7c3e30 196 * @param I2c pins
loopsva 1:ab433d7c3e30 197 * @param programming enable EEPROM pin (21V)
loopsva 1:ab433d7c3e30 198 * @return none
loopsva 1:ab433d7c3e30 199 */
loopsva 1:ab433d7c3e30 200 void default_init(BQ27210_TypeDef& dataSTR);
loopsva 0:96d5698a376f 201
loopsva 0:96d5698a376f 202 /** Read all bq registers and put them into the data structure
loopsva 1:ab433d7c3e30 203 * @param pointer to data structure
loopsva 0:96d5698a376f 204 * @return i2c error, 0 = no error
loopsva 0:96d5698a376f 205 */
loopsva 0:96d5698a376f 206 int read_registers(BQ27210_TypeDef& dataSTR);
loopsva 0:96d5698a376f 207
loopsva 1:ab433d7c3e30 208 /** Initialize SoC for a new battery
loopsva 1:ab433d7c3e30 209 * @param pointer to data structure
loopsva 1:ab433d7c3e30 210 * @return error, 0 = no error
loopsva 1:ab433d7c3e30 211 */
loopsva 1:ab433d7c3e30 212 int new_battery_init(BQ27210_TypeDef& dataSTR);
loopsva 1:ab433d7c3e30 213
loopsva 0:96d5698a376f 214 /** Read all bq EEPROM registers and put them into the data structure
loopsva 1:ab433d7c3e30 215 * @param pointer to data structure
loopsva 0:96d5698a376f 216 * @return i2c error, 0 = no error
loopsva 0:96d5698a376f 217 */
loopsva 0:96d5698a376f 218 int read_eep_registers(BQ27210_TypeDef& dataSTR);
loopsva 0:96d5698a376f 219
loopsva 1:ab433d7c3e30 220 /** Write all bq EEPROM registers and put them into the data structure
loopsva 1:ab433d7c3e30 221 * @param pointer to data structure, 21V needed
loopsva 1:ab433d7c3e30 222 * @return i2c error, 0 = no error
loopsva 1:ab433d7c3e30 223 */
loopsva 1:ab433d7c3e30 224 int write_eep_registers(BQ27210_TypeDef& dataSTR);
loopsva 1:ab433d7c3e30 225
loopsva 0:96d5698a376f 226 private:
loopsva 0:96d5698a376f 227 //char i2c_Buf[48]; /* i2c buffer */
loopsva 0:96d5698a376f 228
loopsva 0:96d5698a376f 229 protected:
loopsva 0:96d5698a376f 230 I2C _i2c;
loopsva 1:ab433d7c3e30 231 DigitalOut _pgm;
loopsva 0:96d5698a376f 232
loopsva 0:96d5698a376f 233
loopsva 0:96d5698a376f 234 };
loopsva 0:96d5698a376f 235
loopsva 0:96d5698a376f 236 #endif // MBED_BQ27210