MAX14690 library
Fork of MAX14690 by
Diff: MAX14690.h
- Revision:
- 9:8fb54367ceb5
- Parent:
- 8:2c3f2da51c5d
- Child:
- 10:32c7e2ab67aa
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/MAX14690.h Thu Nov 10 16:06:11 2016 +0000 @@ -0,0 +1,526 @@ +/******************************************************************************* + * Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES + * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Maxim Integrated + * Products, Inc. shall not be used except as stated in the Maxim Integrated + * Products, Inc. Branding Policy. + * + * The mere transfer of this software does not imply any licenses + * of trade secrets, proprietary technology, copyrights, patents, + * trademarks, maskwork rights, or any other form of intellectual + * property whatsoever. Maxim Integrated Products, Inc. retains all + * ownership rights. + ******************************************************************************* + */ + +#ifndef _MAX14690_H_ +#define _MAX14690_H_ + +#include "mbed.h" + +#define MAX14690_NO_ERROR 0 +#define MAX14690_ERROR -1 + +#define MAX14690_BOOST_MIN_MV 2500 +#define MAX14690_BOOST_MAX_MV 5000 +#define MAX14690_BOOST_STEP_MV 100 + +/** + * @brief MAX14690 Power-Management Solution Driver + * + * @details The MAX14690/MAX14750 are compact power-management solutions for + * space-constrained, battery-powered applications where size and efficiency are + * critical. Both devices integrate a power switch, a linear regulator, a buck + * regulator, and a buck-boost regulator. + * <br>https://www.maximintegrated.com/en/products/power/battery-management/MAX14690.html + * + * @code + * #include "mbed.h" + * #include "MAX14690.h" + * + * // I2C Master 2 + * I2C i2c2(I2C2_SDA, I2C2_SCL); + * + * #define I2C_ADDR_PMIC (0x54) + * MAX14690 max14690(&i2c2, I2C_ADDR_PMIC); + * + * DigitalOut led(LED1, 0); + * InterruptIn button(SW1); + * + * void turnOff() + * { + * max14690.shutdown(); + * } + * + * int main() + * { + * button.fall(&turnOff); + * + * max14690.boostEn = MAX14690::BOOST_ENABLED; + * if (max14690.init() == MAX14690_ERROR) { + * printf("Error initializing MAX14690"); + * } + * + * wait(1); + * + * while(1) { + * max14690.boostSetMode(MAX14690::BOOST_DISABLED); + * max14690.boostEn = MAX14690::BOOST_ENABLED; + * wait(0.5); + * max14690.boostSetVoltage(2500); + * wait(0.5); + * max14690.boostSetVoltage(5000); + * wait(0.5); + * } + * } + * @endcode + */ +class MAX14690 +{ +public: + + /** + * @brief Register Addresses + * @details Enumerated MAX14690 register addresses + */ + typedef enum { + REG_CHIP_ID = 0x00, ///< Chip ID + REG_CHIP_REV = 0x01, ///< Chip Revision + REG_STATUS_A = 0x02, ///< + REG_STATUS_B = 0x03, ///< + REG_STATUS_C = 0x04, ///< + REG_INT_A = 0x05, ///< + REG_INT_B = 0x06, ///< + REG_INT_MASK_A = 0x07, ///< + REG_INT_MASK_B = 0x08, ///< + REG_I_LIM_CNTL = 0x09, ///< + REG_CHG_CNTL_A = 0x0A, ///< + REG_CHG_CNTL_B = 0x0B, ///< + REG_CHG_TMR = 0x0C, ///< + REG_BUCK1_CFG = 0x0D, ///< + REG_BUCK1_VSET = 0x0E, ///< + REG_BUCK2_CFG = 0x0F, ///< + REG_BUCK2_ISET = 0x10, ///< + REG_RSVD_11 = 0x11, ///< + REG_LDO1_CFG = 0x12, ///< + REG_LDO1_VSET = 0x13, ///< + REG_LDO2_CFG = 0x14, ///< + REG_LDO2_VSET = 0x15, ///< + REG_LDO3_CFG = 0x16, ///< + REG_LDO3_VSET = 0x17, ///< + REG_THRM_CFG = 0x18, ///< + REG_MON_CFG = 0x19, ///< + REG_BOOT_CFG = 0x1A, ///< + REG_PIN_STATUS = 0x1B, ///< + REG_BUCK_EXTRA = 0x1C, ///< + REG_PWR_CFG = 0x1D, ///< + REG_NULL = 0x1E, ///< + REG_PWR_OFF = 0x1F, ///< + } registers_t; + + /** + * @brief + * @details + */ + typedef enum { + THMSTAT_000, ///< T < T1 + THMSTAT_001, ///< T1 < T < T2 + THMSTAT_010, ///< T2 < T < T3 + THMSTAT_011, ///< T3 < T < T4 + THMSTAT_100, ///< T > T4 + THMSTAT_101, ///< No theremistor detected + THMSTAT_110, ///< Thermistor Disabled by ThermEn + THMSTAT_111, ///< CHGIN not present + } thermStat_t; + + /** + * @brief + * @details + */ + typedef enum { + CHGSTAT_000, ///< Charger off + CHGSTAT_001, ///< Charging suspended by temperature + CHGSTAT_010, ///< Pre-charge + CHGSTAT_011, ///< Fast-charge constant current + CHGSTAT_100, ///< Fast-charge constant voltage + CHGSTAT_101, ///< Maintain charge + CHGSTAT_110, ///< Done + CHGSTAT_111, ///< Charger fault + } chgStat_t; + + /** + * @brief + * @details + */ + typedef enum { + ILIM_0mA, ///< 0mA + ILIM_100mA, ///< 100mA + ILIM_500mA, ///< 500mA + ILIM_1000mA, ///< 1000mA + } iLimCntl_t; + + /** + * @brief + * @details + */ + typedef enum { + BAT_RECHG_70mV, ///< 70mV + BAT_RECHG_120mV, ///< 120mV + BAT_RECHG_170mV, ///< 170mV + BAT_RECHG_220mV, ///< 220mV + } batReChg_t; + + /** + * @brief + * @details + */ + typedef enum { + BAT_REG_4050mV, ///< 4.05V + BAT_REG_4100mV, ///< 4.10V + BAT_REG_4150mV, ///< 4.15V + BAT_REG_4200mV, ///< 4.20V + BAT_REG_4250mV, ///< 4.25V + BAT_REG_4300mV, ///< 4.30V + BAT_REG_4350mV, ///< 4.35V + BAT_REG_RSVD, ///< reserved + } batReg_t; + + /** + * @brief + * @details + */ + typedef enum { + VPCHG_2100mV, ///< 2.10V + VPCHG_2250mV, ///< 2.25V + VPCHG_2400mV, ///< 2.40V + VPCHG_2550mV, ///< 2.55V + VPCHG_2700mV, ///< 2.70V + VPCHG_2850mV, ///< 2.85V + VPCHG_3000mV, ///< 3.00V + VPCHG_3150mV, ///< 3.15V + } vPChg_t; + + /** + * @brief + * @details + */ + typedef enum { + IPCHG_5, ///< 5% of Ifchg + IPCHG_10, ///< 10% of Ifchg + IPCHG_20, ///< 20% of Ifchg + IPCHG_30, ///< 30% of Ifchg + } iPChg_t; + + /** + * @brief + * @details + */ + typedef enum { + CHGDONE_5, ///< 5% of Ifchg + CHGDONE_10, ///< 10% of Ifchg + CHGDONE_20, ///< 20% of Ifchg + CHGDONE_30, ///< 30% of Ifchg + } chgDone_t; + + /** + * @brief + * @details + */ + typedef enum { + MTCHGTMR_0min, ///< 0 min + MTCHGTMR_15min, ///< 15 min + MTCHGTMR_30min, ///< 30 min + MTCHGTMR_60min, ///< 60 min + } mtChgTmr_t; + + /** + * @brief + * @details + */ + typedef enum { + FCHGTMR_75min, ///< 75 min + FCHGTMR_150min, ///< 150 min + FCHGTMR_300min, ///< 300 min + FCHGTMR_600min, ///< 600 min + } fChgTmr_t; + + /** + * @brief + * @details + */ + typedef enum { + PCHGTMR_30min, ///< 30 min + PCHGTMR_60min, ///< 60 min + PCHGTMR_120min, ///< 120 min + PCHGTMR_240min, ///< 240 min + } pChgTmr_t; + + /** + * @brief Voltage Regulator Enable Mode + * @details Enumerated enable modes for voltage regulators + */ + typedef enum { + VREG_DISABLED, ///< Regulator Disabled + VREG_ENABLED, ///< Regulator Enabled + VREG_EN_MPC0, ///< Regulator Enabled by MPC pin + VREG_EN_MPC1, ///< Regulator Enabled by MPC pin + } vRegEn_t; + + /** + * @brief Buck Operating Modes + * @details Enumerated operating modes for buck regulator + */ + typedef enum { + BUCK_BURST, ///< Burst Mode Operation + BUCK_FPWM, ///< Forced PWM Operation + BUCK_MPC0_FPWM, ///< MPC activated Forced PWM + BUCK_MPC1_FPWM, ///< MPC activated Forced PWM + } buckMd_t; + + /** + * @brief + * @details + */ + typedef enum { + , ///< + } _t; + + /** + * @brief + * @details + */ + typedef enum { + , ///< + } _t; + + /** + * @brief + * @details + */ + typedef enum { + , ///< + } _t; + + /** + * @brief Boost Peak Current Settings + * @details Enumerated peak current settings for boost regulator + */ + typedef enum { + BOOST_ISET_MIN, ///< Minimum On-Time + BOOST_ISET_50mA, ///< 50mA Peak Current + BOOST_ISET_100mA, ///< 100mA Peak Current + BOOST_ISET_150mA, ///< 150mA Peak Current + BOOST_ISET_200mA, ///< 200mA Peak Current + BOOST_ISET_250mA, ///< 250mA Peak Current + BOOST_ISET_300mA, ///< 300mA Peak Current + BOOST_ISET_350mA, ///< 350mA Peak Current + } boostISet_t; + + /** + * @brief Buck Peak Current Settings + * @details Enumerated peak current settings for buck regulator + */ + typedef enum { + BUCK_ISET_50mA, ///< 50mA Peak Current + BUCK_ISET_100mA, ///< 100mA Peak Current + BUCK_ISET_150mA, ///< 150mA Peak Current + BUCK_ISET_200mA, ///< 200mA Peak Current + BUCK_ISET_250mA, ///< 250mA Peak Current + BUCK_ISET_300mA, ///< 300mA Peak Current + BUCK_ISET_350mA, ///< 350mA Peak Current + BUCK_ISET_400mA, ///< 400mA Peak Current + } buckISet_t; + + /** + * @brief Monitor Configurations + * @details Enumerated configuration modes for monitor multiplexer + */ + typedef enum { + MON_PULLDOWN = 0x00, ///< Pulled down by 100k Ohm + MON_HI_Z = 0x08, ///< High Impedance + MON_SWIN = 0x80, ///< SWIN Selected + MON_SWOUT = 0x81, ///< SWOUT Selected + MON_BIN = 0x82, ///< BIN Selected + MON_BOUT = 0x83, ///< BOUT Selected + MON_HVIN = 0x84, ///< HVIN Selected + MON_HVOUT = 0x85, ///< HVOUT Selected + MON_LIN = 0x86, ///< LIN Selected + MON_LOUT = 0x87, ///< LOUT Selected + } monCfg_t; + + /** + * @brief Under-Voltage Lock Out Input + * @details Enumerated input selection options for UVLO + */ + typedef enum { + LIN_UVLO, ///< LIN used to determine UVLO condition + BIN_UVLO, ///< BIN used to determine UVLO condition + } uvloIn_t; + + /** + * MAX14690 constructor. + * + * @param sda mbed pin to use for SDA line of I2C interface. + * @param scl mbed pin to use for SCL line of I2C interface. + * @param slaveAddress Slave Address of the device. + */ + MAX14690(PinName sda, PinName scl, int slaveAddress); + + /** + * MAX14690 constructor. + * + * @param i2c I2C object to use. + * @param slaveAddress Slave Address of the device. + */ + MAX14690(I2C *i2c, int slaveAddress); + + /** + * MAX14690 destructor. + */ + ~MAX14690(); + + /** + * @brief Initialize MAX14690 + * @details Applies settings to MAX14690. + * Settings are stored in public variables. + * The variables are pre-loaded with the most common configuation. + * Assign new values to the public variables before calling init. + * This will update all the settings including the boost voltage + * from boostMillivolts and the boost enable mode from boostEn. + * @returns 0 if no errors, -1 if error. + */ + int init(); + + /** + * @brief Set the Boost Voltage + * @details Sets the voltage for the boost regulator. + * The voltage is specified in millivolts. + * The MAX14690 cannot update the voltage when enabled. + * This function checks the local boostEn variable and if the + * regualtor is enabled it will send the disable command before + * sending the new voltage and re-enable the boost regulator after + * the new voltage is written. + * @param mV voltage for boost regualtor in millivolts + * @returns 0 if no errors, -1 if error. + */ + int boostSetVoltage(int mV); + + /** + * @brief Set Boost Enable Mode + * @details Sets the enable mode for the boost regulator + * @param mode The enable mode for the boost regulator + * @returns 0 if no errors, -1 if error. + */ + int boostSetMode(boostEn_t mode); + + /** + * @brief Configure Mon Pin + * @details Configures the operating mode of the monitor multiplexer + * @param monCfg The configuration mode for the monitor pin + * @returns 0 if no errors, -1 if error. + */ + int monSet(monCfg_t monCfg); + + /** + * @brief Shutdown + * @details Sends the command to turn off all supplies and put the part + * in battery saving shelf mode. + * @returns 0 if no errors, -1 if error. + */ + int shutdown(); + + /** + * @brief Write Register + * @details Writes the given value to the specified register. + * Note, this function provides direct access to the registers + * without any awareness or effect on the settings stored in + * the public variables. This is used by the other functions to + * set the values inside the MAX14690. Calling this outside of the + * other functions can break the synchronization of the variables + * to the state of the MAX14690. + * @param reg The register to be written + * @param value The data to be written + * @returns 0 if no errors, -1 if error. + */ + int writeReg(registers_t reg, char value); + + /** + * @brief Read Register + * @details Reads from the specified register + * @param reg The register to be read + * @param value Pointer for where to store the data + * @returns 0 if no errors, -1 if error. + */ + int readReg(registers_t reg, char *value); + + /// Boost Clock Divider Enable: default 0 - Disabled, 1 - Enabled + bool clkDivEn; + /// Boost Clock Divider Setting: default 0, The clock is divided by this value +10 when enabled + int clkDivSet; + /// Boost Peak Current Setting: default BOOST_ISET_100mA + boostISet_t boostISet; + /// Boost Voltage in millivolts: default 3300 + int boostMillivolts; + /// Boost Enable Mode: default BOOST_DISABLED + boostEn_t boostEn; + /// Boost EMI Setting: default 0 - EMI damping active (lower noise), 1 - Damping disabled (more efficient) + bool boostEMI; + /// Boost Inductor Setting: default 0 - 4.7uH, 1 - 3.3uH + bool boostInd; + /// Boost Hysteresis Off: default 0 - Hysteresis enabled (more efficient), 1 - Hysteresis off (lower voltage ripple) + bool boostHysOff; + /// Boost Passive Discharge: default 0 - Disabled, 1 - Enabled when boost disabled + bool boostPasDsc; + /// Boost Active Discharge: default 0 - Disabled, 1 - Enabled when boost disabled + bool boostActDsc; + /// Buck Operating Mode: default BUCK_BURST + buckMd_t buckMd; + /// Buck Fast Start: default 0 - Normal startup current limit, 1 - Double startup current for fast start + bool buckFst; + /// Buck Peak Current Setting: default BUCK_ISET_300mA + buckISet_t buckISet; + /// Buck Configuration: default 0 - For burst mode, 1 - For FPWM mode + bool buckCfg; + /// Buck Inductor Setting: default 0 - 2.2uH, 1 - 4.7uH + bool buckInd; + /// Buck Hysteresis Off: default 0 - Hysteresis enabled (more efficient), 1 - Hysteresis off (lower voltage ripple) + bool buckHysOff; + /// Buck Minimum On Time: default 1 - Disable deglitch delay (lower voltage ripple), 0 - Enable deglitch dealy (more efficient) + bool buckMinOT; + /// Buck Integrate: default 1 - Better load regulation at higher current (recommended for output capacitance >6uF), 0 - More stable operation with smaller output capacitor + bool buckInteg; + /// Buck Passive Discharge: default 0 - Disabled, 1 - Enabled when buck disabled + bool buckPasDsc; + /// Buck Active Discharge: default 0 - Disabled, 1 - Enabled when buck disabled + bool buckActDsc; + /// Buck Fet Scaling: default 0 - Full buck FET after soft start (more efficient for larger loads), 1 - Reduced buck FET while active (lower quiescent current for light loads) + bool buckFScl; + +private: + /// I2C pointer + I2C *i2c; + /// Is this object the owner of the I2C object + bool isOwner; + /// Device slave address + int slaveAddress; +}; + +#endif /* _MAX14690_H_ */