Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


Quelle  max17042_battery.h   Sprache: C

 
/* SPDX-License-Identifier: GPL-2.0-or-later */
/*
 * Fuel gauge driver for Maxim 17042 / 8966 / 8997
 *  Note that Maxim 8966 and 8997 are mfd and this is its subdevice.
 *
 * Copyright (C) 2011 Samsung Electronics
 * MyungJoo Ham <myungjoo.ham@samsung.com>
 */


#ifndef __MAX17042_BATTERY_H_
#define __MAX17042_BATTERY_H_

#define MAX17042_STATUS_BattAbsent (1 << 3)
#define MAX17042_BATTERY_FULL  (95)   /* Recommend. FullSOCThr value */
#define MAX17042_DEFAULT_SNS_RESISTOR (10000)
#define MAX17042_DEFAULT_VMIN  (3000)
#define MAX17042_DEFAULT_VMAX  (4500) /* LiHV cell max */
#define MAX17042_DEFAULT_TEMP_MIN (0)    /* For sys without temp sensor */
#define MAX17042_DEFAULT_TEMP_MAX (700)  /* 70 degrees Celcius */

/* Consider RepCap which is less then 10 units below FullCAP full */
#define MAX17042_FULL_THRESHOLD  10

#define MAX17042_CHARACTERIZATION_DATA_SIZE 48

enum max17042_register {
 MAX17042_STATUS  = 0x00,
 MAX17042_VALRT_Th = 0x01,
 MAX17042_TALRT_Th = 0x02,
 MAX17042_SALRT_Th = 0x03,
 MAX17042_AtRate  = 0x04,
 MAX17042_RepCap  = 0x05,
 MAX17042_RepSOC  = 0x06,
 MAX17042_Age  = 0x07,
 MAX17042_TEMP  = 0x08,
 MAX17042_VCELL  = 0x09,
 MAX17042_Current = 0x0A,
 MAX17042_AvgCurrent = 0x0B,

 MAX17042_SOC  = 0x0D,
 MAX17042_AvSOC  = 0x0E,
 MAX17042_RemCap  = 0x0F,
 MAX17042_FullCAP = 0x10,
 MAX17042_TTE  = 0x11,
 MAX17042_V_empty = 0x12,

 MAX17042_RSLOW  = 0x14,

 MAX17042_AvgTA  = 0x16,
 MAX17042_Cycles  = 0x17,
 MAX17042_DesignCap = 0x18,
 MAX17042_AvgVCELL = 0x19,
 MAX17042_MinMaxTemp = 0x1A,
 MAX17042_MinMaxVolt = 0x1B,
 MAX17042_MinMaxCurr = 0x1C,
 MAX17042_CONFIG  = 0x1D,
 MAX17042_ICHGTerm = 0x1E,
 MAX17042_AvCap  = 0x1F,
 MAX17042_ManName = 0x20,
 MAX17042_DevName = 0x21,

 MAX17042_FullCAPNom = 0x23,
 MAX17042_TempNom = 0x24,
 MAX17042_TempLim = 0x25,
 MAX17042_TempHot = 0x26,
 MAX17042_AIN  = 0x27,
 MAX17042_LearnCFG = 0x28,
 MAX17042_FilterCFG = 0x29,
 MAX17042_RelaxCFG = 0x2A,
 MAX17042_MiscCFG = 0x2B,
 MAX17042_TGAIN  = 0x2C,
 MAX17042_TOFF  = 0x2D,
 MAX17042_CGAIN  = 0x2E,
 MAX17042_COFF  = 0x2F,

 MAX17042_MaskSOC = 0x32,
 MAX17042_SOC_empty = 0x33,
 MAX17042_T_empty = 0x34,

 MAX17042_FullCAP0       = 0x35,
 MAX17042_IAvg_empty = 0x36,
 MAX17042_FCTC  = 0x37,
 MAX17042_RCOMP0  = 0x38,
 MAX17042_TempCo  = 0x39,
 MAX17042_EmptyTempCo = 0x3A,
 MAX17042_K_empty0 = 0x3B,
 MAX17042_TaskPeriod = 0x3C,
 MAX17042_FSTAT  = 0x3D,

 MAX17042_SHDNTIMER = 0x3F,

 MAX17042_dQacc  = 0x45,
 MAX17042_dPacc  = 0x46,

 MAX17042_VFSOC0  = 0x48,

 MAX17042_QH  = 0x4D,
 MAX17042_QL  = 0x4E,

 MAX17042_VFSOC0Enable = 0x60,
 MAX17042_MLOCKReg1 = 0x62,
 MAX17042_MLOCKReg2 = 0x63,

 MAX17042_MODELChrTbl = 0x80,

 MAX17042_OCV  = 0xEE,

 MAX17042_OCVInternal = 0xFB,  /* MAX17055 VFOCV */

 MAX17042_VFSOC  = 0xFF,
};

/* Registers specific to max17055 only */
enum max17055_register {
 MAX17055_QRes  = 0x0C,
 MAX17055_RCell  = 0x14,
 MAX17055_TTF  = 0x20,
 MAX17055_DieTemp = 0x34,
 MAX17055_USER_MEM = 0x40,
 MAX17055_RGAIN  = 0x43,

 MAX17055_ConvgCfg = 0x49,
 MAX17055_VFRemCap = 0x4A,

