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