TI BQ27220 I2C based, battery State of Charge and Coulomb Counter
Fork of bq27210 by
Diff: bq27210.h
- Revision:
- 1:ab433d7c3e30
- Parent:
- 0:96d5698a376f
--- a/bq27210.h Tue Jun 13 16:21:47 2017 +0000 +++ b/bq27210.h Mon Jun 19 22:28:50 2017 +0000 @@ -2,6 +2,11 @@ #define MBED_BQ27210 #define BQ_SHUNT_RESISTOR 20 // 0.020 ohms * 1000 +#define BQ_AR_VALUE 1121 // 200mA + +#define BQ_NEW_ILMD 0x21 +#define BQ_NEW_SEDVF 0x02 +#define BQ_NEW_SEDV1 0x24 // Set data into "addr" #define BQ27210_ADDR 0xAA @@ -68,6 +73,7 @@ // read/write registers EEPROM #define BQ_EE_EN 0x6E +#define BQ_EE_WRITE_EN 0xdd #define BQ_ILMD 0x76 #define BQ_SEDVF 0x77 @@ -85,10 +91,12 @@ #define BQ_COMMAND_0x56 0x56 #define BQ_COMMAND_0xC5 0xC5 +// bits common to all COMMAND types #define BQ_BIT_GPIEN 0x80 #define BQ_BIT_GPSTAT 0x40 #define BQ_BIT_INIT 0x04 +// bits unique to COMMAND types #define BQ_BIT_WRTNAC 0x20 #define BQ_BIT_CEO 0x20 #define BQ_BIT_UPDC 0x20 @@ -119,6 +127,14 @@ #define BQ_BIT_EDVI 0x02 #define BQ_BIT_EDVF 0x01 +/** + * Factory default EEPROM data values, starting at BQ_ILMD + * +**/ +static const char bq_EEP_Defaults[10] = { + 0x2c, 0x77, 0xa9, 0x48, 0x48, 0x89, 0x63, 0x66, 0x6c, 0x46 +}; + class BQ27210 { public: @@ -165,32 +181,54 @@ uint8_t gafDedvReg; /*!< GAF/DEDV register */ uint8_t dcompReg; /*!< DCOMP register */ uint8_t tcompReg; /*!< TCOMP register */ + int8_t cmmd_key; /*!< Command Key 0xA9, 0x56 or 0xC5 */ int16_t shunt_res; /*!< Shunt Resistor value * 1000, 20 = 0.020 ohm */ - char i2c_Bufx[48]; /*!< i2c buffer */ + char i2c_Bufx[48]; /*!< i2c buffer */ } BQ27210_TypeDef; /** Configure data pin * @param data SDA and SCL pins + * @param digital output 21V control pin **/ - BQ27210(PinName p_sda, PinName p_scl); + BQ27210(PinName p_sda, PinName p_scl, PinName p_pgrm); + + /** Write default values for CNTL register and shunt resistor * 1000 + * @param I2c pins + * @param programming enable EEPROM pin (21V) + * @return none + */ + void default_init(BQ27210_TypeDef& dataSTR); /** Read all bq registers and put them into the data structure - * @param none + * @param pointer to data structure * @return i2c error, 0 = no error */ int read_registers(BQ27210_TypeDef& dataSTR); + /** Initialize SoC for a new battery + * @param pointer to data structure + * @return error, 0 = no error + */ + int new_battery_init(BQ27210_TypeDef& dataSTR); + /** Read all bq EEPROM registers and put them into the data structure - * @param none + * @param pointer to data structure * @return i2c error, 0 = no error */ int read_eep_registers(BQ27210_TypeDef& dataSTR); + /** Write all bq EEPROM registers and put them into the data structure + * @param pointer to data structure, 21V needed + * @return i2c error, 0 = no error + */ + int write_eep_registers(BQ27210_TypeDef& dataSTR); + private: //char i2c_Buf[48]; /* i2c buffer */ protected: I2C _i2c; + DigitalOut _pgm; };