The MAX77734 is a tiny PMIC for applications where size and simplicity are critical. The IC integrates a linear-mode Li+ battery charger, low-dropout linear regulator (LDO), analog multiplexer, and dual-channel current sink driver. Datasheet: https://datasheets.maximintegrated.com/en/ds/MAX77734.pdf Applications ● Hearables: Headsets, Headphones, Earbuds ● Fitness Bands and other Bluetooth Wearables ● Action Cameras, Wearable/Body Cameras ● Low-Power Internet of Things (IoT) Gadgets

The MAX77734 is a tiny PMIC for applications where size and simplicity are critical. The IC integrates a linear-mode Li+ battery charger, low-dropout linear regulator (LDO), analog multiplexer, and dual-channel current sink driver.

Applications

● Hearables: Headsets, Headphones, Earbuds

● Fitness Bands and other Bluetooth Wearables

● Action Cameras, Wearable/Body Cameras

● Low-Power Internet of Things (IoT) Gadgets

Datasheet: https://datasheets.maximintegrated.com/en/ds/MAX77734.pdf

EVKit: https://www.maximintegrated.com/en/products/power/battery-management/MAX77734EVKIT.html

Committer:
daniel_gs_jeong
Date:
Thu Dec 27 04:59:28 2018 +0000
Revision:
0:2726f8e71192
The 1st version of MAX77734, a tiny PMIC for applications where size; and simplicity are critical.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
daniel_gs_jeong 0:2726f8e71192 1 /*******************************************************************************
daniel_gs_jeong 0:2726f8e71192 2 * Copyright (C) 2018 Maxim Integrated Products, Inc., All Rights Reserved.
daniel_gs_jeong 0:2726f8e71192 3 *
daniel_gs_jeong 0:2726f8e71192 4 * Permission is hereby granted, free of charge, to any person obtaining a
daniel_gs_jeong 0:2726f8e71192 5 * copy of this software and associated documentation files (the "Software"),
daniel_gs_jeong 0:2726f8e71192 6 * to deal in the Software without restriction, including without limitation
daniel_gs_jeong 0:2726f8e71192 7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
daniel_gs_jeong 0:2726f8e71192 8 * and/or sell copies of the Software, and to permit persons to whom the
daniel_gs_jeong 0:2726f8e71192 9 * Software is furnished to do so, subject to the following conditions:
daniel_gs_jeong 0:2726f8e71192 10 *
daniel_gs_jeong 0:2726f8e71192 11 * The above copyright notice and this permission notice shall be included
daniel_gs_jeong 0:2726f8e71192 12 * in all copies or substantial portions of the Software.
daniel_gs_jeong 0:2726f8e71192 13 *
daniel_gs_jeong 0:2726f8e71192 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
daniel_gs_jeong 0:2726f8e71192 15 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
daniel_gs_jeong 0:2726f8e71192 16 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
daniel_gs_jeong 0:2726f8e71192 17 * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
daniel_gs_jeong 0:2726f8e71192 18 * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
daniel_gs_jeong 0:2726f8e71192 19 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
daniel_gs_jeong 0:2726f8e71192 20 * OTHER DEALINGS IN THE SOFTWARE.
daniel_gs_jeong 0:2726f8e71192 21 *
daniel_gs_jeong 0:2726f8e71192 22 * Except as contained in this notice, the name of Maxim Integrated
daniel_gs_jeong 0:2726f8e71192 23 * Products, Inc. shall not be used except as stated in the Maxim Integrated
daniel_gs_jeong 0:2726f8e71192 24 * Products, Inc. Branding Policy.
daniel_gs_jeong 0:2726f8e71192 25 *
daniel_gs_jeong 0:2726f8e71192 26 * The mere transfer of this software does not imply any licenses
daniel_gs_jeong 0:2726f8e71192 27 * of trade secrets, proprietary technology, copyrights, patents,
daniel_gs_jeong 0:2726f8e71192 28 * trademarks, maskwork rights, or any other form of intellectual
daniel_gs_jeong 0:2726f8e71192 29 * property whatsoever. Maxim Integrated Products, Inc. retains all
daniel_gs_jeong 0:2726f8e71192 30 * ownership rights.
daniel_gs_jeong 0:2726f8e71192 31 *******************************************************************************
daniel_gs_jeong 0:2726f8e71192 32 */
daniel_gs_jeong 0:2726f8e71192 33
daniel_gs_jeong 0:2726f8e71192 34 #ifndef _MAX77734_H_
daniel_gs_jeong 0:2726f8e71192 35 #define _MAX77734_H_
daniel_gs_jeong 0:2726f8e71192 36
daniel_gs_jeong 0:2726f8e71192 37 #include "mbed.h"
daniel_gs_jeong 0:2726f8e71192 38
daniel_gs_jeong 0:2726f8e71192 39 class MAX77734
daniel_gs_jeong 0:2726f8e71192 40 {
daniel_gs_jeong 0:2726f8e71192 41 // https://datasheets.maximintegrated.com/en/ds/MAX77734.pdf
daniel_gs_jeong 0:2726f8e71192 42 public:
daniel_gs_jeong 0:2726f8e71192 43
daniel_gs_jeong 0:2726f8e71192 44 /**
daniel_gs_jeong 0:2726f8e71192 45 * @brief Register Addresses
daniel_gs_jeong 0:2726f8e71192 46 * @details Enumerated MAX77734 register addresses
daniel_gs_jeong 0:2726f8e71192 47 */
daniel_gs_jeong 0:2726f8e71192 48 typedef enum {
daniel_gs_jeong 0:2726f8e71192 49 REG_INT_GLBL = 0x00,
daniel_gs_jeong 0:2726f8e71192 50 REG_INT_CHG,
daniel_gs_jeong 0:2726f8e71192 51 REG_STAT_CHG_A,
daniel_gs_jeong 0:2726f8e71192 52 REG_STAT_CHG_B,
daniel_gs_jeong 0:2726f8e71192 53 REG_ERCFLAG,
daniel_gs_jeong 0:2726f8e71192 54 REG_STAT_GLBL,
daniel_gs_jeong 0:2726f8e71192 55 REG_INTM_GLBL,
daniel_gs_jeong 0:2726f8e71192 56 REG_INTM_CHG,
daniel_gs_jeong 0:2726f8e71192 57 REG_CNFG_GLBL,
daniel_gs_jeong 0:2726f8e71192 58 REG_CID,
daniel_gs_jeong 0:2726f8e71192 59 REG_CNFG_WDT,
daniel_gs_jeong 0:2726f8e71192 60
daniel_gs_jeong 0:2726f8e71192 61 REG_CNFG_CHG_A = 0x20,
daniel_gs_jeong 0:2726f8e71192 62 REG_CNFG_CHG_B,
daniel_gs_jeong 0:2726f8e71192 63 REG_CNFG_CHG_C,
daniel_gs_jeong 0:2726f8e71192 64 REG_CNFG_CHG_D,
daniel_gs_jeong 0:2726f8e71192 65 REG_CNFG_CHG_E,
daniel_gs_jeong 0:2726f8e71192 66 REG_CNFG_CHG_F,
daniel_gs_jeong 0:2726f8e71192 67 REG_CNFG_CHG_G,
daniel_gs_jeong 0:2726f8e71192 68 REG_CNFG_CHG_H,
daniel_gs_jeong 0:2726f8e71192 69 REG_CNFG_CHG_I,
daniel_gs_jeong 0:2726f8e71192 70
daniel_gs_jeong 0:2726f8e71192 71 REG_CNFG_LDO_A = 0x30,
daniel_gs_jeong 0:2726f8e71192 72 REG_CNFG_LDO_B,
daniel_gs_jeong 0:2726f8e71192 73
daniel_gs_jeong 0:2726f8e71192 74 REG_CNFG_SNK1_A = 0x40,
daniel_gs_jeong 0:2726f8e71192 75 REG_CNFG_SNK1_B,
daniel_gs_jeong 0:2726f8e71192 76 REG_CNFG_SNK2_A,
daniel_gs_jeong 0:2726f8e71192 77 REG_CNFG_SNK2_B,
daniel_gs_jeong 0:2726f8e71192 78 REG_CNFG_SNK_TOP,
daniel_gs_jeong 0:2726f8e71192 79 } REG_TYPE;
daniel_gs_jeong 0:2726f8e71192 80
daniel_gs_jeong 0:2726f8e71192 81 typedef enum {
daniel_gs_jeong 0:2726f8e71192 82 I_TERM_5_PERCENT = 0x00,
daniel_gs_jeong 0:2726f8e71192 83 I_TERM_7P5_PERCENT,
daniel_gs_jeong 0:2726f8e71192 84 I_TERM_10_PERCENT,
daniel_gs_jeong 0:2726f8e71192 85 I_TERM_15_PERCENT,
daniel_gs_jeong 0:2726f8e71192 86 } I_TERM_TYPE;
daniel_gs_jeong 0:2726f8e71192 87
daniel_gs_jeong 0:2726f8e71192 88 typedef enum {
daniel_gs_jeong 0:2726f8e71192 89 VAL_DISABLE = 0,
daniel_gs_jeong 0:2726f8e71192 90 VAL_ENABLE,
daniel_gs_jeong 0:2726f8e71192 91 VAL_ENABLE_OPTION1, //OPTION 1: emable when GHGIN is valid
daniel_gs_jeong 0:2726f8e71192 92 } ENABLE_TYPE;
daniel_gs_jeong 0:2726f8e71192 93
daniel_gs_jeong 0:2726f8e71192 94 typedef enum {
daniel_gs_jeong 0:2726f8e71192 95 LDO_LOW_PWR_MODE = 0x00,
daniel_gs_jeong 0:2726f8e71192 96 LDO_NORMAL_PWR_MODE,
daniel_gs_jeong 0:2726f8e71192 97 LDO_PIN_ACT_HIGH,
daniel_gs_jeong 0:2726f8e71192 98 LDO_PIN_ACT_LOW,
daniel_gs_jeong 0:2726f8e71192 99 } POWER_MODE_TYPE;
daniel_gs_jeong 0:2726f8e71192 100
daniel_gs_jeong 0:2726f8e71192 101 /**
daniel_gs_jeong 0:2726f8e71192 102 * MAX77734 constructor.
daniel_gs_jeong 0:2726f8e71192 103 *
daniel_gs_jeong 0:2726f8e71192 104 * @param sda mbed pin to use for SDA line of I2C interface.
daniel_gs_jeong 0:2726f8e71192 105 * @param scl mbed pin to use for SCL line of I2C interface.
daniel_gs_jeong 0:2726f8e71192 106 */
daniel_gs_jeong 0:2726f8e71192 107 MAX77734(PinName sda, PinName scl);
daniel_gs_jeong 0:2726f8e71192 108
daniel_gs_jeong 0:2726f8e71192 109 /**
daniel_gs_jeong 0:2726f8e71192 110 * MAX77734 constructor.
daniel_gs_jeong 0:2726f8e71192 111 *
daniel_gs_jeong 0:2726f8e71192 112 * @param i2c I2C object to use.
daniel_gs_jeong 0:2726f8e71192 113 */
daniel_gs_jeong 0:2726f8e71192 114 MAX77734(I2C *i2c);
daniel_gs_jeong 0:2726f8e71192 115
daniel_gs_jeong 0:2726f8e71192 116 /**
daniel_gs_jeong 0:2726f8e71192 117 * MAX77734 destructor.
daniel_gs_jeong 0:2726f8e71192 118 */
daniel_gs_jeong 0:2726f8e71192 119 ~MAX77734();
daniel_gs_jeong 0:2726f8e71192 120
daniel_gs_jeong 0:2726f8e71192 121 /**
daniel_gs_jeong 0:2726f8e71192 122 * @brief Initialize MAX77734
daniel_gs_jeong 0:2726f8e71192 123 */
daniel_gs_jeong 0:2726f8e71192 124 int32_t init();
daniel_gs_jeong 0:2726f8e71192 125
daniel_gs_jeong 0:2726f8e71192 126 /**
daniel_gs_jeong 0:2726f8e71192 127 * @brief I2C Write
daniel_gs_jeong 0:2726f8e71192 128 * @details Writes data to MAX77734 register
daniel_gs_jeong 0:2726f8e71192 129 *
daniel_gs_jeong 0:2726f8e71192 130 * @param reg_addr Register to write
daniel_gs_jeong 0:2726f8e71192 131 * @param reg_data Data to write
daniel_gs_jeong 0:2726f8e71192 132 * @returns 0 if no errors, -1 if error.
daniel_gs_jeong 0:2726f8e71192 133 */
daniel_gs_jeong 0:2726f8e71192 134 int32_t i2c_write_byte(MAX77734::REG_TYPE reg_addr, char reg_data);
daniel_gs_jeong 0:2726f8e71192 135 int32_t i2c_write_bytes(MAX77734::REG_TYPE startReg,
daniel_gs_jeong 0:2726f8e71192 136 MAX77734::REG_TYPE stopReg,
daniel_gs_jeong 0:2726f8e71192 137 const uint8_t *data);
daniel_gs_jeong 0:2726f8e71192 138 /**
daniel_gs_jeong 0:2726f8e71192 139 * @brief I2C Read
daniel_gs_jeong 0:2726f8e71192 140 * @details Reads data from MAX77734 register
daniel_gs_jeong 0:2726f8e71192 141 *
daniel_gs_jeong 0:2726f8e71192 142 * @param reg_addr Register to read
daniel_gs_jeong 0:2726f8e71192 143 * @returns data if no errors, -1 if error.
daniel_gs_jeong 0:2726f8e71192 144 */
daniel_gs_jeong 0:2726f8e71192 145 int32_t i2c_read_byte(MAX77734::REG_TYPE reg_addr);
daniel_gs_jeong 0:2726f8e71192 146 int32_t i2c_read_bytes(MAX77734::REG_TYPE startReg,
daniel_gs_jeong 0:2726f8e71192 147 MAX77734::REG_TYPE stopReg,
daniel_gs_jeong 0:2726f8e71192 148 uint8_t *data);
daniel_gs_jeong 0:2726f8e71192 149
daniel_gs_jeong 0:2726f8e71192 150 int32_t i2c_update_byte(MAX77734::REG_TYPE reg_addr,
daniel_gs_jeong 0:2726f8e71192 151 char set_data, char mask);
daniel_gs_jeong 0:2726f8e71192 152
daniel_gs_jeong 0:2726f8e71192 153
daniel_gs_jeong 0:2726f8e71192 154 /**
daniel_gs_jeong 0:2726f8e71192 155 * @brief read_register
daniel_gs_jeong 0:2726f8e71192 156 * @details Reads from the chip.
daniel_gs_jeong 0:2726f8e71192 157 *
daniel_gs_jeong 0:2726f8e71192 158 * @param MAX77734 Register Type.
daniel_gs_jeong 0:2726f8e71192 159 * @returns register value.
daniel_gs_jeong 0:2726f8e71192 160 */
daniel_gs_jeong 0:2726f8e71192 161 int32_t read_register(MAX77734::REG_TYPE reg_addr);
daniel_gs_jeong 0:2726f8e71192 162
daniel_gs_jeong 0:2726f8e71192 163 /**
daniel_gs_jeong 0:2726f8e71192 164 * @brief interrupt_isr
daniel_gs_jeong 0:2726f8e71192 165 * @details interrupt service routine.
daniel_gs_jeong 0:2726f8e71192 166 *
daniel_gs_jeong 0:2726f8e71192 167 * @param none.
daniel_gs_jeong 0:2726f8e71192 168 * @returns return interrupt status register values.
daniel_gs_jeong 0:2726f8e71192 169 */
daniel_gs_jeong 0:2726f8e71192 170 int32_t interrupt_isr();
daniel_gs_jeong 0:2726f8e71192 171
daniel_gs_jeong 0:2726f8e71192 172 /**
daniel_gs_jeong 0:2726f8e71192 173 * @brief fset_i_fastchg_uA
daniel_gs_jeong 0:2726f8e71192 174 * @details set fast charging current.
daniel_gs_jeong 0:2726f8e71192 175 *
daniel_gs_jeong 0:2726f8e71192 176 * @param current in uA.
daniel_gs_jeong 0:2726f8e71192 177 * @returns -1 for error.
daniel_gs_jeong 0:2726f8e71192 178 */
daniel_gs_jeong 0:2726f8e71192 179 int32_t set_i_fastchg_uA(int32_t current);
daniel_gs_jeong 0:2726f8e71192 180
daniel_gs_jeong 0:2726f8e71192 181 /**
daniel_gs_jeong 0:2726f8e71192 182 * @brief set_time_fastchg_hour.
daniel_gs_jeong 0:2726f8e71192 183 * @details update REG_CNFG_CHG_E register.
daniel_gs_jeong 0:2726f8e71192 184 *
daniel_gs_jeong 0:2726f8e71192 185 * @param time in hours.
daniel_gs_jeong 0:2726f8e71192 186 * @returns -1 for error.
daniel_gs_jeong 0:2726f8e71192 187 */
daniel_gs_jeong 0:2726f8e71192 188 int32_t set_time_fastchg_hour(int32_t hour);
daniel_gs_jeong 0:2726f8e71192 189
daniel_gs_jeong 0:2726f8e71192 190 /**
daniel_gs_jeong 0:2726f8e71192 191 * @brief set_v_fastchg_mA.
daniel_gs_jeong 0:2726f8e71192 192 * @details update REG_CNFG_CHG_G register.
daniel_gs_jeong 0:2726f8e71192 193 *
daniel_gs_jeong 0:2726f8e71192 194 * @param voltage in mV.
daniel_gs_jeong 0:2726f8e71192 195 * @returns -1 for error.
daniel_gs_jeong 0:2726f8e71192 196 */
daniel_gs_jeong 0:2726f8e71192 197 int32_t set_v_fastchg_mA(int32_t voltage);
daniel_gs_jeong 0:2726f8e71192 198
daniel_gs_jeong 0:2726f8e71192 199 /**
daniel_gs_jeong 0:2726f8e71192 200 * @brief set_i_term_percent.
daniel_gs_jeong 0:2726f8e71192 201 * @details update REG_CNFG_CHG_C register..
daniel_gs_jeong 0:2726f8e71192 202 *
daniel_gs_jeong 0:2726f8e71192 203 * @param termination percent.
daniel_gs_jeong 0:2726f8e71192 204 * @returns -1 for error.
daniel_gs_jeong 0:2726f8e71192 205 */
daniel_gs_jeong 0:2726f8e71192 206 int32_t set_i_term_percent(MAX77734::I_TERM_TYPE percent);
daniel_gs_jeong 0:2726f8e71192 207
daniel_gs_jeong 0:2726f8e71192 208 /**
daniel_gs_jeong 0:2726f8e71192 209 * @brief set_time_topoff_min.
daniel_gs_jeong 0:2726f8e71192 210 * @details update REG_CNFG_CHG_C register..
daniel_gs_jeong 0:2726f8e71192 211 *
daniel_gs_jeong 0:2726f8e71192 212 * @param top off time in minute.
daniel_gs_jeong 0:2726f8e71192 213 * @returns -1 for error.
daniel_gs_jeong 0:2726f8e71192 214 */
daniel_gs_jeong 0:2726f8e71192 215 int32_t set_time_topoff_min(int32_t minute);
daniel_gs_jeong 0:2726f8e71192 216
daniel_gs_jeong 0:2726f8e71192 217 /**
daniel_gs_jeong 0:2726f8e71192 218 * @brief set_charger_enable.
daniel_gs_jeong 0:2726f8e71192 219 * @details update REG_CNFG_CHG_B register.
daniel_gs_jeong 0:2726f8e71192 220 *
daniel_gs_jeong 0:2726f8e71192 221 * @param .
daniel_gs_jeong 0:2726f8e71192 222 * @returns -1 for error.
daniel_gs_jeong 0:2726f8e71192 223 */
daniel_gs_jeong 0:2726f8e71192 224 int32_t set_charger_enable(MAX77734::ENABLE_TYPE control);
daniel_gs_jeong 0:2726f8e71192 225
daniel_gs_jeong 0:2726f8e71192 226 /**
daniel_gs_jeong 0:2726f8e71192 227 * @brief set_ldo_enable.
daniel_gs_jeong 0:2726f8e71192 228 * @details update REG_CNFG_LDO_B register.
daniel_gs_jeong 0:2726f8e71192 229 *
daniel_gs_jeong 0:2726f8e71192 230 * @param enable/disable.
daniel_gs_jeong 0:2726f8e71192 231 * @returns -1 for error.
daniel_gs_jeong 0:2726f8e71192 232 */
daniel_gs_jeong 0:2726f8e71192 233 int32_t set_ldo_enable(MAX77734::ENABLE_TYPE control);
daniel_gs_jeong 0:2726f8e71192 234
daniel_gs_jeong 0:2726f8e71192 235 /**
daniel_gs_jeong 0:2726f8e71192 236 * @brief set_ldo_pwr_mode.
daniel_gs_jeong 0:2726f8e71192 237 * @details update REG_CNFG_LDO_B register.
daniel_gs_jeong 0:2726f8e71192 238 *
daniel_gs_jeong 0:2726f8e71192 239 * @param power mode.
daniel_gs_jeong 0:2726f8e71192 240 * @returns -1 for error.
daniel_gs_jeong 0:2726f8e71192 241 */
daniel_gs_jeong 0:2726f8e71192 242 int32_t set_ldo_pwr_mode(MAX77734::POWER_MODE_TYPE mode);
daniel_gs_jeong 0:2726f8e71192 243
daniel_gs_jeong 0:2726f8e71192 244 /**
daniel_gs_jeong 0:2726f8e71192 245 * @brief set_ldo_voltage_mV.
daniel_gs_jeong 0:2726f8e71192 246 * @details update REG_CNFG_LDO_A register.
daniel_gs_jeong 0:2726f8e71192 247 *
daniel_gs_jeong 0:2726f8e71192 248 * @param voltage in mV.
daniel_gs_jeong 0:2726f8e71192 249 * @returns -1 for error.
daniel_gs_jeong 0:2726f8e71192 250 */
daniel_gs_jeong 0:2726f8e71192 251 int32_t set_ldo_voltage_mV(int32_t voltage);
daniel_gs_jeong 0:2726f8e71192 252
daniel_gs_jeong 0:2726f8e71192 253
daniel_gs_jeong 0:2726f8e71192 254
daniel_gs_jeong 0:2726f8e71192 255 private:
daniel_gs_jeong 0:2726f8e71192 256
daniel_gs_jeong 0:2726f8e71192 257 I2C *i2c_;
daniel_gs_jeong 0:2726f8e71192 258 bool i2c_owner;
daniel_gs_jeong 0:2726f8e71192 259
daniel_gs_jeong 0:2726f8e71192 260 };
daniel_gs_jeong 0:2726f8e71192 261
daniel_gs_jeong 0:2726f8e71192 262 #endif /* _MAX77734_H_ */