TI BQ27220 I2C based, battery State of Charge and Coulomb Counter
Fork of bq27210 by
bq27210.cpp@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 | #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 | } |