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

Fork of bq27210 by Kevin Braun

Committer:
loopsva
Date:
Tue Jun 13 16:21:47 2017 +0000
Revision:
0:96d5698a376f
Child:
1:ab433d7c3e30
Initial release, just basic register reading

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