This is a library for the MAX17055 Li+ Battery Fuel Gauge.

Dependents:   Low_Power_Long_Distance_IR_Vision_Robot MAX17055_EZconfig MAX17055_EZconfig_Sample Low_Power_Long_Distance_IR_Vision_Robot

Fork of max17055 by Maxim Integrated

Committer:
fneirab
Date:
Tue Feb 06 21:14:08 2018 +0000
Revision:
10:f145eb7522ff
Parent:
9:f29d5e49b190
Child:
11:bdbd3104995b
documentation

Who changed what in which revision?

UserRevisionLine numberNew contents of line
fneirab 4:a4d6ae2182c2 1 /******************************************************************//**
fneirab 4:a4d6ae2182c2 2 * @file max17055.h
fneirab 4:a4d6ae2182c2 3 *
fneirab 5:a18a189588dc 4 * @author Felipe Neira - Maxim Integrated - TTS
fneirab 4:a4d6ae2182c2 5 *
fneirab 9:f29d5e49b190 6 * @version 1.2
fneirab 4:a4d6ae2182c2 7 *
fneirab 9:f29d5e49b190 8 * Started: 9JAN18
fneirab 4:a4d6ae2182c2 9 *
fneirab 9:f29d5e49b190 10 * Updated:
fneirab 9:f29d5e49b190 11 * New functions improved for continious display. Change copyright notice for 2018.
fneirab 4:a4d6ae2182c2 12 *
fneirab 9:f29d5e49b190 13 *
fneirab 4:a4d6ae2182c2 14 *
fneirab 9:f29d5e49b190 15 /*******************************************************************************
fneirab 9:f29d5e49b190 16 * Copyright (C) 2018 Maxim Integrated Products, Inc., All Rights Reserved.
fneirab 4:a4d6ae2182c2 17 *
fneirab 4:a4d6ae2182c2 18 * Permission is hereby granted, free of charge, to any person obtaining a
fneirab 4:a4d6ae2182c2 19 * copy of this software and associated documentation files (the "Software"),
fneirab 4:a4d6ae2182c2 20 * to deal in the Software without restriction, including without limitation
fneirab 4:a4d6ae2182c2 21 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
fneirab 4:a4d6ae2182c2 22 * and/or sell copies of the Software, and to permit persons to whom the
fneirab 4:a4d6ae2182c2 23 * Software is furnished to do so, subject to the following conditions:
fneirab 4:a4d6ae2182c2 24 *
fneirab 4:a4d6ae2182c2 25 * The above copyright notice and this permission notice shall be included
fneirab 4:a4d6ae2182c2 26 * in all copies or substantial portions of the Software.
fneirab 4:a4d6ae2182c2 27 *
fneirab 4:a4d6ae2182c2 28 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
fneirab 4:a4d6ae2182c2 29 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
fneirab 4:a4d6ae2182c2 30 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
fneirab 4:a4d6ae2182c2 31 * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
fneirab 4:a4d6ae2182c2 32 * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
fneirab 4:a4d6ae2182c2 33 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
fneirab 4:a4d6ae2182c2 34 * OTHER DEALINGS IN THE SOFTWARE.
fneirab 4:a4d6ae2182c2 35 *
fneirab 4:a4d6ae2182c2 36 * Except as contained in this notice, the name of Maxim Integrated
fneirab 4:a4d6ae2182c2 37 * Products, Inc. shall not be used except as stated in the Maxim Integrated
fneirab 4:a4d6ae2182c2 38 * Products, Inc. Branding Policy.
fneirab 4:a4d6ae2182c2 39 *
fneirab 4:a4d6ae2182c2 40 * The mere transfer of this software does not imply any licenses
fneirab 4:a4d6ae2182c2 41 * of trade secrets, proprietary technology, copyrights, patents,
fneirab 4:a4d6ae2182c2 42 * trademarks, maskwork rights, or any other form of intellectual
fneirab 4:a4d6ae2182c2 43 * property whatsoever. Maxim Integrated Products, Inc. retains all
fneirab 4:a4d6ae2182c2 44 * ownership rights.
fneirab 9:f29d5e49b190 45 *******************************************************************************
fneirab 9:f29d5e49b190 46 */
fneirab 0:80c39eb8f3ba 47
fneirab 0:80c39eb8f3ba 48 #ifndef __MAX17055_H_
fneirab 0:80c39eb8f3ba 49 #define __MAX17055_H_
fneirab 0:80c39eb8f3ba 50
fneirab 0:80c39eb8f3ba 51 // Include
fneirab 0:80c39eb8f3ba 52 #include "mbed.h"
fneirab 0:80c39eb8f3ba 53
fneirab 2:ff7db397b70f 54 /* STATUS register bits */
fneirab 2:ff7db397b70f 55 #define MAX17055_STATUS_BST (1 << 3)
fneirab 2:ff7db397b70f 56 #define MAX17055_STATUS_POR (1 << 1)
fneirab 2:ff7db397b70f 57
fneirab 5:a18a189588dc 58 /// Model loading options
fneirab 9:f29d5e49b190 59 #define MODEL_LOADING_OPTION1 1 //EZ Config
fneirab 9:f29d5e49b190 60 #define MODEL_LOADING_OPTION2 2 //Not implemented in this version of the library
fneirab 9:f29d5e49b190 61 #define MODEL_LOADING_OPTION3 3 //Not implemented in this version of the library
fneirab 4:a4d6ae2182c2 62
fneirab 0:80c39eb8f3ba 63
fneirab 0:80c39eb8f3ba 64 /**
fneirab 0:80c39eb8f3ba 65 * @brief Library for the MAX17055\n
fneirab 0:80c39eb8f3ba 66 * The MAX17055 is a low 7μA operating current fuel gauge
fneirab 0:80c39eb8f3ba 67 * which implements Maxim ModelGauge™ m5 EZ algorithm.
fneirab 0:80c39eb8f3ba 68 * ModelGauge m5 EZ makes fuel gauge implementation easy
fneirab 0:80c39eb8f3ba 69 * by eliminating battery characterization requirements
fneirab 0:80c39eb8f3ba 70 * and simplifying host software interaction.
fneirab 0:80c39eb8f3ba 71 * The ModelGauge m5 EZ robust algorithm provides tolerance against
fneirab 0:80c39eb8f3ba 72 * battery diversity for most lithium batteries and applications.
fneirab 0:80c39eb8f3ba 73 * Communication is through an SPI-compatible interface.
fneirab 0:80c39eb8f3ba 74 *
fneirab 0:80c39eb8f3ba 75 * @code
fneirab 0:80c39eb8f3ba 76 * #include "mbed.h"
fneirab 9:f29d5e49b190 77 * #include "MAX17055.h"
fneirab 0:80c39eb8f3ba 78 *
fneirab 0:80c39eb8f3ba 79 *
fneirab 0:80c39eb8f3ba 80 * // Hardware serial port
fneirab 0:80c39eb8f3ba 81 * Serial serial(USBTX, USBRX);
fneirab 0:80c39eb8f3ba 82 *
fneirab 0:80c39eb8f3ba 83 * //SPI communications
fneirab 0:80c39eb8f3ba 84 * I2C i2c(SCL, SDA);
fneirab 0:80c39eb8f3ba 85 *
fneirab 0:80c39eb8f3ba 86 * //Fuel Gauge
fneirab 0:80c39eb8f3ba 87 * MAX17055 max17055(i2C, Sutff );//To be completed
fneirab 0:80c39eb8f3ba 88 *
fneirab 0:80c39eb8f3ba 89 *
fneirab 0:80c39eb8f3ba 90 * int main(void)
fneirab 0:80c39eb8f3ba 91 * {
fneirab 9:f29d5e49b190 92 * CODE CODE TBD
fneirab 0:80c39eb8f3ba 93 * while(true)
fneirab 0:80c39eb8f3ba 94 * {
fneirab 9:f29d5e49b190 95 * CODE CODE TBD
fneirab 0:80c39eb8f3ba 96 * }
fneirab 0:80c39eb8f3ba 97 * }
fneirab 0:80c39eb8f3ba 98 * @endcode
fneirab 0:80c39eb8f3ba 99 */
fneirab 0:80c39eb8f3ba 100
fneirab 4:a4d6ae2182c2 101 /******************************************************************//**
fneirab 4:a4d6ae2182c2 102 * MAX17055 Class
fneirab 4:a4d6ae2182c2 103 **********************************************************************/
fneirab 4:a4d6ae2182c2 104 /// MAX17055 Battery Fuel Gauge Class
fneirab 0:80c39eb8f3ba 105 /** Generic API for a battery fuel gauge
fneirab 0:80c39eb8f3ba 106 */
fneirab 0:80c39eb8f3ba 107 class MAX17055
fneirab 0:80c39eb8f3ba 108 {
fneirab 0:80c39eb8f3ba 109
fneirab 0:80c39eb8f3ba 110 public:
fneirab 0:80c39eb8f3ba 111
fneirab 0:80c39eb8f3ba 112 ///7-bit slave address
fneirab 0:80c39eb8f3ba 113 static const uint8_t I2C_ADRS = 0x36; //Slave address 0x6C or 0x36 for 7 MSbit Addres
fneirab 0:80c39eb8f3ba 114 ///8-bit write address
fneirab 0:80c39eb8f3ba 115 static const uint8_t I2C_W_ADRS = 0x6C;
fneirab 0:80c39eb8f3ba 116 ///8-bit read address
fneirab 0:80c39eb8f3ba 117 static const uint8_t I2C_R_ADRS = 0x6D;
fneirab 6:5ced10109ebf 118
fneirab 6:5ced10109ebf 119
fneirab 0:80c39eb8f3ba 120 /////Max # Bytes in FIFO
fneirab 0:80c39eb8f3ba 121 // static const uint16_t MAX_FIFO_BYTES = 288;
fneirab 0:80c39eb8f3ba 122 // ///# of bytes per LED channel
fneirab 0:80c39eb8f3ba 123 // static const uint8_t BYTES_PER_CH = 3;
fneirab 0:80c39eb8f3ba 124
fneirab 6:5ced10109ebf 125
fneirab 6:5ced10109ebf 126 //Defined instance for external structs
fneirab 5:a18a189588dc 127 struct BATTERY::battery_cfg_t batt_con;
fneirab 9:f29d5e49b190 128
fneirab 7:479a36909ced 129
fneirab 0:80c39eb8f3ba 130
fneirab 0:80c39eb8f3ba 131
fneirab 0:80c39eb8f3ba 132
fneirab 0:80c39eb8f3ba 133 /**
fneirab 4:a4d6ae2182c2 134 * @brief Register Addresses for the MAX17055
fneirab 5:a18a189588dc 135 * @details Enumerated register addresses
fneirab 0:80c39eb8f3ba 136 */
fneirab 0:80c39eb8f3ba 137 enum Registers_e {
fneirab 9:f29d5e49b190 138 STATUS_REG = 0x00, /**< 0x00 default = 0x0002 */
fneirab 7:479a36909ced 139 VALRTTH_REG = 0x01, /**< 0x01 */
fneirab 7:479a36909ced 140 TALRTTH_REG = 0x02, /**< 0x02 */
fneirab 9:f29d5e49b190 141 SALRTTH_REG = 0x03, /**< 0x03 */
fneirab 7:479a36909ced 142 REPCAP_REG = 0x05, /**< 0x05 */
fneirab 7:479a36909ced 143 REPSOC_REG = 0x06, /**< 0x06 */
fneirab 9:f29d5e49b190 144 TEMP_REG = 0x08, /**< 0x08 */
fneirab 9:f29d5e49b190 145 VCELL_REG = 0x09, /**< 0x09 */
fneirab 7:479a36909ced 146 CURRENT_REG = 0x0A, /**< 0x0A */
fneirab 7:479a36909ced 147 AVGCURRENT_REG = 0x0B, /**< 0x0B */
fneirab 9:f29d5e49b190 148 MIXSOC_REG = 0x0D, /**< 0x0D */
fneirab 9:f29d5e49b190 149 AVSOC_REG = 0x0E, /**< 0x0E */
fneirab 8:ca8765c30ed2 150 MIXCAP_REG = 0x0F, /**< 0x0F */
fneirab 7:479a36909ced 151
fneirab 7:479a36909ced 152 FULLCAPREP_REG = 0x10, /**< 0x10 */
fneirab 7:479a36909ced 153 TTE_REG = 0X11, /**< 0x11 */
fneirab 7:479a36909ced 154 QRTABLE00_REG = 0x12, /**< 0x12 */
fneirab 7:479a36909ced 155 FULLSOCTHR_REG = 0x13, /**< 0x13 */
fneirab 7:479a36909ced 156 CYCLES_REG = 0x17, /**< 0x17 */
fneirab 7:479a36909ced 157 DESIGNCAP_REG = 0x18, /**< 0x18 */
fneirab 7:479a36909ced 158 AVGVCELL_REG = 0x19, /**< 0x19 */
fneirab 7:479a36909ced 159 MAXMINVOLT_REG = 0x1B, /**< 0x1B */
fneirab 9:f29d5e49b190 160 CONFIG_REG = 0x1D, /**< 0x1D default = 0x2210 */
fneirab 7:479a36909ced 161 ICHGTERM_REG = 0x1E, /**< 0x1E */
fneirab 0:80c39eb8f3ba 162
fneirab 9:f29d5e49b190 163 TTF_REG = 0x20, /**< 0x20 */
fneirab 7:479a36909ced 164 VERSION_REG = 0x21, /**< 0x21 */
fneirab 9:f29d5e49b190 165 QRTABLE10_REG = 0x22, /**< 0x22 */
fneirab 9:f29d5e49b190 166 FULLCAPNOM_REG = 0x23, /**< 0x23 */
fneirab 9:f29d5e49b190 167 LEARNCFG_REG = 0x28, /**< 0x28 */
fneirab 9:f29d5e49b190 168 RELAXCFG_REG = 0x2A, /**< 0x2A */
fneirab 9:f29d5e49b190 169 TGAIN_REG = 0x2C, /**< 0x2C */
fneirab 9:f29d5e49b190 170 TOFF_REG = 0x2D, /**< 0x2D */
fneirab 7:479a36909ced 171
fneirab 9:f29d5e49b190 172 QRTABLE20_REG = 0x32, /**< 0x32 */
fneirab 9:f29d5e49b190 173 RCOMP0_REG = 0x38, /**< 0x38 */
fneirab 9:f29d5e49b190 174 TEMPCO_REG = 0x39, /**< 0x39 */
fneirab 7:479a36909ced 175 VEMPTY_REG = 0x3A,
fneirab 7:479a36909ced 176 FSTAT_REG = 0x3D,
fneirab 0:80c39eb8f3ba 177
fneirab 7:479a36909ced 178 QRTABLE30_REG = 0x42,
fneirab 7:479a36909ced 179 DQACC_REG = 0x45,
fneirab 7:479a36909ced 180 DPACC_REG = 0x46,
fneirab 7:479a36909ced 181 VFSOC0_REG = 0x48,
fneirab 7:479a36909ced 182 QH0_REG = 0x4C,
fneirab 7:479a36909ced 183 QH_REG = 0x4D,
fneirab 7:479a36909ced 184
fneirab 7:479a36909ced 185 VFSOC0_QH0_LOCK_REG = 0x60,
fneirab 7:479a36909ced 186 LOCK1_REG = 0x62,
fneirab 7:479a36909ced 187 LOCK2_REG = 0x63,
fneirab 7:479a36909ced 188
fneirab 7:479a36909ced 189 MODELDATA_START_REG = 0x80,
fneirab 7:479a36909ced 190
fneirab 7:479a36909ced 191 IALRTTH_REG = 0xB4,
fneirab 7:479a36909ced 192 CURVE_REG = 0xB9,
fneirab 7:479a36909ced 193 HIBCFG_REG = 0xBA,
fneirab 9:f29d5e49b190 194 CONFIG2_REG = 0xBB, /**< 0xBB default = 0x3658 */
fneirab 7:479a36909ced 195
fneirab 7:479a36909ced 196 MODELCFG_REG = 0xDB,
fneirab 9:f29d5e49b190 197 ATTTE_REG = 0xDD,
fneirab 0:80c39eb8f3ba 198
fneirab 7:479a36909ced 199 OCV_REG = 0xFB,
fneirab 7:479a36909ced 200 VFSOC_REG = 0xFF,
fneirab 7:479a36909ced 201 } ;
fneirab 7:479a36909ced 202
fneirab 7:479a36909ced 203
fneirab 7:479a36909ced 204 /**
fneirab 7:479a36909ced 205 * @brief Saved Fuel Gauge Parameters
fneirab 7:479a36909ced 206 * @details Struct with saved fuel Gauge Parametrs
fneirab 7:479a36909ced 207 */
fneirab 7:479a36909ced 208
fneirab 7:479a36909ced 209 struct platform_data{ //to clarify if Part of the class
fneirab 7:479a36909ced 210 uint16_t designcap;/**< struct value 1 */
fneirab 7:479a36909ced 211 uint16_t ichgterm; /**< struct value 2 */
fneirab 7:479a36909ced 212 uint16_t vempty; /**< struct value 3 */
fneirab 7:479a36909ced 213 int vcharge; /**< struct value 1 */
fneirab 0:80c39eb8f3ba 214
fneirab 7:479a36909ced 215 uint16_t learncfg; /**< struct value 1 */
fneirab 7:479a36909ced 216 uint16_t relaxcfg; /**< struct value 1 */
fneirab 7:479a36909ced 217 uint16_t config; /**< struct value 1 */
fneirab 7:479a36909ced 218 uint16_t config2; /**< struct value 1 */
fneirab 7:479a36909ced 219 uint16_t fullsocthr;/**< struct value 1 */
fneirab 7:479a36909ced 220 uint16_t tgain; /**< struct value 1 */
fneirab 7:479a36909ced 221 uint16_t toff; /**< struct value 1 */
fneirab 7:479a36909ced 222 uint16_t curve; /**< struct value 1 */
fneirab 7:479a36909ced 223 uint16_t rcomp0; /**< struct value 1 */
fneirab 7:479a36909ced 224 uint16_t tempco; /**< struct value 1 */
fneirab 7:479a36909ced 225 uint16_t qrtable00;
fneirab 7:479a36909ced 226 uint16_t qrtable10;
fneirab 7:479a36909ced 227 uint16_t qrtable20;
fneirab 7:479a36909ced 228 uint16_t qrtable30;
fneirab 7:479a36909ced 229
fneirab 7:479a36909ced 230 uint16_t dpacc;
fneirab 7:479a36909ced 231 uint16_t modelcfg;
fneirab 0:80c39eb8f3ba 232
fneirab 7:479a36909ced 233 //uint16_t model_data[MAX17055_TABLE_SIZE];
fneirab 7:479a36909ced 234 int (*get_charging_status)(void);
fneirab 7:479a36909ced 235 int model_option;
fneirab 7:479a36909ced 236 /**
fneirab 7:479a36909ced 237 * rsense in miliOhms.
fneirab 7:479a36909ced 238 * default 10 (if rsense = 0) as it is the recommended value by
fneirab 7:479a36909ced 239 * the datasheet although it can be changed by board designers.
fneirab 7:479a36909ced 240 */
fneirab 7:479a36909ced 241 unsigned int rsense;
fneirab 7:479a36909ced 242 int volt_min; /**< in mV */
fneirab 7:479a36909ced 243 int volt_max; /**< in mV */
fneirab 7:479a36909ced 244 int temp_min; /**< in DegreC */
fneirab 7:479a36909ced 245 int temp_max; /**< in DegreeC */
fneirab 7:479a36909ced 246 int soc_max; /**< in percent */
fneirab 7:479a36909ced 247 int soc_min; /**< in percent */
fneirab 7:479a36909ced 248 int curr_max; /**< in mA */
fneirab 7:479a36909ced 249 int curr_min; /**< in mA */
fneirab 7:479a36909ced 250 } ;
fneirab 7:479a36909ced 251
fneirab 7:479a36909ced 252
fneirab 7:479a36909ced 253 /**
fneirab 7:479a36909ced 254 * @brief Saved Fuel Gauge Parameters
fneirab 7:479a36909ced 255 * @details It is recommended to save the learned capacity parameters
fneirab 7:479a36909ced 256 * every time bit 2 of the Cycles register toggles
fneirab 7:479a36909ced 257 * (so that it is saved every 64% change in the battery)
fneirab 7:479a36909ced 258 * so that if power is lost the values can easily be restored.
fneirab 7:479a36909ced 259 */
fneirab 0:80c39eb8f3ba 260
fneirab 7:479a36909ced 261 struct saved_FG_params_t{
fneirab 7:479a36909ced 262 int rcomp0; /**< Explain */
fneirab 7:479a36909ced 263 int temp_co; /**< Explain */
fneirab 7:479a36909ced 264 int full_cap_rep; /**< Explain */
fneirab 7:479a36909ced 265 int cycles; /**< Explain */
fneirab 7:479a36909ced 266 int full_cap_nom; /**< Explain */
fneirab 7:479a36909ced 267 } ;
fneirab 9:f29d5e49b190 268
fneirab 9:f29d5e49b190 269
fneirab 10:f145eb7522ff 270 /******************************************************************//**
fneirab 10:f145eb7522ff 271 * BATTERY Class
fneirab 10:f145eb7522ff 272 **********************************************************************/
fneirab 10:f145eb7522ff 273 /// Battery Class
fneirab 10:f145eb7522ff 274 /** Generic API for a battery fuel gauge
fneirab 10:f145eb7522ff 275
fneirab 10:f145eb7522ff 276 class BATTERY
fneirab 10:f145eb7522ff 277 {
fneirab 10:f145eb7522ff 278
fneirab 10:f145eb7522ff 279 public:
fneirab 10:f145eb7522ff 280
fneirab 10:f145eb7522ff 281
fneirab 10:f145eb7522ff 282 struct battery_cfg_t{
fneirab 10:f145eb7522ff 283 int capacity; //!< The rated capacity in mAh of the battery
fneirab 10:f145eb7522ff 284 int voltageMax; //!< The maximum voltage in mV that should be used for charging
fneirab 10:f145eb7522ff 285 int voltageNom; //!< The normal voltage in mV of the battery near mid charge
fneirab 10:f145eb7522ff 286 int voltageMin; //!< The minimum voltage in mV that the battery should be discharged
fneirab 10:f145eb7522ff 287 int temperatureMax; //!< The maximum temperature in degrees C where charging is allowed
fneirab 10:f145eb7522ff 288 int temperatureMin; //!< The minimum temperature in degrees C where charging is allowed
fneirab 10:f145eb7522ff 289 int currentCharge; //!< The current as a percentage of capicity used for charging
fneirab 10:f145eb7522ff 290 int currentTerm; //!< The current as a percentage of capacity to stop charging
fneirab 10:f145eb7522ff 291 int currentPre; //!< The current as a percentage of capacity for pre-charging
fneirab 10:f145eb7522ff 292 } ;
fneirab 10:f145eb7522ff 293
fneirab 10:f145eb7522ff 294
fneirab 10:f145eb7522ff 295
fneirab 10:f145eb7522ff 296
fneirab 10:f145eb7522ff 297 };
fneirab 9:f29d5e49b190 298
fneirab 4:a4d6ae2182c2 299
fneirab 4:a4d6ae2182c2 300
fneirab 4:a4d6ae2182c2 301
fneirab 0:80c39eb8f3ba 302 /**
fneirab 0:80c39eb8f3ba 303 * @brief max17055 Constructor
fneirab 0:80c39eb8f3ba 304 * @details max17055 Constructor with battery and i2c as parameters
fneirab 0:80c39eb8f3ba 305 */
fneirab 0:80c39eb8f3ba 306 MAX17055(I2C &i2c);
fneirab 0:80c39eb8f3ba 307
fneirab 0:80c39eb8f3ba 308 /**
fneirab 0:80c39eb8f3ba 309 * @brief Fuel Gauge Destructor
fneirab 0:80c39eb8f3ba 310 */
fneirab 0:80c39eb8f3ba 311 ~MAX17055();
fneirab 4:a4d6ae2182c2 312
fneirab 5:a18a189588dc 313 ////////////////////////////////////////////////////////////////////////////
fneirab 5:a18a189588dc 314
fneirab 5:a18a189588dc 315 /**
fneirab 5:a18a189588dc 316 * \brief Poll Flag clear
fneirab 5:a18a189588dc 317 * \par Details
fneirab 5:a18a189588dc 318 * This function clears status flags for the MAX17055
fneirab 5:a18a189588dc 319 *
fneirab 5:a18a189588dc 320 * \param[in] reg_addr - register address
fneirab 5:a18a189588dc 321 * \param[in] mask - register address
fneirab 5:a18a189588dc 322 * \param[in] timeout - register data
fneirab 5:a18a189588dc 323 *
fneirab 5:a18a189588dc 324 * \retval 1 on success
fneirab 5:a18a189588dc 325 * -1 on Failure
fneirab 5:a18a189588dc 326 */
fneirab 9:f29d5e49b190 327
fneirab 9:f29d5e49b190 328
fneirab 5:a18a189588dc 329
fneirab 7:479a36909ced 330 int poll_flag_clear(Registers_e reg_addr, int mask, int timeout);
fneirab 5:a18a189588dc 331
fneirab 9:f29d5e49b190 332 ////////////////////////////////////////////////////////////////////////////////
fneirab 9:f29d5e49b190 333
fneirab 9:f29d5e49b190 334 /**
fneirab 9:f29d5e49b190 335 * \brief Check POR function
fneirab 9:f29d5e49b190 336 * \par Details
fneirab 9:f29d5e49b190 337 * This function check is there was a power on reset event for the MAX17055
fneirab 9:f29d5e49b190 338 *
fneirab 9:f29d5e49b190 339 * \retval 1 for no POR detected
fneirab 9:f29d5e49b190 340 * -1 for POR detected
fneirab 9:f29d5e49b190 341 */
fneirab 9:f29d5e49b190 342 int check_POR_func();
fneirab 9:f29d5e49b190 343
fneirab 9:f29d5e49b190 344 ////////////////////////////////////////////////////////////////////////////////
fneirab 9:f29d5e49b190 345
fneirab 9:f29d5e49b190 346 /**
fneirab 9:f29d5e49b190 347 * \brief clear POR bit function
fneirab 9:f29d5e49b190 348 * \par Details
fneirab 9:f29d5e49b190 349 * This function clear the idicating bit for POR - MAX17055
fneirab 9:f29d5e49b190 350 *
fneirab 9:f29d5e49b190 351 * \retval 1 for Success
fneirab 9:f29d5e49b190 352 * -1 for errors
fneirab 9:f29d5e49b190 353 */
fneirab 9:f29d5e49b190 354 int clear_POR_bit();
fneirab 4:a4d6ae2182c2 355
fneirab 2:ff7db397b70f 356 /**
fneirab 2:ff7db397b70f 357 * \brief Write and Verify a MAX17055 register
fneirab 2:ff7db397b70f 358 * \par Details
fneirab 2:ff7db397b70f 359 * This function wites and verifies if the writing process was successful
fneirab 2:ff7db397b70f 360 *
fneirab 2:ff7db397b70f 361 * \param[in] reg_addr - register address
fneirab 4:a4d6ae2182c2 362 * \param[out] reg_data - the variable that contains the data to write
fneirab 5:a18a189588dc 363 * to the register address
fneirab 2:ff7db397b70f 364 *
fneirab 4:a4d6ae2182c2 365 * \retval 1 on success
fneirab 2:ff7db397b70f 366 * -1 if write errors
fneirab 2:ff7db397b70f 367 * -2 if read errors
fneirab 2:ff7db397b70f 368 * -3 if data curruption
fneirab 4:a4d6ae2182c2 369 *
fneirab 2:ff7db397b70f 370 */
fneirab 4:a4d6ae2182c2 371
fneirab 4:a4d6ae2182c2 372
fneirab 2:ff7db397b70f 373 int write_and_verify_reg(Registers_e reg_addr, uint16_t reg_data);
fneirab 4:a4d6ae2182c2 374
fneirab 4:a4d6ae2182c2 375
fneirab 3:f77a8345b0e3 376 ///////////////////////////////////////////////////////////////////////////
fneirab 4:a4d6ae2182c2 377
fneirab 2:ff7db397b70f 378 /**
fneirab 2:ff7db397b70f 379 * \brief Initialise Function for MAX17055
fneirab 2:ff7db397b70f 380 * \par Details
fneirab 2:ff7db397b70f 381 * This function intitializes the MAX17055
fneirab 2:ff7db397b70f 382 *
fneirab 4:a4d6ae2182c2 383 * \retval 1 on success
fneirab 2:ff7db397b70f 384 * -1 if errors exist
fneirab 2:ff7db397b70f 385 */
fneirab 4:a4d6ae2182c2 386
fneirab 4:a4d6ae2182c2 387
fneirab 7:479a36909ced 388 int init(platform_data des_data);
fneirab 4:a4d6ae2182c2 389
fneirab 4:a4d6ae2182c2 390
fneirab 3:f77a8345b0e3 391 ////////////////////////////////////////////////////////////////////////////
fneirab 0:80c39eb8f3ba 392
fneirab 3:f77a8345b0e3 393 /**
fneirab 2:ff7db397b70f 394 * \brief Get Internal Temperature Function for MAX17055
fneirab 2:ff7db397b70f 395 * \par Details
fneirab 2:ff7db397b70f 396 * This function sends a request to access the internal
fneirab 2:ff7db397b70f 397 * of the MAX17055
fneirab 2:ff7db397b70f 398 *
fneirab 7:479a36909ced 399 *
fneirab 7:479a36909ced 400 * \retval temperature value
fneirab 2:ff7db397b70f 401 * -1 if errors exist
fneirab 2:ff7db397b70f 402 */
fneirab 4:a4d6ae2182c2 403
fneirab 4:a4d6ae2182c2 404
fneirab 7:479a36909ced 405 int get_temperature();
fneirab 4:a4d6ae2182c2 406
fneirab 4:a4d6ae2182c2 407
fneirab 4:a4d6ae2182c2 408 ////////////////////////////////////////////////////////////////////////////
fneirab 4:a4d6ae2182c2 409
fneirab 3:f77a8345b0e3 410 /**
fneirab 3:f77a8345b0e3 411 * \brief Forced Exit Hibernate Mode Function for MAX17055
fneirab 3:f77a8345b0e3 412 * \par Details
fneirab 4:a4d6ae2182c2 413 * This function executes a force exit from hibernate mode.
fneirab 3:f77a8345b0e3 414 *
fneirab 3:f77a8345b0e3 415 * \retval returns HibCFG original value before forced Exit Hybernate mode
fneirab 3:f77a8345b0e3 416 *
fneirab 3:f77a8345b0e3 417 */
fneirab 4:a4d6ae2182c2 418
fneirab 4:a4d6ae2182c2 419
fneirab 3:f77a8345b0e3 420 uint16_t forcedExitHyberMode();
fneirab 7:479a36909ced 421
fneirab 7:479a36909ced 422 /**
fneirab 7:479a36909ced 423 * \brief EZ COnfing Init function
fneirab 7:479a36909ced 424 * \par Details
fneirab 7:479a36909ced 425 * This function implements the steps for the EZ confing m5 FuelGauge
fneirab 7:479a36909ced 426 *
fneirab 7:479a36909ced 427 * \retval returns TBD
fneirab 7:479a36909ced 428 *
fneirab 7:479a36909ced 429 */
fneirab 7:479a36909ced 430
fneirab 7:479a36909ced 431
fneirab 7:479a36909ced 432 uint16_t EZconfig_init(platform_data des_data);
fneirab 7:479a36909ced 433
fneirab 7:479a36909ced 434 ///////////////////////////////////////////////////////////////////////////
fneirab 7:479a36909ced 435
fneirab 7:479a36909ced 436 /**
fneirab 7:479a36909ced 437 * \brief Get State Of Charge(SOC) Function for MAX17055
fneirab 7:479a36909ced 438 * \par Details
fneirab 7:479a36909ced 439 * This function sends a request to access the internal
fneirab 7:479a36909ced 440 * of the MAX17055
fneirab 7:479a36909ced 441 *
fneirab 7:479a36909ced 442 * \param[in] reg_addr - register address
fneirab 7:479a36909ced 443 * \param[out] reg_data - SOC data from the REPSOC_REG register
fneirab 7:479a36909ced 444 * \retval 1 on success
fneirab 7:479a36909ced 445 *
fneirab 7:479a36909ced 446 * -1 if errors exist
fneirab 7:479a36909ced 447 */
fneirab 7:479a36909ced 448
fneirab 7:479a36909ced 449
fneirab 7:479a36909ced 450 int get_SOC();
fneirab 8:ca8765c30ed2 451
fneirab 8:ca8765c30ed2 452 ///////////////////////////////////////////////////////////////////////////
fneirab 8:ca8765c30ed2 453
fneirab 8:ca8765c30ed2 454 /**
fneirab 8:ca8765c30ed2 455 * \brief Get Average State Of Charge(SOC) Function for MAX17055
fneirab 8:ca8765c30ed2 456 * \par Details
fneirab 8:ca8765c30ed2 457 * This function sends a request to access the internal
fneirab 8:ca8765c30ed2 458 * of the MAX17055
fneirab 8:ca8765c30ed2 459 *
fneirab 8:ca8765c30ed2 460 * \param[in] reg_addr - register address
fneirab 8:ca8765c30ed2 461 * \param[out] reg_data - SOC data from the REPSOC_REG register
fneirab 8:ca8765c30ed2 462 * \retval 1 on success
fneirab 8:ca8765c30ed2 463 *
fneirab 8:ca8765c30ed2 464 * -1 if errors exist
fneirab 8:ca8765c30ed2 465 */
fneirab 8:ca8765c30ed2 466
fneirab 8:ca8765c30ed2 467
fneirab 8:ca8765c30ed2 468 int get_avSOC();
fneirab 7:479a36909ced 469
fneirab 7:479a36909ced 470 ////////////////////////////////////////////////////////////////////////////
fneirab 7:479a36909ced 471
fneirab 7:479a36909ced 472 /**
fneirab 7:479a36909ced 473 * \brief Get the remaining Time to Empty(TTE) Function for MAX17055
fneirab 7:479a36909ced 474 * \par Details
fneirab 7:479a36909ced 475 * This function sends a request to access the internal register
fneirab 7:479a36909ced 476 * of the MAX17055
fneirab 7:479a36909ced 477 *
fneirab 7:479a36909ced 478 * \retval tte_data - Time to Empty data from the TTE_REG register
fneirab 7:479a36909ced 479 *
fneirab 7:479a36909ced 480 * -1 if errors exist
fneirab 9:f29d5e49b190 481 */
fneirab 7:479a36909ced 482
fneirab 9:f29d5e49b190 483 int get_atTTE();
fneirab 9:f29d5e49b190 484
fneirab 9:f29d5e49b190 485 /**
fneirab 9:f29d5e49b190 486 * \brief Get State Of Charge(SOC) Function for MAX17055
fneirab 9:f29d5e49b190 487 * \par Details
fneirab 9:f29d5e49b190 488 * This function sends a request to access the internal
fneirab 9:f29d5e49b190 489 * of the MAX17055
fneirab 9:f29d5e49b190 490 *
fneirab 9:f29d5e49b190 491 * \param[in] reg_addr - register address
fneirab 9:f29d5e49b190 492 * \param[out] reg_data - SOC data from the REPSOC_REG register
fneirab 9:f29d5e49b190 493 * \retval 1 on success
fneirab 9:f29d5e49b190 494 *
fneirab 9:f29d5e49b190 495 * -1 if errors exist
fneirab 9:f29d5e49b190 496 */
fneirab 9:f29d5e49b190 497
fneirab 9:f29d5e49b190 498
fneirab 9:f29d5e49b190 499 int get_mixSOC();
fneirab 8:ca8765c30ed2 500
fneirab 8:ca8765c30ed2 501 ////////////////////////////////////////////////////////////////////////////
fneirab 8:ca8765c30ed2 502
fneirab 8:ca8765c30ed2 503 /**
fneirab 8:ca8765c30ed2 504 * \brief Get the remaining Time to Full(TTE) Function for MAX17055
fneirab 8:ca8765c30ed2 505 * \par Details
fneirab 8:ca8765c30ed2 506 * This function sends a request to access the internal register
fneirab 8:ca8765c30ed2 507 * of the MAX17055
fneirab 8:ca8765c30ed2 508 *
fneirab 8:ca8765c30ed2 509 * \retval ttf_data - Time to Empty data from the TTF_REG register
fneirab 8:ca8765c30ed2 510 *
fneirab 8:ca8765c30ed2 511 * -1 if errors exist
fneirab 8:ca8765c30ed2 512 */
fneirab 8:ca8765c30ed2 513
fneirab 8:ca8765c30ed2 514
fneirab 8:ca8765c30ed2 515 int get_TTF();
fneirab 7:479a36909ced 516
fneirab 7:479a36909ced 517
fneirab 7:479a36909ced 518 ////////////////////////////////////////////////////////////////////////////
fneirab 7:479a36909ced 519
fneirab 7:479a36909ced 520 /**
fneirab 7:479a36909ced 521 * \brief Get voltage of the cell Function for MAX17055
fneirab 7:479a36909ced 522 * \par Details
fneirab 7:479a36909ced 523 * This function sends a request to access the internal register
fneirab 7:479a36909ced 524 * of the MAX17055 to read the voltage of the cell
fneirab 7:479a36909ced 525 *
fneirab 7:479a36909ced 526 * \retval vcell_data - vcell data from the VCELL_REG register
fneirab 7:479a36909ced 527 *
fneirab 7:479a36909ced 528 * -1 if errors exist
fneirab 7:479a36909ced 529 */
fneirab 7:479a36909ced 530
fneirab 7:479a36909ced 531
fneirab 7:479a36909ced 532 int get_Vcell();
fneirab 7:479a36909ced 533
fneirab 7:479a36909ced 534 ////////////////////////////////////////////////////////////////////////////
fneirab 7:479a36909ced 535
fneirab 7:479a36909ced 536 /**
fneirab 7:479a36909ced 537 * \brief Get current Function for MAX17055
fneirab 7:479a36909ced 538 * \par Details
fneirab 7:479a36909ced 539 * This function sends a request to access the internal register
fneirab 7:479a36909ced 540 * of the MAX17055 to read the current register.
fneirab 7:479a36909ced 541 *
fneirab 7:479a36909ced 542 * \retval curr_data - vcell data from the VCELL_REG register
fneirab 7:479a36909ced 543 *
fneirab 7:479a36909ced 544 * -1 if errors exist
fneirab 7:479a36909ced 545 */
fneirab 7:479a36909ced 546
fneirab 7:479a36909ced 547
fneirab 7:479a36909ced 548 int get_Current(platform_data des_data);
fneirab 7:479a36909ced 549
fneirab 7:479a36909ced 550 ////////////////////////////////////////////////////////////////////////////
fneirab 7:479a36909ced 551
fneirab 7:479a36909ced 552 /**
fneirab 7:479a36909ced 553 * \brief Get Average Current Function for MAX17055
fneirab 7:479a36909ced 554 * \par Details
fneirab 7:479a36909ced 555 * This function sends a request to access the internal register
fneirab 7:479a36909ced 556 * of the MAX17055 to read the average current register.
fneirab 7:479a36909ced 557 *
fneirab 7:479a36909ced 558 * \retval curr_data - vcell data from the AVGCURRENT_REG register
fneirab 7:479a36909ced 559 *
fneirab 7:479a36909ced 560 * -1 if errors exist
fneirab 7:479a36909ced 561 */
fneirab 7:479a36909ced 562
fneirab 7:479a36909ced 563
fneirab 7:479a36909ced 564 int get_AvgCurrent(platform_data des_data);
fneirab 7:479a36909ced 565
fneirab 7:479a36909ced 566 ////////////////////////////////////////////////////////////////////////////
fneirab 7:479a36909ced 567
fneirab 7:479a36909ced 568 /**
fneirab 7:479a36909ced 569 * \brief lsb_to_uvolts Converssion Function
fneirab 7:479a36909ced 570 * \par Details
fneirab 7:479a36909ced 571 * This function takes the lsb value of the register and convert it
fneirab 7:479a36909ced 572 * to uvolts
fneirab 7:479a36909ced 573 *
fneirab 7:479a36909ced 574 * \param[in] lsb - value of register lsb
fneirab 7:479a36909ced 575 * \retval lsb - converted lsb to uvolts
fneirab 7:479a36909ced 576 *
fneirab 7:479a36909ced 577 */
fneirab 7:479a36909ced 578
fneirab 7:479a36909ced 579 int lsb_to_uvolts(uint16_t lsb);
fneirab 7:479a36909ced 580
fneirab 7:479a36909ced 581
fneirab 7:479a36909ced 582 ///////////////////////////////////////////////////////////////////////////////
fneirab 7:479a36909ced 583
fneirab 7:479a36909ced 584 /**
fneirab 7:479a36909ced 585 * \brief raw_current_to_uamp Converssion Function
fneirab 7:479a36909ced 586 * \par Details
fneirab 7:479a36909ced 587 * This function takes the raw current value of the register and
fneirab 7:479a36909ced 588 * converts it to uamps
fneirab 7:479a36909ced 589 *
fneirab 7:479a36909ced 590 * \param[in] curr - raw current value of register
fneirab 7:479a36909ced 591 * \retval res - converted raw current to uamps - Signed 2's complement
fneirab 7:479a36909ced 592 *
fneirab 7:479a36909ced 593 */
fneirab 7:479a36909ced 594
fneirab 7:479a36909ced 595 int raw_current_to_uamps(uint32_t curr, int rsense_value);
fneirab 3:f77a8345b0e3 596
fneirab 9:f29d5e49b190 597 ///////////////////////////////////////////////////////////////////////////////
fneirab 4:a4d6ae2182c2 598
fneirab 9:f29d5e49b190 599 /**
fneirab 9:f29d5e49b190 600 * \brief Save Learned Parameters Function
fneirab 9:f29d5e49b190 601 * \par Details
fneirab 9:f29d5e49b190 602 * It is recommended to save the learned capacity parameters every
fneirab 9:f29d5e49b190 603 * time bit 2 of the Cycles register toggles
fneirab 9:f29d5e49b190 604 * (so that it is saved every 64% change in the battery)
fneirab 9:f29d5e49b190 605 * so that if power is lost the values can easily be restored.
fneirab 9:f29d5e49b190 606 *
fneirab 9:f29d5e49b190 607 * \param[in] struct saved_FG_params_t
fneirab 9:f29d5e49b190 608 * \retval void
fneirab 9:f29d5e49b190 609 *
fneirab 9:f29d5e49b190 610 */
fneirab 9:f29d5e49b190 611
fneirab 9:f29d5e49b190 612 int save_Params(saved_FG_params_t FG_params);
fneirab 9:f29d5e49b190 613
fneirab 9:f29d5e49b190 614 ///////////////////////////////////////////////////////////////////////////////
fneirab 9:f29d5e49b190 615
fneirab 9:f29d5e49b190 616 /**
fneirab 9:f29d5e49b190 617 * \brief Resotore Parameters Function
fneirab 9:f29d5e49b190 618 * \par Details
fneirab 9:f29d5e49b190 619 * If power is lost, then the capacity information
fneirab 9:f29d5e49b190 620 * can be easily restored with this function
fneirab 9:f29d5e49b190 621 *
fneirab 9:f29d5e49b190 622 * \param[in] struct saved_FG_params_t
fneirab 9:f29d5e49b190 623 * \retval void
fneirab 9:f29d5e49b190 624 *
fneirab 9:f29d5e49b190 625 */
fneirab 9:f29d5e49b190 626
fneirab 9:f29d5e49b190 627 int restore_Params(saved_FG_params_t FG_params);
fneirab 2:ff7db397b70f 628
fneirab 2:ff7db397b70f 629 protected:
fneirab 0:80c39eb8f3ba 630 /**
fneirab 0:80c39eb8f3ba 631 * @brief Write Register
fneirab 0:80c39eb8f3ba 632 * @details Writes data to max17055 Register
fneirab 0:80c39eb8f3ba 633 *
fneirab 0:80c39eb8f3ba 634 * @parameters reg_addr Registers to write
fneirab 0:80c39eb8f3ba 635 * reg_data Data to write
fneirab 0:80c39eb8f3ba 636 */
fneirab 0:80c39eb8f3ba 637 int writeReg(const Registers_e reg_addr, uint16_t reg_data);
fneirab 0:80c39eb8f3ba 638
fneirab 0:80c39eb8f3ba 639 /**
fneirab 0:80c39eb8f3ba 640 * @brief Read Register
fneirab 0:80c39eb8f3ba 641 * @details Reads data from max17055 register
fneirab 0:80c39eb8f3ba 642 *
fneirab 0:80c39eb8f3ba 643 * @parameters reg_addr Register to read
fneirab 0:80c39eb8f3ba 644 */
fneirab 1:a031f0c6a71e 645 int32_t readReg(Registers_e reg_addr, uint16_t &value);
fneirab 4:a4d6ae2182c2 646
fneirab 2:ff7db397b70f 647
fneirab 0:80c39eb8f3ba 648
fneirab 2:ff7db397b70f 649
fneirab 0:80c39eb8f3ba 650
fneirab 9:f29d5e49b190 651
fneirab 9:f29d5e49b190 652
fneirab 9:f29d5e49b190 653
fneirab 0:80c39eb8f3ba 654 private:
fneirab 0:80c39eb8f3ba 655
fneirab 0:80c39eb8f3ba 656 I2C &m_i2cBus; // I2C object
fneirab 0:80c39eb8f3ba 657
fneirab 0:80c39eb8f3ba 658 };
fneirab 0:80c39eb8f3ba 659
fneirab 0:80c39eb8f3ba 660 #endif /* _MAX17055_H_ */