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

Fork of bq27210 by Kevin Braun

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers bq27220.h Source File

bq27220.h

00001 #ifndef        MBED_BQ27220
00002 #define        MBED_BQ27220
00003 
00004 #define BQ_SHUNT_RESISTOR       10 // 0.010 ohms * 1000
00005 
00006 // Set data into "addr"
00007 #define BQ27220_ADDR            0xAA
00008 
00009 // Standard Commands
00010 #define BQ_CNTL                 0x00
00011 #define BQ_AR                   0x02
00012 #define BQ_ARTTE                0x04
00013 #define BQ_TEMP                 0x06
00014 #define BQ_VOLT                 0x08
00015 #define BQ_FLAGS                0x0A
00016 #define BQ_CURRENT              0x0C
00017 
00018 #define BQ_RM                   0x10
00019 #define BQ_FCC                  0x12
00020 #define BQ_AI                   0x14
00021 #define BQ_TTE                  0x16
00022 #define BQ_TTF                  0x18
00023 #define BQ_SI                   0x1A
00024 #define BQ_STTE                 0x1C
00025 #define BQ_MLI                  0x1E
00026 
00027 #define BQ_MLTTE                0x20
00028 #define BQ_RCC                  0x22
00029 #define BQ_AP                   0x24
00030 
00031 #define BQ_INTTEMP              0x28
00032 #define BQ_CYC                  0x2A
00033 #define BQ_SOC                  0x2C
00034 #define BQ_SOH                  0x2E
00035 
00036 #define BQ_CV                   0x30
00037 #define BQ_CC                   0x32
00038 #define BQ_BTPD                 0x34
00039 #define BQ_BTPC                 0x36
00040 
00041 #define BQ_OS                   0x3A
00042 #define BQ_DC                   0x3C
00043 #define BQ_SUB                  0x3E
00044 
00045 #define BQ_MACDATA              0x40
00046 
00047 #define BQ_MACDATASUM           0x60
00048 #define BQ_MACDATALEN           0x61
00049 
00050 #define BQ_ANACNT               0x79
00051 #define BQ_RAWC                 0x7A
00052 #define BQ_RAWV                 0x7C
00053 #define BQ_RAWT                 0x7E
00054 
00055 // Sub Commands
00056 #define BQ_CNTL_STAT            0x0000
00057 #define BQ_DEVICE_NUMBER        0x0001
00058 #define BQ_FW_VERSION           0x0002
00059 #define BQ_HW_VERSION           0x0003
00060 
00061 #define BQ_BOARD_OFFSET         0x0009
00062 #define BQ_CC_OFFSET            0x000A
00063 #define BQ_CC_OFFSET_SAVE       0x000B
00064 #define BQ_OCV_CMD              0x000C
00065 #define BQ_BAT_INSERT           0x000D
00066 #define BQ_BAT_REMOVE           0x000E
00067 
00068 #define BQ_SET_SNOOZE           0x0013
00069 #define BQ_CLEAR_SNOOZE         0x0014
00070 #define BQ_SET_PROFILE_1        0x0015
00071 #define BQ_SET_PROFILE_2        0x0016
00072 #define BQ_SET_PROFILE_3        0x0017
00073 #define BQ_SET_PROFILE_4        0x0018
00074 #define BQ_SET_PROFILE_5        0x0019
00075 #define BQ_SET_PROFILE_6        0x001A
00076 
00077 #define BQ_CAL_TOGGLE           0x002D
00078 
00079 #define BQ_SET_SEALED           0x0030
00080 
00081 #define BQ_RESET                0x0041
00082 
00083 #define BQ_OP_STATUS            0x0054
00084 #define BQ_GAUGE_STATUS         0x0056
00085 
00086 #define BQ_EXIT_CAL             0x0080
00087 #define BQ_ENTER_CAL            0x0081
00088 
00089 #define BQ_ENTER_CFG_UPDATE     0x0090
00090 #define BQ_EXIT_CFG_UPDATE_REINIT  0x0091
00091 #define BQ_EXIT_CFG_UPDATE      0x0092
00092 
00093 #define BQ_RETURN_TO_ROM        0x0F00
00094 
00095 // Configuration parameters
00096 #define BQ_CONFIG_CC_GAIN       0x9184      //float
00097 
00098 #define BQ_CONFIG_CHG_INH_LO    0x91f5      //int16_t
00099 #define BQ_CONFIG_CHG_INH_HI    0x91f7      //int16_t
00100 #define BQ_CONFIG_CHG_INH_HYST  0x91f9      //int16_t
00101 #define BQ_CONFIG_CHG_CURR      0x91fb      //int16_t
00102 #define BQ_CONFIG_CHG_VOLT      0x91fd      //int16_t
00103 
00104 #define BQ_CONFIG_TAPER_CURR    0x9201      //int16_t
00105 #define BQ_CONFIG_OP_CONFIG_A   0x9206      //uint16_t
00106 #define BQ_CONFIG_OP_CONFIG_B   0x9208      //uint16_t
00107 #define BQ_CONFIG_SOC_DELTA     0x920b      //uint8_t
00108 #define BQ_CONFIG_CLK_CTRL      0x920c      //uint8_t
00109 #define BQ_CONFIG_IO_CONFIG     0x920d      //uint8_t
00110 #define BQ_CONFIG_INIT_DIS_SET  0x920e      //int16_t
00111 #define BQ_CONFIG_INIT_CHG_SET  0x9210      //int16_t
00112 #define BQ_CONFIG_DEVICE_TYPE   0x9212      //uint16_t
00113 
00114 #define BQ_CONFIG_SLEEP_CURR    0x9217      //int16_t
00115 #define BQ_CONFIG_BUS_LO_TIME   0x9219      //uint8_t
00116 #define BQ_CONFIG_OC_INH_T_LO   0x921a      //int16_t
00117 #define BQ_CONFIG_OC_INH_T_HI   0x921c      //int16_t
00118 #define BQ_CONFIG_SLEEP_V_TIME  0x921e      //uint8_t
00119 #define BQ_CONFIG_SLEEP_C_TIME  0x921f      //uint8_t
00120 
00121 #define BQ_CONFIG_DIS_DET_THRES 0x9228      //int16_t
00122 #define BQ_CONFIG_CHG_DET_THRES 0x922a      //int16_t
00123 #define BQ_CONFIG_QUIT_CURR     0x922c      //int16_t
00124 #define BQ_CONFIG_DIS_RELAX_TI  0x922e      //uint16_t
00125 
00126 #define BQ_CONFIG_CHG_RELAX_TI  0x9230      //uint8_t
00127 #define BQ_CONFIG_QUIT_RELAX_TI 0x9231      //uint8_t
00128 
00129 #define BQ_CONFIG_OT_CHG        0x9232      //int16_t
00130 #define BQ_CONFIG_OT_CHG_TIME   0x9234      //uint8_t
00131 #define BQ_CONFIG_OT_CGH_RECOV  0x9235      //int16_t
00132 #define BQ_CONFIG_OT_DSG        0x9237      //int16_t
00133 #define BQ_CONFIG_OT_DSG_TIME   0x9239      //uint8_t
00134 #define BQ_CONFIG_OT_DSG_RECOV  0x923a      //int16_t
00135 #define BQ_CONFIG_INIT_STBY     0x923c      //int8_t
00136 
00137 #define BQ_CONFIG_SYSD_S_VTHRS  0x9240      //int16_t
00138 #define BQ_CONFIG_SYSD_S_VTIME  0x9242      //uint8_t
00139 #define BQ_CONFIG_SYSD_C_VTHRS  0x9243      //int16_t
00140 
00141 #define BQ_GG_SMOOTHING_CONFIG  0x9271      //uint8_t
00142 #define BQ_CONFIG_FLAG_CONFIG_A 0x927f      //uint16_t
00143 #define BQ_CONFIG_FLAG_CONFIG_B 0x9281      //uint8_t
00144 
00145 #define BQ_CONFIG_BATTERY_ID    0x929a      //uint8_t
00146 
00147 // Gas Gauge parameters
00148 #define BQ_GG_CEDVp1_GAUGE_CONF 0x929b      //uint16_t
00149 #define BQ_GG_CEDVp1_FULLC_CAP  0x929d      //int16_t 15 bits
00150 #define BQ_GG_CEDVp1_DESIGN_CAP 0x929f      //int16_t 15 bits
00151 #define BQ_GG_CEDVp1_DESIGN_V   0x92a3      //int16_t 15 bits
00152 #define BQ_GG_CEDVp1_CHG_TERM_V 0x92a5      //int16_t
00153 #define BQ_GG_CEDVp1_EMF        0x92a7      //uint16_t
00154 #define BQ_GG_CEDVp1_C0         0x92a9      //uint16_t
00155 #define BQ_GG_CEDVp1_R0         0x92ab      //uint16_t
00156 #define BQ_GG_CEDVp1_T0         0x92ad      //uint16_t
00157 #define BQ_GG_CEDVp1_R1         0x92af      //uint16_t
00158 #define BQ_GG_CEDVp1_TC         0x92b1      //uint8_t
00159 #define BQ_GG_CEDVp1_C1         0x92b2      //uint8_t
00160 #define BQ_GG_CEDVp1_AGE_FACTOR 0x92b3      //uint8_t
00161 #define BQ_GG_CEDVp1_FIXED_EDV0 0x92b4      //int16_t
00162 #define BQ_GG_CEDVp1_HOLDT_EDV0 0x92b6      //uint8_t
00163 #define BQ_GG_CEDVp1_FIXED_EDV1 0x92b7      //int16_t
00164 #define BQ_GG_CEDVp1_HOLDT_EDV1 0x92b9      //uint8_t
00165 #define BQ_GG_CEDVp1_FIXED_EDV2 0x92ba      //int16_t
00166 #define BQ_GG_CEDVp1_HOLDT_EDV2 0x92bc      //uint8_t
00167 
00168 // CNTL_STAT register bit equates
00169 #define BQ_BIT_CS_CCA           0x0020
00170 #define BQ_BIT_CS_BCA           0x0010
00171 #define BQ_BIT_CS_SNOOZE        0x0008
00172 #define BQ_BIT_CS_BAT_ID2       0x0004
00173 #define BQ_BIT_CS_BAT_ID1       0x0002
00174 #define BQ_BIT_CS_BAT_ID0       0x0001
00175 #define BQ_BIT_CS_BAT_ID        (BQ_BIT_CS_BAT_ID2 | BQ_BIT_CS_BAT_ID1 | BQ_BIT_CS_BAT_ID0)
00176 
00177 // Gauging Status register bit equates
00178 #define BQ_BIT_GS_VDQ           0x8000
00179 #define BQ_BIT_GS_EDV2          0x4000
00180 #define BQ_BIT_GS_EDV1          0x2000
00181 #define BQ_BIT_GS_RSVD1         0x1000
00182 #define BQ_BIT_GS_RSVD2         0x0800
00183 #define BQ_BIT_GS_FCCX          0x0400
00184 #define BQ_BIT_GS_RSVD3         0x0200
00185 #define BQ_BIT_GS_RSVD4         0x0100
00186 #define BQ_BIT_GS_CF            0x0080
00187 #define BQ_BIT_GS_DSG           0x0040
00188 #define BQ_BIT_GS_EDV           0x0020
00189 #define BQ_BIT_GS_RSVD5         0x0010
00190 #define BQ_BIT_GS_TC            0x0008
00191 #define BQ_BIT_GS_TD            0x0004
00192 #define BQ_BIT_GS_FC            0x0002
00193 #define BQ_BIT_GS_FD            0x0001
00194 
00195 // CEDV Gauging Configuration register bit equates
00196 #define BQ_BIT_GC_SME0          0x1000
00197 #define BQ_BIT_GC_IGNORE_SD     0x0800
00198 #define BQ_BIT_GC_FC_FOR_VDQ    0x0400
00199 #define BQ_BIT_GC_FCC_LIMIT     0x0100
00200 #define BQ_BIT_GC_FIXED_EDV0    0x0020
00201 #define BQ_BIT_GC_SC            0x0010
00202 #define BQ_BIT_GC_EDV_CMP       0x0008
00203 #define BQ_BIT_GC_CSYNC         0x0002
00204 #define BQ_BIT_GC_CCT           0x0001
00205 
00206 // FLAGS register bit equates
00207 #define BQ_BIT_F_FD             0x8000
00208 #define BQ_BIT_F_OCV_COMP       0x4000
00209 #define BQ_BIT_F_OCV_FAIL       0x2000
00210 #define BQ_BIT_F_SLEEP          0x1000
00211 #define BQ_BIT_F_OTC            0x0800
00212 #define BQ_BIT_F_OTD            0x0400
00213 #define BQ_BIT_F_FC             0x0200
00214 #define BQ_BIT_F_CHGINH         0x0100
00215 #define BQ_BIT_F_TCA            0x0040
00216 #define BQ_BIT_F_OCVGD          0x0020
00217 #define BQ_BIT_F_AUTH_GD        0x0010
00218 #define BQ_BIT_F_BATTPRES       0x0008
00219 #define BQ_BIT_F_TDA            0x0004
00220 #define BQ_BIT_F_SYSDWN         0x0002
00221 #define BQ_BIT_F_DSG            0x0001
00222 
00223 // OS register bit equates
00224 #define BQ_BIT_OS_CFGUPDATE     0x0400
00225 #define BQ_BIT_OS_BTPINT        0x0080
00226 #define BQ_BIT_OS_SMTH          0x0040
00227 #define BQ_BIT_OS_INITCOMP      0x0020
00228 #define BQ_BIT_OS_VDQ           0x0010
00229 #define BQ_BIT_OS_EDV2          0x0008
00230 #define BQ_BIT_OS_SEC1          0x0004
00231 #define BQ_BIT_OS_SEC0          0x0002
00232 #define BQ_BIT_OS_CALMD         0x0001
00233 
00234 // Operation Config Reg A bit equates
00235 #define BQ_BIT_OCA_TEMPS        0x8000
00236 #define BQ_BIT_OCA_RSVD1        0x4000
00237 #define BQ_BIT_OCA_BATG_POL     0x2000
00238 #define BQ_BIT_OCA_BATG_EN      0x1000
00239 #define BQ_BIT_OCA_RSVD2        0x0800
00240 #define BQ_BIT_OCA_SLEEP        0x0400
00241 #define BQ_BIT_OCA_SLPWAKECHG   0x0200
00242 #define BQ_BIT_OCA_WRTEMP       0x0100
00243 #define BQ_BIT_OCA_BIE          0x0080
00244 #define BQ_BIT_OCA_RSVD3        0x0040
00245 #define BQ_BIT_OCA_BI_PUP_EN    0x0020
00246 #define BQ_BIT_OCA_PFC_CFG1     0x0010
00247 #define BQ_BIT_OCA_PFC_CFG0     0x0008
00248 #define BQ_BIT_OCA_WAKE_EN      0x0004
00249 #define BQ_BIT_OCA_WK_TH1       0x0002
00250 #define BQ_BIT_OCA_WK_TH0       0x0001
00251 
00252 // Operation Config Reg B bit equates
00253 #define BQ_BIT_OCB_RSVD1        0x8000
00254 #define BQ_BIT_OCB_RSVD2        0x4000
00255 #define BQ_BIT_OCB_RSVD3        0x2000
00256 #define BQ_BIT_OCB_RSVD4        0x1000
00257 #define BQ_BIT_OCB_DEF_SEAL     0x0800
00258 #define BQ_BIT_OCB_NR           0x0400
00259 #define BQ_BIT_OCB_RSVD5        0x0200
00260 #define BQ_BIT_OCB_RSVD6        0x0100
00261 #define BQ_BIT_OCB_INT_BREM     0x0080
00262 #define BQ_BIT_OCB_INT_BATL     0x0040
00263 #define BQ_BIT_OCB_INT_STATE    0x0020
00264 #define BQ_BIT_OCB_INT_OCV      0x0010
00265 #define BQ_BIT_OCB_RSVD7        0x0008
00266 #define BQ_BIT_OCB_INT_OT       0x0004
00267 #define BQ_BIT_OCB_INT_POL      0x0002
00268 #define BQ_BIT_OCB_INT_FOCV     0x0001
00269 
00270 // SOC Flags Reg A bit equates
00271 #define BQ_BIT_SOCFA_TCSETVCT   0x0800
00272 #define BQ_BIT_SOCFA_FCSETVCT   0x0400
00273 #define BQ_BIT_SOCFA_TCCLEARRSOC 0x0080
00274 #define BQ_BIT_SOCFA_TCSETRSOC  0x0040
00275 #define BQ_BIT_SOCFA_TCCLEARV   0x0020
00276 #define BQ_BIT_SOCFA_TCSETV     0x0010
00277 #define BQ_BIT_SOCFA_TDCLEARRSOC 0x0008
00278 #define BQ_BIT_SOCFA_TDSETRSOC  0x0004
00279 #define BQ_BIT_SOCFA_TDCLEARV   0x0002
00280 #define BQ_BIT_SOCFA_TDSETV     0x0001
00281 
00282 // SOC Flags Reg B bit equates
00283 #define BQ_BIT_SOCFB_FCCLEARRSOC 0x0080
00284 #define BQ_BIT_SOCFB_FCSETRSOC  0x0040
00285 #define BQ_BIT_SOCFB_FCCLEARV   0x0020
00286 #define BQ_BIT_SOCFB_FCSETV     0x0010
00287 #define BQ_BIT_SOCFB_FDCLEARRSOC 0x0008
00288 #define BQ_BIT_SOCFB_FDSETRSOC  0x0004
00289 #define BQ_BIT_SOCFB_FDCCLEARV  0x0002
00290 #define BQ_BIT_SOCFB_FDSETV     0x0001
00291 
00292 // IO Config bit equates
00293 #define BQ_BIT_IOCFG_BtpIntPol  0x0002
00294 #define BQ_BIT_SOCFB_BTpIntEn   0x0001
00295 
00296 // Smoothing Config bit equates
00297 #define BQ_BIT_SMOC_SMOOTH_EOC_EN   0x0008
00298 #define BQ_BIT_SMOC_CMEXT       0x0004
00299 #define BQ_BIT_SMOC_VAVG        0x0002
00300 #define BQ_BIT_SMOC_SMEN        0x0001
00301     
00302 class BQ27220
00303 {
00304 public:
00305     /** 
00306      * Data structure for BQ27220 data values.
00307      * 
00308     **/
00309     typedef struct {
00310         uint16_t cntlReg ;       /*!< CNTL register */
00311          int16_t arReg ;         /*!< AR register */
00312         uint16_t artteReg ;      /*!< ARTTE register */
00313         uint16_t tempReg ;       /*!< TEMP register */
00314         uint16_t voltReg ;       /*!< VOLT register */
00315         
00316         uint16_t flagsReg ;      /*!< FLAGS register */
00317          int16_t currentReg ;    /*!< CURRENT register */
00318         uint16_t rmReg ;         /*!< RM register */
00319         uint16_t fccReg ;        /*!< FCC register */
00320         uint16_t aiReg ;         /*!< AI register */
00321         
00322         uint16_t tteReg ;        /*!< TTE register */
00323         uint16_t ttfReg ;        /*!< TTF register */
00324          int16_t siReg ;         /*!< SI register */
00325         uint16_t stteReg ;       /*!< STTE register */
00326          int16_t mliReg ;        /*!< MLI register */
00327         
00328         uint16_t mltteReg ;      /*!< MLTTE register */
00329         uint16_t rawccReg ;      /*!< RCC register */
00330          int16_t apReg ;         /*!< AP register */
00331         uint16_t intTempReg ;    /*!< INTTEMP register */
00332         uint16_t cycReg ;        /*!< CYC register */
00333         
00334         uint16_t socReg ;        /*!< SOC register */
00335         uint16_t sohReg ;        /*!< SOH register */
00336         uint16_t cvReg ;         /*!< CV register */
00337         uint16_t ccReg ;         /*!< CC register */
00338         uint16_t btpdReg ;       /*!< BTPD register */
00339         
00340         uint16_t btpcReg ;       /*!< BTPC register */
00341         uint16_t osReg ;         /*!< OS register */
00342         uint16_t dcReg ;         /*!< DC register */
00343         uint16_t subReg ;        /*!< SUB command register */
00344         char macData[32];       /*!< MAC Data array */
00345         uint8_t macSumReg ;      /*!< MAC Data Sum register */
00346         
00347         uint8_t macLenReg ;      /*!< MAC Data Len register */
00348         uint8_t anacReg ;        /*!< Analog Count register */
00349         uint16_t rawcReg ;       /*!< RAWC register */
00350         uint16_t rawvReg ;       /*!< RAWV register */
00351         uint16_t rawtReg ;       /*!< RAWT register */
00352         
00353         uint8_t checksum ;       /*!< calculated checksum result */
00354 
00355         int16_t shunt_res ;      /*!< Shunt Resistor value / 1000 */
00356         char i2c_Bufx[48];      /*!< i2c buffer */
00357     } BQ27220_TypeDef;
00358     
00359     /** Configure data pin
00360      * @param data SDA and SCL pins
00361      * // @param digital output 21V control pin
00362     **/
00363     //BQ27220(PinName p_sda, PinName p_scl, PinName p_pgrm);
00364     BQ27220(PinName p_sda, PinName p_scl);
00365     BQ27220(PinName p_sda, PinName p_scl, int freq);
00366     
00367     /** Write default values for CNTL register and shunt resistor * 1000
00368       * @param I2c pins
00369       * @param programming enable EEPROM pin (21V)
00370       * @return none
00371       */
00372     void default_init(BQ27220_TypeDef& dataSTR);
00373     
00374     uint16_t get_OS_reg(BQ27220_TypeDef& dataSTR);
00375     
00376     /** Read all bq registers and put them into the data structure
00377       * @param pointer to data structure
00378       * @return i2c error, 0 = no error
00379       */
00380     int read_registers(BQ27220_TypeDef& dataSTR);
00381     
00382     /** Send sub-command and read data and/or result from sub-command
00383       * @param pointer to data structure
00384       * @return result and/or data
00385       */
00386     uint16_t get_sub_cmmd(BQ27220_TypeDef& dataSTR, uint16_t cmmd);
00387     
00388     /** Like above, without extra delays
00389       * @param pointer to data structure
00390       * @return result and/or data
00391       */
00392     uint16_t get_sub_cmmd_s(BQ27220_TypeDef& dataSTR, uint16_t cmmd);
00393     
00394     void change_cfg_OT_chg_time(BQ27220_TypeDef& dataSTR, uint8_t newtime);
00395     void change_ram_1_2_4(BQ27220_TypeDef& dataSTR, uint16_t sub_cmmd, uint32_t value, int qty, bool pre);
00396     void change_cfg_6_1(BQ27220_TypeDef& dataSTR);
00397     uint16_t get_cs_len(BQ27220_TypeDef& dataSTR, bool pf);
00398     void exitCfgUpdateReInit(BQ27220_TypeDef& dataSTR);
00399     void exitCfgUpdateExit(BQ27220_TypeDef& dataSTR);
00400     void set_reg(BQ27220_TypeDef& dataSTR, uint16_t reg, uint16_t da, int byt);
00401     
00402     uint16_t get_reg_2B(BQ27220_TypeDef& dataSTR, uint8_t reg);
00403     
00404     void unseal(BQ27220_TypeDef& dataSTR);
00405     void full_access(BQ27220_TypeDef& dataSTR);
00406     void enter_cfg_update(BQ27220_TypeDef& dataSTR);
00407     void seal(BQ27220_TypeDef& dataSTR);
00408     void useProfile_1(BQ27220_TypeDef& dataSTR);
00409     void reset(BQ27220_TypeDef& dataSTR);
00410     
00411     /** Send sub-command to get device ID
00412       * @param pointer to data structure
00413       * @return sub-command + device id
00414       */
00415     uint32_t get_dev_id(BQ27220_TypeDef& dataSTR);
00416     
00417     /** Send sub-command to get firmware revision
00418       * @param pointer to data structure
00419       * @return revision
00420       */
00421     uint32_t get_fw_rev(BQ27220_TypeDef& dataSTR);
00422     
00423     /** Send sub-command to get firmware revision
00424       * @param pointer to data structure
00425       * @return revision
00426       */
00427     uint32_t get_hw_rev(BQ27220_TypeDef& dataSTR);
00428     
00429     uint8_t calc_checksum_rx(BQ27220_TypeDef& dataSTR, int length);
00430     uint8_t calc_checksum_tx(BQ27220_TypeDef& dataSTR, int length);
00431     
00432     /** Send sub-command to get 32 bytes data
00433       * @param pointer to data structure
00434       * @param sub-command
00435       * @return 32 bytes in macData
00436       */
00437     uint32_t get_data_32(BQ27220_TypeDef& dataSTR, uint16_t sub_cmmd, int length);
00438     
00439     /** Get signed 16 bit value
00440       * @param pointer to data structure
00441       * @param sub-command
00442       * @return 16 bit signed value
00443       */
00444     uint16_t get_16(BQ27220_TypeDef& dataSTR, uint16_t cmmd);
00445     
00446     /** Get unsigned 8 bit value
00447       * @param pointer to data structure
00448       * @param sub-command
00449       * @return 8 bit signed value
00450       */
00451     uint8_t get_8(BQ27220_TypeDef& dataSTR, uint16_t cmmd);
00452     
00453     void set_ntc_as_sensor(BQ27220_TypeDef& dataSTR, bool ntc);
00454     
00455     /** Initialize SoC for a new battery
00456       * @param pointer to data structure
00457       * @return error, 0 = no error
00458       */
00459     int new_battery_init(BQ27220_TypeDef& dataSTR);
00460     
00461     /** Read all bq EEPROM registers and put them into the data structure
00462       * @param pointer to data structure
00463       * @return i2c error, 0 = no error
00464       */
00465     int read_eep_registers(BQ27220_TypeDef& dataSTR);
00466       
00467 protected:
00468     I2C  _i2c;
00469     
00470 private:
00471 
00472 };
00473 
00474 #endif // MBED_BQ27220