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

Fork of bq27210 by Kevin Braun

bq27210.h

Committer:
loopsva
Date:
2017-06-13
Revision:
0:96d5698a376f
Child:
1:ab433d7c3e30

File content as of revision 0:96d5698a376f:

#ifndef        MBED_BQ27210
#define        MBED_BQ27210

#define BQ_SHUNT_RESISTOR       20 // 0.020 ohms * 1000

// Set data into "addr"
#define BQ27210_ADDR            0xAA

// read/write registers RAM
#define BQ_CRTL                 0x00
#define BQ_MODE                 0x01
#define BQ_AR                   0x02
#define BQ_AR_LO                0x02
#define BQ_AR_HI                0x03

// read only registers RAM
#define BQ_ARTTE                0x04
#define BQ_ARTTE_LO             0x04
#define BQ_ARTTE_HI             0x05
#define BQ_TEMP                 0x06
#define BQ_TEMP_LO              0x06
#define BQ_TEMP_HI              0x07
#define BQ_VOLT                 0x08
#define BQ_VOLT_LO              0x08
#define BQ_VOLT_HI              0x09
#define BQ_FLAGS                0x0A
#define BQ_RSOC                 0x0B
#define BQ_NAC                  0x0C
#define BQ_NAC_LO               0x0C
#define BQ_NAC_HI               0x0D
#define BQ_LMD                  0x0E
#define BQ_LMD_LO               0x0E
#define BQ_LMD_HI               0x0F
#define BQ_CAC                  0x10
#define BQ_CAC_LO               0x10
#define BQ_CAC_HI               0x11
#define BQ_FCAC                 0x12
#define BQ_FCAC_LO              0x12
#define BQ_FCAC_HI              0x13
#define BQ_AI                   0x14
#define BQ_AI_LO                0x14
#define BQ_AI_HI                0x15
#define BQ_TTE                  0x16
#define BQ_TTE_LO               0x16
#define BQ_TTE_HI               0x17
#define BQ_TTF                  0x18
#define BQ_TTF_LO               0x18
#define BQ_TTF_HI               0x19
#define BQ_SI                   0x1A
#define BQ_SI_LO                0x1A
#define BQ_SI_HI                0x1B
#define BQ_STTE                 0x1C
#define BQ_STTE_LO              0x1C
#define BQ_STTE_HI              0x1D
#define BQ_CEDV                 0x20
#define BQ_CEDV_LO              0x20
#define BQ_CEDV_HI              0x21
#define BQ_TTECP                0x26
#define BQ_TTECP_LO             0x26
#define BQ_TTECP_HI             0x27
#define BQ_CYCL                 0x28
#define BQ_CYCL_LO              0x28
#define BQ_CYCL_HI              0x29
#define BQ_CYCT                 0x2A
#define BQ_CYCT_LO              0x2A
#define BQ_CYCT_HI              0x2B
#define BQ_CSOC                 0x2C

// read/write registers EEPROM
#define BQ_EE_EN                0x6E

#define BQ_ILMD                 0x76
#define BQ_SEDVF                0x77
#define BQ_SEDV1                0x78
#define BQ_ISLC_EDVT            0x79
#define BQ_DMFSD                0x7A
#define BQ_TAPER                0x7B
#define BQ_PKCFG                0x7C
#define BQ_GAF_DEDV             0x7D
#define BQ_DCOMP                0x7E
#define BQ_TCOMP                0x7F

// CNTL and MODE bit equates
#define BQ_COMMAND_0xA9         0xA9
#define BQ_COMMAND_0x56         0x56
#define BQ_COMMAND_0xC5         0xC5

#define BQ_BIT_GPIEN            0x80
#define BQ_BIT_GPSTAT           0x40
#define BQ_BIT_INIT             0x04

#define BQ_BIT_WRTNAC           0x20
#define BQ_BIT_CEO              0x20
#define BQ_BIT_UPDC             0x20

#define BQ_BIT_DONE             0x10
#define BQ_BIT_CIO              0x10
#define BQ_BIT_UPEDVI           0x10

