* Makefile: start openocd from gdb, boot no boot version. * bq25896: reset before readout. Cleanup.
		
			
				
	
	
		
			292 lines
		
	
	
		
			8.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			292 lines
		
	
	
		
			8.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
#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;
 |