TI BQ27220 I2C based, battery State of Charge and Coulomb Counter
Fork of bq27210 by
bq27210.h@0:96d5698a376f, 2017-06-13 (annotated)
- 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?
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 | 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 |