 MAX17055_STATUS2 = 0xB0,
 MAX17055_POWER  = 0xB1,
 MAX17055_ID  = 0xB2,
 MAX17055_AvgPower = 0xB3,
 MAX17055_IAlrtTh = 0xB4,
 MAX17055_TTFCfg  = 0xB5,
 MAX17055_CVMixCap = 0xB6,
 MAX17055_CVHalfTime = 0xB7,
 MAX17055_CGTempCo = 0xB8,
 MAX17055_Curve  = 0xB9,
 MAX17055_HibCfg  = 0xBA,
 MAX17055_Config2 = 0xBB,
 MAX17055_VRipple = 0xBC,
 MAX17055_RippleCfg = 0xBD,
 MAX17055_TimerH  = 0xBE,

 MAX17055_RSense  = 0xD0,
 MAX17055_ScOcvLim = 0xD1,

 MAX17055_SOCHold = 0xD3,
 MAX17055_MaxPeakPwr = 0xD4,
 MAX17055_SusPeakPwr = 0xD5,
 MAX17055_PackResistance = 0xD6,
 MAX17055_SysResistance = 0xD7,
 MAX17055_MinSysV = 0xD8,
 MAX17055_MPPCurrent = 0xD9,
 MAX17055_SPPCurrent = 0xDA,
 MAX17055_ModelCfg = 0xDB,
 MAX17055_AtQResidual = 0xDC,
 MAX17055_AtTTE  = 0xDD,
 MAX17055_AtAvSOC = 0xDE,
 MAX17055_AtAvCap = 0xDF,
};

/* Registers specific to max17047/50/55 */
enum max17047_register {
 MAX17047_QRTbl00 = 0x12,
 MAX17047_FullSOCThr = 0x13,
 MAX17047_QRTbl10 = 0x22,
 MAX17047_QRTbl20 = 0x32,
 MAX17047_V_empty = 0x3A,
 MAX17047_TIMER  = 0x3E,
 MAX17047_QRTbl30 = 0x42,
};

enum max170xx_chip_type {
 MAXIM_DEVICE_TYPE_UNKNOWN = 0,
 MAXIM_DEVICE_TYPE_MAX17042,
 MAXIM_DEVICE_TYPE_MAX17047,
 MAXIM_DEVICE_TYPE_MAX17050,
 MAXIM_DEVICE_TYPE_MAX17055,

 MAXIM_DEVICE_TYPE_NUM
};

/*
 * used for setting a register to a desired value
 * addr : address for a register
 * data : setting value for the register
 */

struct max17042_reg_data {
 u8 addr;
 u16 data;
};

struct max17042_config_data {
 /* External current sense resistor value in milli-ohms */
 u32 cur_sense_val;

 /* A/D measurement */
 u16 tgain;  /* 0x2C */
 u16 toff;  /* 0x2D */
 u16 cgain;  /* 0x2E */
 u16 coff;  /* 0x2F */

 /* Alert / Status */
 u16 valrt_thresh; /* 0x01 */
 u16 talrt_thresh; /* 0x02 */
 u16 soc_alrt_thresh; /* 0x03 */
 u16 config;  /* 0x01D */
 u16 shdntimer; /* 0x03F */

 /* App data */
 u16 full_soc_thresh; /* 0x13 */
 u16 design_cap; /* 0x18 */
 u16 ichgt_term; /* 0x1E */

 /* MG3 config */
 u16 at_rate; /* 0x04 */
 u16 learn_cfg; /* 0x28 */
 u16 filter_cfg; /* 0x29 */
 u16 relax_cfg; /* 0x2A */
 u16 misc_cfg; /* 0x2B */
 u16 masksoc; /* 0x32 */

 /* MG3 save and restore */
 u16 fullcap; /* 0x10 */
 u16 fullcapnom; /* 0x23 */
 u16 socempty; /* 0x33 */
 u16 iavg_empty; /* 0x36 */
 u16 dqacc;  /* 0x45 */
 u16 dpacc;  /* 0x46 */
 u16 qrtbl00; /* 0x12 */
 u16 qrtbl10; /* 0x22 */
 u16 qrtbl20; /* 0x32 */
 u16 qrtbl30; /* 0x42 */

 /* Cell technology from power_supply.h */
 u16 cell_technology;

 /* Cell Data */
 u16 vempty;  /* 0x12 */
 u16 temp_nom; /* 0x24 */
 u16 temp_lim; /* 0x25 */
 u16 fctc;  /* 0x37 */
 u16 rcomp0;  /* 0x38 */
 u16 tcompc0; /* 0x39 */
 u16 empty_tempco; /* 0x3A */
 u16 kempty0; /* 0x3B */
 u16 cell_char_tbl[MAX17042_CHARACTERIZATION_DATA_SIZE];
} __packed;

struct max17042_platform_data {
 struct max17042_reg_data *init_data;
 struct max17042_config_data *config_data;
 int num_init_data; /* Number of enties in init_data array */
 bool enable_current_sense;
 bool enable_por_init; /* Use POR init from Maxim appnote */

 /*
 * R_sns in micro-ohms.
 * default 10000 (if r_sns = 0) as it is the recommended value by
 * the datasheet although it can be changed by board designers.
 */

 unsigned int r_sns;
 int         vmin; /* in millivolts */
 int         vmax; /* in millivolts */
 int         temp_min; /* in tenths of degree Celsius */
 int         temp_max; /* in tenths of degree Celsius */
};

#endif /* __MAX17042_BATTERY_H_ */

Messung V0.5
C=94 H=97 G=95

¤ Dauer der Verarbeitung: 0.11 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge