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

Fork of bq27210 by Kevin Braun

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?

UserRevisionLine numberNew contents of line
loopsva 0:96d5698a376f 1 #include "mbed.h"
loopsva 0:96d5698a376f 2 #include "bq27210.h"
loopsva 0:96d5698a376f 3 #define i2c_Buf dataSTR.i2c_Bufx
loopsva 0:96d5698a376f 4
loopsva 0:96d5698a376f 5 BQ27210::BQ27210 (PinName p_sda, PinName p_scl) :
loopsva 0:96d5698a376f 6 _i2c(p_sda, p_scl)
loopsva 0:96d5698a376f 7 {
loopsva 0:96d5698a376f 8 _i2c.frequency(100000);
loopsva 0:96d5698a376f 9 }
loopsva 0:96d5698a376f 10
loopsva 0:96d5698a376f 11 int BQ27210::read_registers(BQ27210_TypeDef& dataSTR)
loopsva 0:96d5698a376f 12 {
loopsva 0:96d5698a376f 13 i2c_Buf[0] = BQ_CRTL;
loopsva 0:96d5698a376f 14 int result = _i2c.write((int)BQ27210_ADDR, i2c_Buf, 1, true);
loopsva 0:96d5698a376f 15 if(result) return(result);
loopsva 0:96d5698a376f 16 _i2c.read((int)BQ27210_ADDR +1, i2c_Buf, 45, false);
loopsva 0:96d5698a376f 17
loopsva 0:96d5698a376f 18 dataSTR.cntlReg = i2c_Buf[BQ_CRTL];
loopsva 0:96d5698a376f 19 dataSTR.modeReg = i2c_Buf[BQ_MODE];
loopsva 0:96d5698a376f 20 dataSTR.arReg = (i2c_Buf[BQ_AR_HI] << 8) | i2c_Buf[BQ_AR_LO];
loopsva 0:96d5698a376f 21 dataSTR.artteReg = (i2c_Buf[BQ_ARTTE_HI] << 8) | i2c_Buf[BQ_ARTTE_LO];
loopsva 0:96d5698a376f 22 dataSTR.tempReg = (i2c_Buf[BQ_TEMP_HI] << 8) | i2c_Buf[BQ_TEMP_LO];
loopsva 0:96d5698a376f 23 dataSTR.voltReg = (i2c_Buf[BQ_VOLT_HI] << 8) | i2c_Buf[BQ_VOLT_LO];
loopsva 0:96d5698a376f 24 dataSTR.flagsReg = i2c_Buf[BQ_FLAGS];
loopsva 0:96d5698a376f 25 dataSTR.rsocReg = i2c_Buf[BQ_RSOC];
loopsva 0:96d5698a376f 26 dataSTR.nacReg = (i2c_Buf[BQ_NAC_HI] << 8) | i2c_Buf[BQ_NAC_LO];
loopsva 0:96d5698a376f 27 dataSTR.lmdReg = (i2c_Buf[BQ_LMD_HI] << 8) | i2c_Buf[BQ_LMD_LO];
loopsva 0:96d5698a376f 28 dataSTR.cacReg = (i2c_Buf[BQ_CAC_HI] << 8) | i2c_Buf[BQ_CAC_LO];
loopsva 0:96d5698a376f 29 dataSTR.fcacReg = (i2c_Buf[BQ_FCAC_HI] << 8) | i2c_Buf[BQ_FCAC_LO];
loopsva 0:96d5698a376f 30 dataSTR.aiReg = (i2c_Buf[BQ_AI_HI] << 8) | i2c_Buf[BQ_AI_LO];
loopsva 0:96d5698a376f 31 dataSTR.tteReg = (i2c_Buf[BQ_TTE_HI] << 8) | i2c_Buf[BQ_TTE_LO];
loopsva 0:96d5698a376f 32 dataSTR.ttfReg = (i2c_Buf[BQ_TTF_HI] << 8) | i2c_Buf[BQ_TTF_LO];
loopsva 0:96d5698a376f 33 dataSTR.siReg = (i2c_Buf[BQ_SI_HI] << 8) | i2c_Buf[BQ_SI_LO];
loopsva 0:96d5698a376f 34 dataSTR.stteReg = (i2c_Buf[BQ_STTE_HI] << 8) | i2c_Buf[BQ_STTE_LO];
loopsva 0:96d5698a376f 35 dataSTR.junk1 = (i2c_Buf[BQ_STTE_HI +2] << 8) | i2c_Buf[BQ_STTE_LO +2];
loopsva 0:96d5698a376f 36 dataSTR.cedvReg = (i2c_Buf[BQ_CEDV_HI] << 8) | i2c_Buf[BQ_CEDV_LO];
loopsva 0:96d5698a376f 37 dataSTR.junk2 = (i2c_Buf[BQ_CEDV_HI +2] << 8) | i2c_Buf[BQ_CEDV_LO +2];
loopsva 0:96d5698a376f 38 dataSTR.junk3 = (i2c_Buf[BQ_CEDV_HI +4] << 8) | i2c_Buf[BQ_CEDV_LO +4];
loopsva 0:96d5698a376f 39 dataSTR.ttecpReg = (i2c_Buf[BQ_TTECP_HI] << 8) | i2c_Buf[BQ_TTECP_LO];
loopsva 0:96d5698a376f 40 dataSTR.cyclReg = (i2c_Buf[BQ_CYCL_HI] << 8) | i2c_Buf[BQ_CYCL_LO];
loopsva 0:96d5698a376f 41 dataSTR.cyctReg = (i2c_Buf[BQ_CYCT_HI] << 8) | i2c_Buf[BQ_CYCT_LO];
loopsva 0:96d5698a376f 42 dataSTR.csocReg = i2c_Buf[BQ_CSOC];
loopsva 0:96d5698a376f 43 dataSTR.shunt_res = BQ_SHUNT_RESISTOR;
loopsva 0:96d5698a376f 44 return(0);
loopsva 0:96d5698a376f 45 }
loopsva 0:96d5698a376f 46
loopsva 0:96d5698a376f 47 int BQ27210::read_eep_registers(BQ27210_TypeDef& dataSTR)
loopsva 0:96d5698a376f 48 {
loopsva 0:96d5698a376f 49 i2c_Buf[0] = BQ_EE_EN;
loopsva 0:96d5698a376f 50 int result = _i2c.write((int)BQ27210_ADDR, i2c_Buf, 1, true);
loopsva 0:96d5698a376f 51 if(result) return(result);
loopsva 0:96d5698a376f 52 _i2c.read((int)BQ27210_ADDR +1, i2c_Buf, 1, false);
loopsva 0:96d5698a376f 53 dataSTR.eeEnReg = i2c_Buf[0];
loopsva 0:96d5698a376f 54
loopsva 0:96d5698a376f 55 i2c_Buf[0] = BQ_ILMD;
loopsva 0:96d5698a376f 56 result = _i2c.write((int)BQ27210_ADDR, i2c_Buf, 1, true);
loopsva 0:96d5698a376f 57 _i2c.read((int)BQ27210_ADDR +1, i2c_Buf, 10, false);
loopsva 0:96d5698a376f 58 dataSTR.ilmdReg = i2c_Buf[0];
loopsva 0:96d5698a376f 59 dataSTR.sedvfReg = i2c_Buf[1];
loopsva 0:96d5698a376f 60 dataSTR.sedv1Reg = i2c_Buf[2];
loopsva 0:96d5698a376f 61 dataSTR.islcEdvtReg = i2c_Buf[3];
loopsva 0:96d5698a376f 62 dataSTR.dmfsdReg = i2c_Buf[4];
loopsva 0:96d5698a376f 63 dataSTR.taperReg = i2c_Buf[5];
loopsva 0:96d5698a376f 64 dataSTR.pkcfgReg = i2c_Buf[6];
loopsva 0:96d5698a376f 65 dataSTR.gafDedvReg = i2c_Buf[7];
loopsva 0:96d5698a376f 66 dataSTR.dcompReg = i2c_Buf[8];
loopsva 0:96d5698a376f 67 dataSTR.tcompReg = i2c_Buf[9];
loopsva 0:96d5698a376f 68 return(0);
loopsva 0:96d5698a376f 69 }