mp2660 - 5V USB, 500mA, I2C-Controlled Linear Charger with Power Path Management for Single-Cell Li-Ion Battery

group mp2660

ESP-IDF driver for Monolithic Systems 5V USB, 500mA, I2C-Controlled Linear Charger with Power Path Management for Single-Cell Li-Ion Battery.

Copyright (c) 2023 Manuel Markwort https://github.com/mmarkwort BSD Licensed as described in the file LICENSE

Defines

MP2660_I2C_ADDR

I2C address.

MP2660_SOURCE_CONTROL_REG_DEFAULT

Default value of source control register after power on.

MP2660_POWER_ON_CONFIG_REG_DEFAULT

Default value of power on configuration register after power on.

MP2660_CURENT_CONTROL_REG_DEFAULT

Default value of current control register after power on.

MP2660_PRECHARGE_TERMINATION_CURRENT_REG_DEFAULT

Default value of pre charge termination current register after power on.

MP2660_CHARGE_VOLTAGE_CONTROL_REG_DEFAULT

Default value of voltage control register after power on.

MP2660_CHARGE_TERMINATION_TIMER_CONTROL_REG_DEFAULT

Default value of termination timer control register after power on.

MP2660_MISC_OPERATION_CONTROL_REG_DEFAULT

Default value of misc operation control register after power on.

MP2660_SYSTEM_STATUS_REG_DEFAULT

Default value of system status register after power on.

MP2660_FAULT_REG_DEFAULT

Default value of fault register after power on.

Functions

esp_err_t mp2660_init_desc(i2c_dev_t *dev, i2c_port_t port, gpio_num_t sda_gpio, gpio_num_t scl_gpio)

Initialize device descriptor.

Parameters:
  • dev – Device descriptor

  • port – I2C port

  • sda_gpio – SDA GPIO pin

  • scl_gpio – SCL GPIO pin

Returns:

ESP_OK on success

esp_err_t mp2660_free_desc(i2c_dev_t *dev)

Free device descriptor.

Parameters:

dev – Device descriptor

Returns:

ESP_OK on success

esp_err_t mp2660_get_input_source(i2c_dev_t *dev, mp2660_input_source_t *input_source)

Reads input source register.

Parameters:
  • dev – Device descriptor

  • input_source – Target buffer

Returns:

ESP_OK on success

esp_err_t mp2660_set_input_source(i2c_dev_t *dev, mp2660_input_source_t *input_source)

Writes input source register.

Parameters:
  • dev – Device descriptor

  • input_source – Source buffer

Returns:

ESP_OK on success

esp_err_t mp2660_get_pwr_on_conf(i2c_dev_t *dev, mp2660_power_on_conf_t *pwr_config)

Reads power configuration register.

Parameters:
  • dev – Device descriptor

  • pwr_config – Target buffer

Returns:

ESP_OK on success

esp_err_t mp2660_set_pwr_on_conf(i2c_dev_t *dev, mp2660_power_on_conf_t *pwr_config)

Writes power configuration register.

Parameters:
  • dev – Device descriptor

  • pwr_config – Source buffer

Returns:

ESP_OK on success

esp_err_t mp2660_get_chrg_current_ctrl(i2c_dev_t *dev, mp2660_charge_current_ctrl_t *chrg_current_ctrl)

Reads charge current control register.

Parameters:
  • dev – Device descriptor

  • chrg_current_ctrl – Target buffer

Returns:

ESP_OK on success

esp_err_t mp2660_set_chrg_current_ctrl(i2c_dev_t *dev, mp2660_charge_current_ctrl_t *chrg_current_ctrl)

Writes charge current control register.

Parameters:
  • dev – Device descriptor

  • chrg_current_ctrl – Source buffer

Returns:

ESP_OK on success

esp_err_t mp2660_get_pre_chrg_term_current(i2c_dev_t *dev, mp2660_pre_charge_term_current_t *pre_chrg_term_current)

Reads pre-charge / termination current register.

Parameters:
  • dev – Device descriptor

  • pre_chrg_term_current – Target buffer

Returns:

ESP_OK on success

esp_err_t mp2660_set_pre_chrg_term_current(i2c_dev_t *dev, mp2660_pre_charge_term_current_t *pre_chrg_term_current)

Writes pre-charge / termination current register.

Parameters:
  • dev – Device descriptor

  • pre_chrg_term_current – Source buffer

Returns:

ESP_OK on success

esp_err_t mp2660_get_chrg_voltage_control(i2c_dev_t *dev, mp2660_charge_voltage_ctrl_t *chrg_voltage_ctrl)

Reads charge voltage control register.

Parameters:
  • dev – Device descriptor

  • chrg_voltage_ctrl – Target buffer

Returns:

