| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273 |
- #pragma once
- #include <stdbool.h>
- #include <stdint.h>
- #if BITS_BIG_ENDIAN == 1
- #error Bit structures defined in this file is not portable to BE
- #endif
- #define BQ25896_ADDRESS 0xD6
- #define BQ25896_I2C_TIMEOUT 50
- #define IILIM_1600 (1 << 5)
- #define IILIM_800 (1 << 4)
- #define IILIM_400 (1 << 3)
- #define IILIM_200 (1 << 2)
- #define IILIM_100 (1 << 1)
- #define IILIM_50 (1 << 0)
- typedef struct {
- uint8_t IINLIM : 6; // Input Current Limit, mA, offset: +100mA
- bool EN_ILIM : 1; // Enable ILIM Pin
- bool EN_HIZ : 1; // Enable HIZ Mode
- } REG00;
- #define VINDPM_OS_1600 (1 << 4)
- #define VINDPM_OS_800 (1 << 3)
- #define VINDPM_OS_400 (1 << 2)
- #define VINDPM_OS_200 (1 << 1)
- #define VINDPM_OS_100 (1 << 0)
- typedef enum {
- Bhot34 = 0b00, // – VBHOT1 Threshold (34.75%) (default)
- Bhot37 = 0b01, // – VBHOT0 Threshold (Typ. 37.75%)
- Bhot31 = 0b10, // – VBHOT2 Threshold (Typ. 31.25%)
- BhotDisable = 0b11, // – Disable boost mode thermal protection
- } Bhot;
- typedef struct {
- uint8_t VINDPM_OS : 5; // Input Voltage Limit Offset, mV
- bool BCOLD : 1; // Boost Mode Cold Temperature Monitor Threshold
- Bhot BHOT : 2; // Boost Mode Hot Temperature Monitor Threshold
- } REG01;
- typedef struct {
- bool AUTO_DPDM_EN : 1; // Automatic Input Detection Enable
- bool FORCE_DPDM : 1; // Force Input Detection
- uint8_t RES : 2; // Reserved
- bool ICO_EN : 1; // Input Current Optimizer (ICO) Enable
- bool BOOST_FREQ : 1; // Boost Mode Frequency Selection
- bool CONV_RATE : 1; // ADC Conversion Rate Selection
- bool CONV_START : 1; // ADC Conversion Start Control
- } REG02;
- #define SYS_MIN_400 (1 << 2)
- #define SYS_MIN_200 (1 << 1)
- #define SYS_MIN_100 (1 << 0)
- typedef struct {
- bool MIN_VBAT_SEL : 1; // Minimum Battery Voltage (falling) to exit boost mode
- uint8_t SYS_MIN : 3; // Minimum System Voltage Limit, mV, offset: +3000mV
- bool CHG_CONFIG : 1; // Charge Enable Configuration
- bool OTG_CONFIG : 1; // Boost (OTG) Mode Configuration
- bool WD_RST : 1; // I2C Watchdog Timer Reset
- bool BAT_LOADEN : 1; // Battery Load (IBATLOAD) Enable
- } REG03;
- #define ICHG_4096 (1 << 6)
- #define ICHG_2048 (1 << 5)
- #define ICHG_1024 (1 << 4)
- #define ICHG_512 (1 << 3)
- #define ICHG_256 (1 << 2)
- #define ICHG_128 (1 << 1)
- #define ICHG_64 (1 << 0)
- typedef struct {
- uint8_t ICHG : 7; // Fast Charge Current Limit, mA
- bool EN_PUMPX : 1; // Current pulse control Enable
- } REG04;
- #define IPRETERM_512 (1 << 3)
- #define IPRETERM_256 (1 << 2)
- #define IPRETERM_128 (1 << 1)
- #define IPRETERM_64 (1 << 0)
- typedef struct {
- uint8_t ITERM : 4; // Termination Current Limit, offset: +64mA
- uint8_t IPRECHG : 4; // Precharge Current Limit, offset: +64mA
- } REG05;
- #define VREG_512 (1 << 5)
- #define VREG_256 (1 << 4)
- #define VREG_128 (1 << 3)
- #define VREG_64 (1 << 2)
- #define VREG_32 (1 << 1)
- #define VREG_16 (1 << 0)
- typedef struct {
- bool VRECHG : 1; // Battery Recharge Threshold Offset
- bool BATLOWV : 1; // Battery Precharge to Fast Charge Threshold
- uint8_t VREG : 6; // Charge Voltage Limit, offset: +3840mV
- } REG06;
- typedef enum {
- WatchdogDisable = 0b00,
- Watchdog40 = 0b01,
- Watchdog80 = 0b10,
- Watchdog160 = 0b11,
- } Watchdog;
- typedef enum {
- ChgTimer5 = 0b00,
- ChgTimer8 = 0b01,
- ChgTimer12 = 0b10,
- ChgTimer20 = 0b11,
- } ChgTimer;
- typedef struct {
- bool JEITA_ISET : 1; // JEITA Low Temperature Current Setting
- ChgTimer CHG_TIMER : 2; // Fast Charge Timer Setting
- bool EN_TIMER : 1; // Charging Safety Timer Enable
- Watchdog WATCHDOG : 2; // I2C Watchdog Timer Setting
- bool STAT_DIS : 1; // STAT Pin Disable
- bool EN_TERM : 1; // Charging Termination Enable
- } REG07;
- #define BAT_COMP_80 (1 << 2)
- #define BAT_COMP_40 (1 << 1)
- #define BAT_COMP_20 (1 << 0)
- #define VCLAMP_128 (1 << 2)
- #define VCLAMP_64 (1 << 1)
- #define VCLAMP_32 (1 << 0)
- #define TREG_60 (0b00)
- #define TREG_80 (0b01)
- #define TREG_100 (0b10)
- #define TREG_120 (0b11)
- typedef struct {
- uint8_t TREG : 2; // Thermal Regulation Threshold
- uint8_t VCLAMP : 3; // IR Compensation Voltage Clamp
- uint8_t BAT_COMP : 3; // IR Compensation Resistor Setting
- } REG08;
- typedef struct {
- bool PUMPX_DN : 1; // Current pulse control voltage down enable
- bool PUMPX_UP : 1; // Current pulse control voltage up enable
- bool BATFET_RST_EN : 1; // BATFET full system reset enable
- bool BATFET_DLY : 1; // BATFET turn off delay control
- bool JEITA_VSET : 1; // JEITA High Temperature Voltage Setting
- bool BATFET_DIS : 1; // Force BATFET off to enable ship mode
- bool TMR2X_EN : 1; // Safety Timer Setting during DPM or Thermal Regulation
- bool FORCE_ICO : 1; // Force Start Input Current Optimizer
- } REG09;
- #define BOOSTV_512 (1 << 3)
- #define BOOSTV_256 (1 << 2)
- #define BOOSTV_128 (1 << 1)
- #define BOOSTV_64 (1 << 0)
- #define BOOST_LIM_500 (0b000)
- #define BOOST_LIM_750 (0b001)
- #define BOOST_LIM_1200 (0b010)
- #define BOOST_LIM_1400 (0b011)
- #define BOOST_LIM_1650 (0b100)
- #define BOOST_LIM_1875 (0b101)
- #define BOOST_LIM_2150 (0b110)
- #define BOOST_LIM_RSVD (0b111)
- typedef struct {
- uint8_t BOOST_LIM : 3; // Boost Mode Current Limit
- bool PFM_OTG_DIS : 1; // PFM mode allowed in boost mode
- uint8_t BOOSTV : 4; // Boost Mode Voltage Regulation, offset: +4550mV
- } REG0A;
- typedef enum {
- VBusStatNo = 0b000,
- VBusStatUSB = 0b001,
- VBusStatExternal = 0b010,
- VBusStatOTG = 0b111,
- } VBusStat;
- typedef enum {
- ChrgStatNo = 0b00,
- ChrgStatPre = 0b01,
- ChrgStatFast = 0b10,
- ChrgStatDone = 0b11,
- } ChrgStat;
- typedef struct {
- bool VSYS_STAT : 1; // VSYS Regulation Status
- bool RES : 1; // Reserved: Always reads 1
- bool PG_STAT : 1; // Power Good Status
- ChrgStat CHRG_STAT : 2; // Charging Status
- VBusStat VBUS_STAT : 3; // VBUS Status register
- } REG0B;
- typedef enum {
- ChrgFaultNO = 0b00,
- ChrgFaultIN = 0b01,
- ChrgFaultTH = 0b10,
- ChrgFaultTIM = 0b11,
- } ChrgFault;
- typedef enum {
- NtcFaultNo = 0b000,
- NtcFaultWarm = 0b010,
- NtcFaultCool = 0b011,
- NtcFaultCold = 0b101,
- NtcFaultHot = 0b110,
- } NtcFault;
- typedef struct {
- NtcFault NTC_FAULT : 3; // NTC Fault Status
- bool BAT_FAULT : 1; // Battery Fault Status
- ChrgFault CHRG_FAULT : 2; // Charge Fault Status
- bool BOOST_FAULT : 1; // Boost Mode Fault Status
- bool WATCHDOG_FAULT : 1; // Watchdog Fault Status
- } REG0C;
- #define VINDPM_6400 (1 << 6)
- #define VINDPM_3200 (1 << 5)
- #define VINDPM_1600 (1 << 4)
- #define VINDPM_800 (1 << 3)
- #define VINDPM_400 (1 << 2)
- #define VINDPM_200 (1 << 1)
- #define VINDPM_100 (1 << 0)
- typedef struct {
- uint8_t VINDPM : 7; // Absolute VINDPM Threshold, offset: +2600mV
- bool FORCE_VINDPM : 1; // VINDPM Threshold Setting Method
- } REG0D;
- typedef struct {
- uint8_t BATV : 7; // ADC conversion of Battery Voltage (VBAT), offset: +2304mV
- bool THERM_STAT : 1; // Thermal Regulation Status
- } REG0E;
- typedef struct {
- uint8_t SYSV : 7; // ADDC conversion of System Voltage (VSYS), offset: +2304mV
- uint8_t RES : 1; // Reserved: Always reads 0
- } REG0F;
- typedef struct {
- uint8_t TSPCT : 7; // ADC conversion of TS Voltage (TS) as percentage of REGN, offset: +21%
- uint8_t RES : 1; // Reserved: Always reads 0
- } REG10;
- typedef struct {
- uint8_t VBUSV : 7; // ADC conversion of VBUS voltage (VBUS), offset: +2600mV
- bool VBUS_GD : 1; // VBUS Good Status
- } REG11;
- typedef struct {
- uint8_t ICHGR : 7; // ADC conversion of Charge Current (IBAT) when VBAT > VBATSHORT
- uint8_t RES : 1; // Reserved: Always reads 0
- } REG12;
- typedef struct {
- uint8_t
- IDPM_LIM : 6; // Input Current Limit in effect while Input Current Optimizer (ICO) is enabled, offset: 100mA (default)
- bool IDPM_STAT : 1; // IINDPM Status
- bool VDPM_STAT : 1; // VINDPM Status
- } REG13;
- typedef struct {
- uint8_t DEV_REV : 2; // Device Revision
- bool TS_PROFILE : 1; // Temperature Profile
- uint8_t PN : 3; // Device Configuration
- bool ICO_OPTIMIZED : 1; // Input Current Optimizer (ICO) Status
- bool REG_RST : 1; // Register Reset
- } REG14;
|