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

Fork of bq27210 by Kevin Braun

Committer:
loopsva
Date:
Wed Jun 21 19:56:02 2017 +0000
Revision:
2:d52fb7ef7429
Parent:
bq27210.h@1:ab433d7c3e30
Child:
3:1b12fa9dc673
So far, only register reading function written

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 0:96d5698a376f 43
loopsva 2:d52fb7ef7429 44 #define BQ_MACDATA 0x40
loopsva 2:d52fb7ef7429 45
loopsva 2:d52fb7ef7429 46 #define BQ_MACDATASUM 0x60
loopsva 2:d52fb7ef7429 47 #define BQ_MACDATALEN 0x61
loopsva 2:d52fb7ef7429 48
loopsva 2:d52fb7ef7429 49 #define BQ_ANACNT 0x79
loopsva 2:d52fb7ef7429 50 #define BQ_RAWC 0x7A
loopsva 2:d52fb7ef7429 51 #define BQ_RAWV 0x7C
loopsva 2:d52fb7ef7429 52 #define BQ_RAWT 0x7E
loopsva 0:96d5698a376f 53
loopsva 2:d52fb7ef7429 54 // Sub Commands
loopsva 2:d52fb7ef7429 55 #define BQ_CNTL_STAT 0x0000
loopsva 2:d52fb7ef7429 56 #define BQ_DEVICE_NUMBER 0x0001
loopsva 2:d52fb7ef7429 57 #define BQ_FW_VERSION 0x0002
loopsva 2:d52fb7ef7429 58
loopsva 2:d52fb7ef7429 59 #define BQ_BOARD_OFFSET 0x0009
loopsva 2:d52fb7ef7429 60 #define BQ_CC_OFFSET 0x000A
loopsva 2:d52fb7ef7429 61 #define BQ_CC_OFFSET_SAVE 0x000B
loopsva 2:d52fb7ef7429 62 #define BQ_OCV_CMD 0x000C
loopsva 2:d52fb7ef7429 63 #define BQ_BAT_INSERT 0x000D
loopsva 2:d52fb7ef7429 64 #define BQ_BAT_REMOVE 0x000E
loopsva 0:96d5698a376f 65
loopsva 2:d52fb7ef7429 66 #define BQ_SET_SNOOZE 0x0013
loopsva 2:d52fb7ef7429 67 #define BQ_CLEAR_SNOOZE 0x0014
loopsva 2:d52fb7ef7429 68 #define BQ_SET_PROFILE_1 0x0015
loopsva 2:d52fb7ef7429 69 #define BQ_SET_PROFILE_2 0x0016
loopsva 2:d52fb7ef7429 70 #define BQ_SET_PROFILE_3 0x0017
loopsva 2:d52fb7ef7429 71 #define BQ_SET_PROFILE_4 0x0018
loopsva 2:d52fb7ef7429 72 #define BQ_SET_PROFILE_5 0x0019
loopsva 2:d52fb7ef7429 73 #define BQ_SET_PROFILE_6 0x001A
loopsva 2:d52fb7ef7429 74
loopsva 2:d52fb7ef7429 75 #define BQ_CAL_TOGGLE 0x002D
loopsva 0:96d5698a376f 76
loopsva 2:d52fb7ef7429 77 #define BQ_SET_SEALED 0x0030
loopsva 2:d52fb7ef7429 78
loopsva 2:d52fb7ef7429 79 #define BQ_RESET 0x0040
loopsva 0:96d5698a376f 80
loopsva 2:d52fb7ef7429 81 #define BQ_EXIT_CAL 0x0080
loopsva 2:d52fb7ef7429 82 #define BQ_ENTER_CAL 0x0081
loopsva 2:d52fb7ef7429 83
loopsva 2:d52fb7ef7429 84 #define BQ_ENTER_CFG_UPDATE 0x0090
loopsva 2:d52fb7ef7429 85 #define BQ_EXIT_CFG_UPDATE_REINIT 0x0091
loopsva 2:d52fb7ef7429 86 #define BQ_EXIT_CFG_UPDATE 0x0092
loopsva 0:96d5698a376f 87
loopsva 2:d52fb7ef7429 88 #define BQ_RETURN_TO_ROM 0x0F00
loopsva 0:96d5698a376f 89
loopsva 2:d52fb7ef7429 90 // CNTL_STAT register bit equates
loopsva 2:d52fb7ef7429 91 #define BQ_BIT_CS_CCA 0x0020
loopsva 2:d52fb7ef7429 92 #define BQ_BIT_CS_BCA 0x0010
loopsva 2:d52fb7ef7429 93 #define BQ_BIT_CS_SNOOZE 0x0008
loopsva 2:d52fb7ef7429 94 #define BQ_BIT_CS_BAT_ID2 0x0004
loopsva 2:d52fb7ef7429 95 #define BQ_BIT_CS_BAT_ID1 0x0002
loopsva 2:d52fb7ef7429 96 #define BQ_BIT_CS_BAT_ID0 0x0001
loopsva 0:96d5698a376f 97
loopsva 2:d52fb7ef7429 98 //GaugingStatus register bit equates
loopsva 2:d52fb7ef7429 99 #define BQ_BIT_GS_VDQ 0x8000
loopsva 2:d52fb7ef7429 100 #define BQ_BIT_GS_EDV2 0x4000
loopsva 2:d52fb7ef7429 101 #define BQ_BIT_GS_EDV1 0x2000
loopsva 2:d52fb7ef7429 102 #define BQ_BIT_GS_FCCX 0x0400
loopsva 2:d52fb7ef7429 103 #define BQ_BIT_GS_CF 0x0080
loopsva 2:d52fb7ef7429 104 #define BQ_BIT_GS_DSG 0x0040
loopsva 2:d52fb7ef7429 105 #define BQ_BIT_GS_EDV 0x0020
loopsva 2:d52fb7ef7429 106 #define BQ_BIT_GS_TC 0x0008
loopsva 2:d52fb7ef7429 107 #define BQ_BIT_GS_TD 0x0004
loopsva 2:d52fb7ef7429 108 #define BQ_BIT_GS_FC 0x0002
loopsva 2:d52fb7ef7429 109 #define BQ_BIT_GS_FD 0x0001
loopsva 0:96d5698a376f 110
loopsva 0:96d5698a376f 111
loopsva 0:96d5698a376f 112 // FLAGS register bit equates
loopsva 2:d52fb7ef7429 113 #define BQ_BIT_F_FD 0x8000
loopsva 2:d52fb7ef7429 114 #define BQ_BIT_F_OCV_COMP 0x4000
loopsva 2:d52fb7ef7429 115 #define BQ_BIT_F_OCV_FAIL 0x2000
loopsva 2:d52fb7ef7429 116 #define BQ_BIT_F_SLEEP 0x1000
loopsva 2:d52fb7ef7429 117 #define BQ_BIT_F_OTC 0x0800
loopsva 2:d52fb7ef7429 118 #define BQ_BIT_F_OTD 0x0400
loopsva 2:d52fb7ef7429 119 #define BQ_BIT_F_FC 0x0200
loopsva 2:d52fb7ef7429 120 #define BQ_BIT_F_CHGINH 0x0100
loopsva 2:d52fb7ef7429 121 #define BQ_BIT_F_TCA 0x0040
loopsva 2:d52fb7ef7429 122 #define BQ_BIT_F_OCVGD 0x0020
loopsva 2:d52fb7ef7429 123 #define BQ_BIT_F_AUTH_GD 0x0010
loopsva 2:d52fb7ef7429 124 #define BQ_BIT_F_BATTPRES 0x0008
loopsva 2:d52fb7ef7429 125 #define BQ_BIT_F_TDA 0x0004
loopsva 2:d52fb7ef7429 126 #define BQ_BIT_F_SYSDWN 0x0002
loopsva 2:d52fb7ef7429 127 #define BQ_BIT_F_DSG 0x0001
loopsva 0:96d5698a376f 128
loopsva 2:d52fb7ef7429 129 // OS register bit equates
loopsva 2:d52fb7ef7429 130 #define BQ_BIT_OS_CFGUPDATE 0x0400
loopsva 2:d52fb7ef7429 131 #define BQ_BIT_OS_BTPINT 0x0080
loopsva 2:d52fb7ef7429 132 #define BQ_BIT_OS_SMTH 0x0040
loopsva 2:d52fb7ef7429 133 #define BQ_BIT_OS_INITCOMP 0x0020
loopsva 2:d52fb7ef7429 134 #define BQ_BIT_OS_VDQ 0x0010
loopsva 2:d52fb7ef7429 135 #define BQ_BIT_OS_EDV2 0x0008
loopsva 2:d52fb7ef7429 136 #define BQ_BIT_OS_SEC1 0x0004
loopsva 2:d52fb7ef7429 137 #define BQ_BIT_OS_SEC0 0x0002
loopsva 2:d52fb7ef7429 138 #define BQ_BIT_OS_CALMD 0x0001
loopsva 1:ab433d7c3e30 139
loopsva 2:d52fb7ef7429 140 class BQ27220
loopsva 0:96d5698a376f 141 {
loopsva 0:96d5698a376f 142 public:
loopsva 0:96d5698a376f 143 /**
loopsva 2:d52fb7ef7429 144 * Data structure for BQ27220 data values.
loopsva 0:96d5698a376f 145 *
loopsva 0:96d5698a376f 146 **/
loopsva 0:96d5698a376f 147 typedef struct {
loopsva 2:d52fb7ef7429 148 uint16_t cntlReg; /*!< CNTL register */
loopsva 0:96d5698a376f 149 uint16_t arReg; /*!< AR register */
loopsva 0:96d5698a376f 150 uint16_t artteReg; /*!< ARTTE register */
loopsva 0:96d5698a376f 151 uint16_t tempReg; /*!< TEMP register */
loopsva 0:96d5698a376f 152 uint16_t voltReg; /*!< VOLT register */
loopsva 2:d52fb7ef7429 153
loopsva 2:d52fb7ef7429 154 uint16_t flagsReg; /*!< FLAGS register */
loopsva 2:d52fb7ef7429 155 uint16_t currentReg; /*!< CURRENT register */
loopsva 2:d52fb7ef7429 156 uint16_t rmReg; /*!< RM register */
loopsva 2:d52fb7ef7429 157 uint16_t fccReg; /*!< FCC register */
loopsva 0:96d5698a376f 158 uint16_t aiReg; /*!< AI register */
loopsva 2:d52fb7ef7429 159
loopsva 0:96d5698a376f 160 uint16_t tteReg; /*!< TTE register */
loopsva 0:96d5698a376f 161 uint16_t ttfReg; /*!< TTF register */
loopsva 0:96d5698a376f 162 uint16_t siReg; /*!< SI register */
loopsva 0:96d5698a376f 163 uint16_t stteReg; /*!< STTE register */
loopsva 2:d52fb7ef7429 164 uint16_t mliReg; /*!< MLI register */
loopsva 2:d52fb7ef7429 165
loopsva 2:d52fb7ef7429 166 uint16_t mltteReg; /*!< MLTTE register */
loopsva 2:d52fb7ef7429 167 uint16_t rawccReg; /*!< RCC register */
loopsva 2:d52fb7ef7429 168 uint16_t apReg; /*!< AP register */
loopsva 2:d52fb7ef7429 169 uint16_t intTempReg; /*!< INTTEMP register */
loopsva 2:d52fb7ef7429 170 uint16_t cycReg; /*!< CYC register */
loopsva 2:d52fb7ef7429 171
loopsva 2:d52fb7ef7429 172 uint16_t socReg; /*!< SOC register */
loopsva 2:d52fb7ef7429 173 uint16_t sohReg; /*!< SOH register */
loopsva 2:d52fb7ef7429 174 uint16_t cvReg; /*!< CV register */
loopsva 2:d52fb7ef7429 175 uint16_t ccReg; /*!< CC register */
loopsva 2:d52fb7ef7429 176 uint16_t btpdReg; /*!< BTPD register */
loopsva 2:d52fb7ef7429 177
loopsva 2:d52fb7ef7429 178 uint16_t btpcReg; /*!< BTPC register */
loopsva 2:d52fb7ef7429 179 uint16_t osReg; /*!< OS register */
loopsva 2:d52fb7ef7429 180 uint16_t dcReg; /*!< DC register */
loopsva 2:d52fb7ef7429 181 char macData[32]; /*!< MAC Data array */
loopsva 2:d52fb7ef7429 182 uint16_t macSumReg; /*!< MAC Data Sum register */
loopsva 2:d52fb7ef7429 183
loopsva 2:d52fb7ef7429 184 uint16_t macLenReg; /*!< MAC Data Len register */
loopsva 2:d52fb7ef7429 185 uint8_t anacReg; /*!< Analog Count register */
loopsva 2:d52fb7ef7429 186 uint16_t rawcReg; /*!< RAWC register */
loopsva 2:d52fb7ef7429 187 uint16_t rawvReg; /*!< RAWV register */
loopsva 2:d52fb7ef7429 188 uint16_t rawtReg; /*!< RAWT register */
loopsva 2:d52fb7ef7429 189
loopsva 0:96d5698a376f 190 int16_t shunt_res; /*!< Shunt Resistor value * 1000, 20 = 0.020 ohm */
loopsva 2:d52fb7ef7429 191 char i2c_Bufx[32]; /*!< i2c buffer */
loopsva 2:d52fb7ef7429 192 } BQ27220_TypeDef;
loopsva 0:96d5698a376f 193
loopsva 0:96d5698a376f 194 /** Configure data pin
loopsva 0:96d5698a376f 195 * @param data SDA and SCL pins
loopsva 2:d52fb7ef7429 196 * // @param digital output 21V control pin
loopsva 0:96d5698a376f 197 **/
loopsva 2:d52fb7ef7429 198 //BQ27220(PinName p_sda, PinName p_scl, PinName p_pgrm);
loopsva 2:d52fb7ef7429 199 BQ27220(PinName p_sda, PinName p_scl);
loopsva 2:d52fb7ef7429 200
loopsva 1:ab433d7c3e30 201
loopsva 1:ab433d7c3e30 202 /** Write default values for CNTL register and shunt resistor * 1000
loopsva 1:ab433d7c3e30 203 * @param I2c pins
loopsva 1:ab433d7c3e30 204 * @param programming enable EEPROM pin (21V)
loopsva 1:ab433d7c3e30 205 * @return none
loopsva 1:ab433d7c3e30 206 */
loopsva 2:d52fb7ef7429 207 void default_init(BQ27220_TypeDef& dataSTR);
loopsva 0:96d5698a376f 208
loopsva 0:96d5698a376f 209 /** Read all bq registers and put them into the data structure
loopsva 1:ab433d7c3e30 210 * @param pointer to data structure
loopsva 0:96d5698a376f 211 * @return i2c error, 0 = no error
loopsva 0:96d5698a376f 212 */
loopsva 2:d52fb7ef7429 213 int read_registers(BQ27220_TypeDef& dataSTR);
loopsva 0:96d5698a376f 214
loopsva 1:ab433d7c3e30 215 /** Initialize SoC for a new battery
loopsva 1:ab433d7c3e30 216 * @param pointer to data structure
loopsva 1:ab433d7c3e30 217 * @return error, 0 = no error
loopsva 1:ab433d7c3e30 218 */
loopsva 2:d52fb7ef7429 219 int new_battery_init(BQ27220_TypeDef& dataSTR);
loopsva 1:ab433d7c3e30 220
loopsva 0:96d5698a376f 221 /** Read all bq EEPROM registers and put them into the data structure
loopsva 1:ab433d7c3e30 222 * @param pointer to data structure
loopsva 0:96d5698a376f 223 * @return i2c error, 0 = no error
loopsva 0:96d5698a376f 224 */
loopsva 2:d52fb7ef7429 225 int read_eep_registers(BQ27220_TypeDef& dataSTR);
loopsva 2:d52fb7ef7429 226
loopsva 2:d52fb7ef7429 227 protected:
loopsva 2:d52fb7ef7429 228 I2C _i2c;
loopsva 1:ab433d7c3e30 229
loopsva 0:96d5698a376f 230 private:
loopsva 0:96d5698a376f 231
loopsva 0:96d5698a376f 232 };
loopsva 0:96d5698a376f 233
loopsva 2:d52fb7ef7429 234 #endif // MBED_BQ27220