ESP_OK on success

esp_err_t mp2660_set_chrg_voltage_control(i2c_dev_t *dev, mp2660_charge_voltage_ctrl_t *chrg_voltage_ctrl)

Writes charge voltage control register.

Parameters:
  • dev – Device descriptor

  • chrg_voltage_ctrl – Source buffer

Returns:

ESP_OK on success

esp_err_t mp2660_get_chrg_term_timer_control(i2c_dev_t *dev, mp2660_charge_term_timer_ctrl_t *charge_term_timer_ctrl)

Reads charge termination / timer control register.

Parameters:
  • dev – Device descriptor

  • charge_term_timer_ctrl – Target buffer

Returns:

ESP_OK on success

esp_err_t mp2660_set_chrg_term_timer_control(i2c_dev_t *dev, mp2660_charge_term_timer_ctrl_t *charge_term_timer_ctrl)

Writes charge termination / timer control register.

Parameters:
  • dev – Device descriptor

  • charge_term_timer_ctrl – Source buffer

Returns:

ESP_OK on success

esp_err_t mp2660_get_misc_op_control(i2c_dev_t *dev, mp2660_misc_op_ctrl_t *misc_op_ctrl)

Reads miscellaneous operation control register.

Parameters:
  • dev – Device descriptor

  • misc_op_ctrl – Target buffer

Returns:

ESP_OK on success

esp_err_t mp2660_set_misc_op_control(i2c_dev_t *dev, mp2660_misc_op_ctrl_t *misc_op_ctrl)

Writes miscellaneous operation control register.

Parameters:
  • dev – Device descriptor

  • misc_op_ctrl – Source buffer

Returns:

ESP_OK on success

esp_err_t mp2660_get_sys_status(i2c_dev_t *dev, mp2660_sys_status_t *sys_status)

Reads system status register.

Parameters:
  • dev – Device descriptor

  • sys_status – Target buffer

Returns:

ESP_OK on success

esp_err_t mp2660_get_fault(i2c_dev_t *dev, mp2660_fault_t *fault)

Reads fault register.

Parameters:
  • dev – Device descriptor

  • fault – Target buffer

Returns:

ESP_OK on success

struct mp2660_input_source_t
#include <mp2660.h>

Input Source Control Register/Address: 00h (Default: 0100 1111)

Public Members

uint8_t i_in_lim_0

000: 85mA, 001: 130mA, 010: 175mA, 011: 220mA, 100: 265mA, 101: 310mA, 110: 355mA, 111: 455mA, Default: 455mA (111)

uint8_t i_in_lim_1

s.a.

uint8_t i_in_lim_2

s.a.

uint8_t v_in_min_0

80mV / RW / VIn Min Offset: 3.88V, Range 3.88V - 5.08V, Default: 4.60V (1001)

uint8_t v_in_min_1

160mV / RW

uint8_t v_in_min_2

320mV / RW

uint8_t v_in_min_3

640mV / RW

uint8_t en_hiz

0: Disable 1: Enable / RW / This bit only controls the on and off of the LDO FET.

uint8_t reg

Register data.

struct mp2660_power_on_conf_t
#include <mp2660.h>

Power-On Configuration Register / Address: 01h (Default: 0000 0100)

Public Members

uint8_t v_batt_uvlo_0

0.1V / RW / Offset: 2.4V, Range: 2.4V - 3.1V, Default: 2.8V (100)

uint8_t v_batt_uvlo_1

0.2V / RW

uint8_t v_batt_uvlo_2

0.4V / RW

uint8_t ceb

0: Charge enable 1: Charge disable / RW / Default: Charge enable (0)

uint8_t reserved_1

NA.

uint8_t reserved_2

NA.

uint8_t i2c_watchdog_timer

0: Normal 1: Reset / RW / Default: Normal (0)

uint8_t reg_reset

0: Keep current setting 1: Reset / RW / Default: Keep current register setting (0)

uint8_t reg

Register data.

struct mp2660_charge_current_ctrl_t
#include <mp2660.h>

Charge Current Control Register/ Address: 02h (Default: 0000 1110)

Public Members

uint8_t icc_4

272mA / RW / Offset: 8mA, Range: 8mA - 535mA, Default: 246mA (01110)

uint8_t icc_3

136mA / RW

uint8_t icc_2

68mA / RW

uint8_t icc_1

34mA / RW

uint8_t icc_0

17mA / RW

uint8_t reserved_3

NA.

uint8_t reserved_2

NA.

uint8_t reserved_1

NA.

uint8_t reg

Register data.

struct mp2660_pre_charge_term_current_t
#include <mp2660.h>

Pre-Charge/ Termination Current/ Address: 03h (Default: 0100 1010)

Public Members

uint8_t reserved_1

