97 lines
2.3 KiB
C
97 lines
2.3 KiB
C
/*
|
|
* Copyright 2021 Matija Tudan
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
#ifndef ZEPHYR_DRIVERS_SENSOR_BATTERY_MAX17262_H_
|
|
#define ZEPHYR_DRIVERS_SENSOR_BATTERY_MAX17262_H_
|
|
|
|
#define VOLTAGE_MULTIPLIER_UV 1250 / 16
|
|
#define CURRENT_MULTIPLIER_NA 156250
|
|
#define TIME_MULTIPLIER_MS 5625
|
|
|
|
/* Register addresses */
|
|
enum {
|
|
STATUS = 0x00,
|
|
REP_CAP = 0x05,
|
|
REP_SOC = 0x06,
|
|
INT_TEMP = 0x08,
|
|
VCELL = 0x09,
|
|
AVG_CURRENT = 0x0b,
|
|
FULL_CAP_REP = 0x10,
|
|
TTE = 0x11,
|
|
CYCLES = 0x17,
|
|
DESIGN_CAP = 0x18,
|
|
ICHG_TERM = 0x1E,
|
|
TTF = 0x20,
|
|
VEMPTY = 0x3A,
|
|
FSTAT = 0x3D,
|
|
COULOMB_COUNTER = 0x4D,
|
|
SOFT_WAKEUP = 0x60,
|
|
HIBCFG = 0xBA,
|
|
MODELCFG = 0xDB,
|
|
};
|
|
|
|
/* Masks */
|
|
enum {
|
|
FSTAT_DNR = 0x01,
|
|
STATUS_POR = 0x02,
|
|
MODELCFG_REFRESH = 0x8000,
|
|
};
|
|
|
|
/* MAX17262 specific channels */
|
|
enum max17262_channel {
|
|
MAX17262_COULOMB_COUNTER,
|
|
};
|
|
|
|
struct max17262_data {
|
|
/* Current cell voltage in units of 1.25/16mV */
|
|
uint16_t voltage;
|
|
/* Average current in units of 156.25uA */
|
|
int16_t avg_current;
|
|
/* Desired charging current in mA */
|
|
uint16_t ichg_term;
|
|
/* Remaining capacity as a %age */
|
|
uint16_t state_of_charge;
|
|
/* Internal temperature in units of 1/256 degrees C */
|
|
int16_t internal_temp;
|
|
/* Full charge capacity in mAh */
|
|
uint16_t full_cap;
|
|
/* Remaining capacity in mAh */
|
|
uint16_t remaining_cap;
|
|
/* Time to empty in seconds */
|
|
uint16_t time_to_empty;
|
|
/* Time to full in seconds */
|
|
uint16_t time_to_full;
|
|
/* Cycle count in 1/100ths (number of charge/discharge cycles) */
|
|
uint16_t cycle_count;
|
|
/* Battery capacity in mAh */
|
|
uint16_t design_cap;
|
|
/* Spent capacity in mAh */
|
|
uint16_t coulomb_counter;
|
|
};
|
|
|
|
struct max17262_config {
|
|
const struct device *i2c;
|
|
uint16_t i2c_addr;
|
|
/* Value of Rsense resistor in milliohms (typicallly 5 or 10) */
|
|
uint16_t rsense_mohms;
|
|
/* Design voltage of cell in mV */
|
|
uint16_t design_voltage;
|
|
/* Desired voltage of cell in mV */
|
|
uint16_t desired_voltage;
|
|
/* Desired charging current in mA */
|
|
uint16_t desired_charging_current;
|
|
/* Battery capacity in mAh */
|
|
uint16_t design_cap;
|
|
/* Empty voltage detection in mV */
|
|
uint16_t empty_voltage;
|
|
/* Recovery voltage detection in mV */
|
|
uint16_t recovery_voltage;
|
|
/* Defined charge voltage value in mV */
|
|
uint16_t charge_voltage;
|
|
};
|
|
|
|
#endif
|