flipperzero-firmware/lib/drivers/bq25896_reg.h
あく 228055e4eb
OpenOCD makefile integration and Charger IC initialization fixes. (#258)
* Makefile: start openocd from gdb, boot no boot version.
* bq25896: reset before readout. Cleanup.
2020-12-04 20:30:50 +03:00

292 lines
8.6 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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 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;