NA.

uint8_t i_dschg_3

800mA / RW / Offset: 200mA, Range: 200mA - 1.6A, Default: 1.0A (1001)

uint8_t i_dschg_2

400mA / RW

uint8_t i_dschg_1

200mA / RW

uint8_t i_dschg_0

100mA / RW

uint8_t reserved_2

NA.

uint8_t i_pre_1

14mA / RW / Offset: 6mA, Range: 6mA - 27mA, Default: 20mA (10)

uint8_t i_pre_0

7mA / RW

uint8_t reg

Register data.

struct mp2660_charge_voltage_ctrl_t
#include <mp2660.h>

Charge Voltage Control Register/ Address: 04h (Default: 1010 0011)

Public Members

uint8_t v_bat_reg_5

480mV / RW / Offset: 3.60V, Range: 3.60V - 4.545V, Default: 4.2V (101000)

uint8_t v_bat_reg_4

240mV / RW

uint8_t v_bat_reg_3

120mV / RW

uint8_t v_bat_reg_2

60mV / RW

uint8_t v_bat_reg_1

30mV / RW

uint8_t v_bat_reg_0

15mV / RW

uint8_t v_batt_pre

0: 2.8V 1: 3.0V / RW / Default: 3.0V (1)

uint8_t v_batt_rech

0: 150mV 1: 300mV / RW / Default: 300mV (1)

uint8_t reg

Register data.

struct mp2660_charge_term_timer_ctrl_t
#include <mp2660.h>

Charge Termination/Timer Control Register / Address: 05h (Default: 0100 1010)

Public Members

uint8_t reserved

NA.

uint8_t en_term

0: Disable 1: Enable / RW / Default: Enable (1)

uint8_t watchdog_1

00: Disable timer 01: 40s 10: 80s 11: 160s / RW / Default: Disable timer (00)

uint8_t watchdog_0

s.a.

uint8_t en_timer

0: Disable 1: Enable / RW / Default: Enable timer (1)

uint8_t chg_timer_1

00: 3hrs 01: 5hrs 10: 8hrs 11: 12hrs / RW / Default: 5hrs (01)

uint8_t chg_timer_0

s.a.

uint8_t term_tmr

0: Disable 1: Enable / RW / Default: Disable (0)

uint8_t reg

Register data.

struct mp2660_misc_op_ctrl_t
#include <mp2660.h>

Miscellaneous Operation Control Register/ Address: 06h (Default: 0000 1011)

Public Members

uint8_t reserved_1

NA.

uint8_t tmr2x_en

0: Disable 2X extended safety timer during PPM 1: Enable 2X extended safety timer during PPM / RW / Default: Disable (0)

uint8_t fet_dis

0: Enable 1: Turn off / RW / Default: Enable (0)

uint8_t reserved_2

NA.

uint8_t en_ntc

0: Disable 1: Enable / RW / Default: Enable (1)

uint8_t reserved_3

NA.

uint8_t tj_reg_0

00: 60°C 01: 80°C 10: 100°C 11: 120°C / RW / 120°C (11)

uint8_t tj_reg_1

s.a.

uint8_t reg

Register data.

struct mp2660_sys_status_t
#include <mp2660.h>

System Status Register/ Address: 07h (Default: 0000 0000)

Public Members

uint8_t reserved_1

NA.

uint8_t rev_1

Revision number / R / Default: (00)

uint8_t rev_0

s.a.

uint8_t chg_stat_1

00: Not charging 01: Pre-charge 10: Charge 11: Charge done / R / Default: Not charging (00)

uint8_t chg_stat_0

s.a.

uint8_t ppm_stat

0: No PPM 1: In PPM / R / Default: No PPM (0) (no power-path management happens)

uint8_t pg_stat

0: Power fail 1: Power good / R / Default: Power fail (0)

uint8_t therm_stat

0: No thermal regulation 1: In thermal regulation / R / No thermal regulation (0)

uint8_t reg

Register data.

struct mp2660_fault_t
#include <mp2660.h>

Fault Register/ Address: 08h (Default: 0000 0000)

Public Members

uint8_t reserved_1

NA.

uint8_t watchdog_fault

0: Normal 1: Watchdog timer expiration / R / Default: Normal (0)

uint8_t vin_fault

0: Normal 1: Input fault (OVP or bad source) / R / Default: Normal (0)

uint8_t them_sd

0: Normal 1: Thermal shutdown / R / Default: Normal (0)

uint8_t bat_fault

0: Normal 1: Battery OVP / R / Default: Normal (0)

uint8_t stmr_fault

0: Normal 1: Safety timer expiration / R / Default: Normal (0)

uint8_t reserved_2

NA.

uint8_t reserved_3

NA.

uint8_t reg

Register data.