#define BQ_BIT_PRST             0x08
#define BQ_BIT_WNACCI           0x08
#define BQ_BIT_UPDMF            0x08

#define BQ_BIT_FRST             0x02
#define BQ_BIT_WRTCYC           0x02
#define BQ_BIT_UPCFG            0x02

#define BQ_BIT_SHIP             0x01
#define BQ_BIT_WRTLMD           0x01
#define BQ_BIT_UPCOMP           0x01

// FLAGS register bit equates
#define BQ_BIT_CHGS             0x80
#define BQ_BIT_NOACT            0x40
#define BQ_BIT_IMIN             0x20
#define BQ_BIT_CI               0x10
#define BQ_BIT_CALIP            0x08
#define BQ_BIT_VDQ              0x04
#define BQ_BIT_EDVI             0x02
#define BQ_BIT_EDVF             0x01

class BQ27210
{
public:
    /** 
     * Data structure for BQ27210 data values.
     * 
    **/
    typedef struct {
        uint8_t cntlReg;        /*!< CNTL register */
        uint8_t modeReg;        /*!< MODE register */
        uint16_t arReg;         /*!< AR register */
        uint16_t artteReg;      /*!< ARTTE register */
        uint16_t tempReg;       /*!< TEMP register */
        uint16_t voltReg;       /*!< VOLT register */
        uint8_t flagsReg;       /*!< FLAGS register */
        uint8_t rsocReg;        /*!< RSOC register */
        uint16_t nacReg;        /*!< NAC register */
        uint16_t lmdReg;        /*!< LMD register */
        uint16_t cacReg;        /*!< CAC register */
        uint16_t fcacReg;       /*!< FCAC register */
        uint16_t aiReg;         /*!< AI register */
        uint16_t tteReg;        /*!< TTE register */
        uint16_t ttfReg;        /*!< TTF register */
        uint16_t siReg;         /*!< SI register */
        uint16_t stteReg;       /*!< STTE register */
        uint16_t junk1;         /*!< reserved */
        uint16_t cedvReg;       /*!< CEDV register */
        uint16_t junk2;         /*!< reserved */
        uint16_t junk3;         /*!< reserved */
        uint16_t ttecpReg;      /*!< TTECP register */
        uint16_t cyclReg;       /*!< CYCL register */
        uint16_t cyctReg;       /*!< CYCT register */
        uint8_t csocReg;        /*!< CSOC register */
                                /*!< big gap */
        uint8_t eeEnReg;        /*!< EE_EN register */
                                /*!< big gap */
        uint8_t ilmdReg;        /*!< ILMD register */
        uint8_t sedvfReg;       /*!< SEDVF register */
        uint8_t sedv1Reg;       /*!< SEDV1 register */
        uint8_t islcEdvtReg;    /*!< ISLC/EDVT register */
        uint8_t dmfsdReg;       /*!< DMFSD register */
        uint8_t taperReg;       /*!< TAPER register */
        uint8_t pkcfgReg;       /*!< PKCFG register */
        uint8_t gafDedvReg;     /*!< GAF/DEDV register */
        uint8_t dcompReg;       /*!< DCOMP register */
        uint8_t tcompReg;       /*!< TCOMP register */
        int16_t shunt_res;      /*!< Shunt Resistor value * 1000, 20 = 0.020 ohm */
        char i2c_Bufx[48];        /*!< i2c buffer */
    } BQ27210_TypeDef;
    
    /** Configure data pin
     * @param data SDA and SCL pins
    **/
    BQ27210(PinName p_sda, PinName p_scl);
    
    /** Read all bq registers and put them into the data structure
      * @param none
      * @return i2c error, 0 = no error
      */
    int read_registers(BQ27210_TypeDef& dataSTR);
    
    /** Read all bq EEPROM registers and put them into the data structure
      * @param none
      * @return i2c error, 0 = no error
      */
    int read_eep_registers(BQ27210_TypeDef& dataSTR);
    
private:
    //char i2c_Buf[48];           /* i2c buffer */
    
protected:
    I2C  _i2c;


};

#endif // MBED_BQ27210