TI BQ27220 I2C based, battery State of Charge and Coulomb Counter
Fork of bq27210 by
bq27210.h@1:ab433d7c3e30, 2017-06-19 (annotated)
- 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?
User | Revision | Line number | New 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 |