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 Oct 10 00:06:40 2017 +0000
Revision:
7:479a36909ced
Parent:
6:5ced10109ebf
Child:
8:ca8765c30ed2
add functions and debugged for complete EZ config function to be completed.

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