TI BQ27220 I2C based, battery State of Charge and Coulomb Counter
Fork of bq27210 by
Diff: bq27220.h
- Revision:
- 2:d52fb7ef7429
- Parent:
- 1:ab433d7c3e30
- Child:
- 3:1b12fa9dc673
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bq27220.h Wed Jun 21 19:56:02 2017 +0000 @@ -0,0 +1,234 @@ +#ifndef MBED_BQ27220 +#define MBED_BQ27220 + +#define BQ_SHUNT_RESISTOR 10 // 0.010 ohms * 1000 + +// Set data into "addr" +#define BQ27220_ADDR 0xAA + +// Standard Commands +#define BQ_CNTL 0x00 +#define BQ_AR 0x02 +#define BQ_ARTTE 0x04 +#define BQ_TEMP 0x06 +#define BQ_VOLT 0x08 +#define BQ_FLAGS 0x0A +#define BQ_CURRENT 0x0C + +#define BQ_RM 0x10 +#define BQ_FCC 0x12 +#define BQ_AI 0x14 +#define BQ_TTE 0x16 +#define BQ_TTF 0x18 +#define BQ_SI 0x1A +#define BQ_STTE 0x1C +#define BQ_MLI 0x1E + +#define BQ_MLTTE 0x20 +#define BQ_RCC 0x22 +#define BQ_AP 0x24 + +#define BQ_INTTEMP 0x28 +#define BQ_CYC 0x2A +#define BQ_SOC 0x2C +#define BQ_SOH 0x2E + +#define BQ_CV 0x30 +#define BQ_CC 0x32 +#define BQ_BTPD 0x34 +#define BQ_BTPC 0x36 + +#define BQ_OS 0x3A +#define BQ_DC 0x3C + +#define BQ_MACDATA 0x40 + +#define BQ_MACDATASUM 0x60 +#define BQ_MACDATALEN 0x61 + +#define BQ_ANACNT 0x79 +#define BQ_RAWC 0x7A +#define BQ_RAWV 0x7C +#define BQ_RAWT 0x7E + +// Sub Commands +#define BQ_CNTL_STAT 0x0000 +#define BQ_DEVICE_NUMBER 0x0001 +#define BQ_FW_VERSION 0x0002 + +#define BQ_BOARD_OFFSET 0x0009 +#define BQ_CC_OFFSET 0x000A +#define BQ_CC_OFFSET_SAVE 0x000B +#define BQ_OCV_CMD 0x000C +#define BQ_BAT_INSERT 0x000D +#define BQ_BAT_REMOVE 0x000E + +#define BQ_SET_SNOOZE 0x0013 +#define BQ_CLEAR_SNOOZE 0x0014 +#define BQ_SET_PROFILE_1 0x0015 +#define BQ_SET_PROFILE_2 0x0016 +#define BQ_SET_PROFILE_3 0x0017 +#define BQ_SET_PROFILE_4 0x0018 +#define BQ_SET_PROFILE_5 0x0019 +#define BQ_SET_PROFILE_6 0x001A + +#define BQ_CAL_TOGGLE 0x002D + +#define BQ_SET_SEALED 0x0030 + +#define BQ_RESET 0x0040 + +#define BQ_EXIT_CAL 0x0080 +#define BQ_ENTER_CAL 0x0081 + +#define BQ_ENTER_CFG_UPDATE 0x0090 +#define BQ_EXIT_CFG_UPDATE_REINIT 0x0091 +#define BQ_EXIT_CFG_UPDATE 0x0092 + +#define BQ_RETURN_TO_ROM 0x0F00 + +// CNTL_STAT register bit equates +#define BQ_BIT_CS_CCA 0x0020 +#define BQ_BIT_CS_BCA 0x0010 +#define BQ_BIT_CS_SNOOZE 0x0008 +#define BQ_BIT_CS_BAT_ID2 0x0004 +#define BQ_BIT_CS_BAT_ID1 0x0002 +#define BQ_BIT_CS_BAT_ID0 0x0001 + +//GaugingStatus register bit equates +#define BQ_BIT_GS_VDQ 0x8000 +#define BQ_BIT_GS_EDV2 0x4000 +#define BQ_BIT_GS_EDV1 0x2000 +#define BQ_BIT_GS_FCCX 0x0400 +#define BQ_BIT_GS_CF 0x0080 +#define BQ_BIT_GS_DSG 0x0040 +#define BQ_BIT_GS_EDV 0x0020 +#define BQ_BIT_GS_TC 0x0008 +#define BQ_BIT_GS_TD 0x0004 +#define BQ_BIT_GS_FC 0x0002 +#define BQ_BIT_GS_FD 0x0001 + + +// FLAGS register bit equates +#define BQ_BIT_F_FD 0x8000 +#define BQ_BIT_F_OCV_COMP 0x4000 +#define BQ_BIT_F_OCV_FAIL 0x2000 +#define BQ_BIT_F_SLEEP 0x1000 +#define BQ_BIT_F_OTC 0x0800 +#define BQ_BIT_F_OTD 0x0400 +#define BQ_BIT_F_FC 0x0200 +#define BQ_BIT_F_CHGINH 0x0100 +#define BQ_BIT_F_TCA 0x0040 +#define BQ_BIT_F_OCVGD 0x0020 +#define BQ_BIT_F_AUTH_GD 0x0010 +#define BQ_BIT_F_BATTPRES 0x0008 +#define BQ_BIT_F_TDA 0x0004 +#define BQ_BIT_F_SYSDWN 0x0002 +#define BQ_BIT_F_DSG 0x0001 + +// OS register bit equates +#define BQ_BIT_OS_CFGUPDATE 0x0400 +#define BQ_BIT_OS_BTPINT 0x0080 +#define BQ_BIT_OS_SMTH 0x0040 +#define BQ_BIT_OS_INITCOMP 0x0020 +#define BQ_BIT_OS_VDQ 0x0010 +#define BQ_BIT_OS_EDV2 0x0008 +#define BQ_BIT_OS_SEC1 0x0004 +#define BQ_BIT_OS_SEC0 0x0002 +#define BQ_BIT_OS_CALMD 0x0001 + +class BQ27220 +{ +public: + /** + * Data structure for BQ27220 data values. + * + **/ + typedef struct { + uint16_t cntlReg; /*!< CNTL register */ + uint16_t arReg; /*!< AR register */ + uint16_t artteReg; /*!< ARTTE register */ + uint16_t tempReg; /*!< TEMP register */ + uint16_t voltReg; /*!< VOLT register */ + + uint16_t flagsReg; /*!< FLAGS register */ + uint16_t currentReg; /*!< CURRENT register */ + uint16_t rmReg; /*!< RM register */ + uint16_t fccReg; /*!< FCC 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 mliReg; /*!< MLI register */ + + uint16_t mltteReg; /*!< MLTTE register */ + uint16_t rawccReg; /*!< RCC register */ + uint16_t apReg; /*!< AP register */ + uint16_t intTempReg; /*!< INTTEMP register */ + uint16_t cycReg; /*!< CYC register */ + + uint16_t socReg; /*!< SOC register */ + uint16_t sohReg; /*!< SOH register */ + uint16_t cvReg; /*!< CV register */ + uint16_t ccReg; /*!< CC register */ + uint16_t btpdReg; /*!< BTPD register */ + + uint16_t btpcReg; /*!< BTPC register */ + uint16_t osReg; /*!< OS register */ + uint16_t dcReg; /*!< DC register */ + char macData[32]; /*!< MAC Data array */ + uint16_t macSumReg; /*!< MAC Data Sum register */ + + uint16_t macLenReg; /*!< MAC Data Len register */ + uint8_t anacReg; /*!< Analog Count register */ + uint16_t rawcReg; /*!< RAWC register */ + uint16_t rawvReg; /*!< RAWV register */ + uint16_t rawtReg; /*!< RAWT register */ + + int16_t shunt_res; /*!< Shunt Resistor value * 1000, 20 = 0.020 ohm */ + char i2c_Bufx[32]; /*!< i2c buffer */ + } BQ27220_TypeDef; + + /** Configure data pin + * @param data SDA and SCL pins + * // @param digital output 21V control pin + **/ + //BQ27220(PinName p_sda, PinName p_scl, PinName p_pgrm); + BQ27220(PinName p_sda, PinName p_scl); + + + /** Write default values for CNTL register and shunt resistor * 1000 + * @param I2c pins + * @param programming enable EEPROM pin (21V) + * @return none + */ + void default_init(BQ27220_TypeDef& dataSTR); + + /** Read all bq registers and put them into the data structure + * @param pointer to data structure + * @return i2c error, 0 = no error + */ + int read_registers(BQ27220_TypeDef& dataSTR); + + /** Initialize SoC for a new battery + * @param pointer to data structure + * @return error, 0 = no error + */ + int new_battery_init(BQ27220_TypeDef& dataSTR); + + /** Read all bq EEPROM registers and put them into the data structure + * @param pointer to data structure + * @return i2c error, 0 = no error + */ + int read_eep_registers(BQ27220_TypeDef& dataSTR); + +protected: + I2C _i2c; + +private: + +}; + +#endif // MBED_BQ27220 \ No newline at end of file