kodediy/kode_bq25896

1.0.0

uploaded 1 day ago
BQ25896 - Power Management Integrated Circuit (PMIC)

readme

# BQ25896 PMIC

[![Component Registry](https://components.espressif.com/components/kodediy/kode_bq25896/badge.svg)](https://components.espressif.com/components/kodediy/kode_bq25896)

The BQ25896 is a high-efficiency single-cell Li-Ion/Li-Polymer battery charger and system power path management IC (PMIC) from Texas Instruments. This ESP-IDF component provides a complete API for configuring and controlling the BQ25896 via I2C.

| PMIC | Communication interface | Component name | Link to datasheet |
| :------------: | :---------------------: | :------------: | :---------------: |
| BQ25896         | I2C                     | kode_bq25896      | [PDF](https://github.com/kodediy/kode_bq25896/blob/main/BQ25896_Datasheet_RevC.pdf) |

## Add to project

Packages from this repository are uploaded to [Espressif's component service](https://components.espressif.com/).
You can add them to your project via `idf.py add-dependancy`, e.g.
```
    idf.py add-dependency kode_bq25896==1.0.0
```

Alternatively, you can create `idf_component.yml`. More is in [Espressif's documentation](https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-guides/tools/idf-component-manager.html).

## Example use

```c
ESP_LOGI(TAG, "Starting BQ25896 PMIC initialization");
// Initialize I2C bus
i2c_master_bus_handle_t i2c_bus = NULL;
i2c_master_bus_config_t i2c_bus_config = {
    .clk_source = I2C_CLK_SRC_DEFAULT,
    .i2c_port = I2C_NUM_0,
    .scl_io_num = I2C_MASTER_SCL_IO,
    .sda_io_num = I2C_MASTER_SDA_IO,
    .glitch_ignore_cnt = 7,
    .flags.enable_internal_pullup = true,
};

esp_err_t ret = i2c_new_master_bus(&i2c_bus_config, &i2c_bus);
if (ret != ESP_OK) {
    ESP_LOGE(TAG, "Failed to initialize I2C bus: %s", esp_err_to_name(ret));
    return;
}
ESP_LOGI(TAG, "I2C bus initialized successfully");
// Initialize BQ25896 PMIC with default configuration
bq25896_handle_t bq_handle = NULL;
ret = bq25896_init(i2c_bus, &bq_handle);
if (ret != ESP_OK) {
    ESP_LOGE(TAG, "Failed to initialize BQ25896: %s", esp_err_to_name(ret));
    i2c_del_master_bus(i2c_bus);
    return;
}
ESP_LOGI(TAG, "BQ25896 initialized successfully with default configuration");
```

## Register Reference

The BQ25896 contains the following registers:

### REG00 - Input Source Control
- **EN_HIZ** (Bit 7): Enable HIZ Mode `R/W`
  - 0: Disable (Default)
  - 1: Enable
- **EN_ILIM** (Bit 6): Enable ILIM Pin `R/W`
  - 0: Disable
  - 1: Enable (Default)
- **IINLIM** (Bits 5-0): Input Current Limit `R/W`
  - Range: 100mA (000000) – 3.25A (111111)
  - Step size: 50mA
  - Default: 500mA (001000)

### REG01 - Power-On Configuration
- **BHOT** (Bits 7-6): Boost Mode Hot Temperature Monitor Threshold `R/W`
  - 00: Vbhot1 Threshold (34.75%) (Default)
  - 01: Vbhot0 Threshold (37.75%)
  - 10: Vbhot2 Threshold (31.25%)
  - 11: Disable boost mode thermal protection
- **BCOLD** (Bit 5): Boost Mode Cold Temperature Monitor Threshold `R/W`
  - 0: Vbcol0 Threshold (77%) (Default)
  - 1: Vbcol1 Threshold (80%)
- **VINDPM_OS** (Bits 4-0): Input Voltage Limit Offset `R/W`
  - Range: 0mV (00000) to 3100mV (11111)
  - Step size: 100mV
  - Default: 600mV (00110)

### REG02 - Charge Current Control
- **CONV_START** (Bit 7): ADC Conversion Start Control `R/W`
  - 0: ADC conversion not active (Default)
  - 1: Start ADC conversion
  - Note: Read-only when CONV_RATE = 1
- **CONV_RATE** (Bit 6): ADC Conversion Rate Selection `R/W`
  - 0: One shot ADC conversion (Default)
  - 1: Start 1s Continuous Conversion
- **BOOST_FREQ** (Bit 5): Boost Mode Frequency Selection `R/W`
  - 0: 1.5MHz (Default)
  - 1: 500kHz
  - Note: Write ignored when OTG_CONFIG is enabled
- **ICO_EN** (Bit 4): Input Current Optimizer Enable `R/W`
  - 0: Disable ICO Algorithm
  - 1: Enable ICO Algorithm (Default)
- **FORCE_DPDM** (Bit 1): Force Input Detection `R/W`
  - 0: Not in PSEL detection (Default)
  - 1: Force PSEL detection
- **AUTO_DPDM_EN** (Bit 0): Automatic Input Detection Enable `R/W`
  - 0: Disable PSEL detection when VBUS is plugged-in
  - 1: Enable PSEL detection when VBUS is plugged-in (Default)

### REG03 - Charge Control
- **BAT_LOADEN** (Bit 7): Battery Load Enable `R/W`
  - 0: Disable (Default)
  - 1: Enable
- **WD_RST** (Bit 6): I2C Watchdog Timer Reset `R/W`
  - 0: Normal (Default)
  - 1: Reset (Back to 0 after timer reset)
- **OTG_CONFIG** (Bit 5): Boost (OTG) Mode Configuration `R/W`
  - 0: OTG Disable (Default)
  - 1: OTG Enable
- **CHG_CONFIG** (Bit 4): Charge Enable Configuration `R/W`
  - 0: Charge Disable
  - 1: Charge Enable (Default)
- **SYS_MIN** (Bits 3-1): Minimum System Voltage Limit `R/W`
  - Range: 3.0V (000) to 3.7V (111)
  - Step size: 0.1V
  - Default: 3.5V (101)
- **MIN_VBAT_SEL** (Bit 0): Minimum Battery Voltage to exit boost mode `R/W`
  - 0: 2.9V (Default)
  - 1: 2.5V

### REG04 - Fast Charge Current Control
- **EN_PUMPX** (Bit 7): Current pulse control Enable `R/W`
  - 0: Disable (Default)
  - 1: Enable
- **ICHG** (Bits 6-0): Fast Charge Current Limit `R/W`
  - Range: 0mA (0000000) to 3008mA (0101111)
  - Step size: 64mA
  - Default: 2048mA (0100000)

### REG05 - Pre-Charge/Termination Current Control
- **IPRECHG** (Bits 7-4): Precharge Current Limit `R/W`
  - Range: 64mA (0000) to 1024mA (1111)
  - Step size: 64mA
  - Default: 128mA (0001)
- **ITERM** (Bits 3-0): Termination Current Limit `R/W`
  - Range: 64mA (0000) to 1024mA (1111)
  - Step size: 64mA
  - Default: 256mA (0011)

### REG06 - Charge Voltage Control
- **VREG** (Bits 7-2): Charge Voltage Limit `R/W`
  - Offset: 3.840V
  - Range: 3.840V (000000) - 4.608V (110000)
  - Step size: 16mV
  - Default: 4.208V (010111)
- **BATLOWV** (Bit 1): Battery Precharge to Fast Charge Threshold `R/W`
  - 0: 2.8V
  - 1: 3.0V (default)
- **VRECHG** (Bit 0): Battery Recharge Threshold Offset `R/W`
  - 0: 100mV below VREG (default)
  - 1: 200mV below VREG

### REG07 - Charge Termination/Timer Control
- **EN_TERM** (Bit 7): Charging Termination Enable `R/W`
  - 0: Disable
  - 1: Enable (Default)
- **STAT_DIS** (Bit 6): STAT Pin Disable `R/W`
  - 0: Enable STAT pin function (Default)
  - 1: Disable
- **WATCHDOG** (Bits 5-4): I2C Watchdog Timer Setting `R/W`
  - 00: Disable watchdog timer
  - 01: 40s (Default)
  - 10: 80s
  - 11: 160s
- **EN_TIMER** (Bit 3): Charging Safety Timer Enable `R/W`
  - 0: Disable
  - 1: Enable (Default)
- **CHG_TIMER** (Bits 2-1): Fast Charge Timer Setting `R/W`
  - 00: 5 hrs
  - 01: 8 hrs
  - 10: 12 hrs (Default)
  - 11: 20 hrs
- **JEITA_ISET** (Bit 0): JEITA Low Temperature Current Setting `R/W`
  - 0: 50% of ICHG
  - 1: 20% of ICHG (Default)

### REG08 - IR Compensation/Thermal Regulation Control
- **BAT_COMP** (Bits 7-5): IR Compensation Resistor Setting `R/W`
  - Range: 0 - 140mΩ
  - Default: 0Ω (000)
- **VCLAMP** (Bits 4-2): IR Compensation Voltage Clamp `R/W`
  - Range: 0 - 224mV
  - Default: 0mV (000)
- **TREG** (Bits 1-0): Thermal Regulation Threshold `R/W`
  - 00: 60°C
  - 01: 80°C
  - 10: 100°C
  - 11: 120°C (default)

### REG09 - Misc Operation Control
- **FORCE_ICO** (Bit 7): Force Start Input Current Optimizer `R/W`
  - 0: Do not force ICO (Default)
  - 1: Force ICO
  - Note: Returns to 0 after ICO starts
- **TMR2X_EN** (Bit 6): Safety Timer Setting during DPM/Thermal Regulation `R/W`
  - 0: Safety timer not slowed by 2X
  - 1: Safety timer slowed by 2X (Default)
- **BATFET_DIS** (Bit 5): Force BATFET off `R/W`
  - 0: Allow BATFET turn on (Default)
  - 1: Force BATFET off
- **JEITA_VSET** (Bit 4): JEITA High Temperature Voltage Setting `R/W`
  - 0: VREG-200mV (Default)
  - 1: VREG
- **BATFET_DLY** (Bit 3): BATFET turn off delay control `R/W`
  - 0: Turn off immediately (Default)
  - 1: Turn off with delay
- **BATFET_RST_EN** (Bit 2): BATFET full system reset enable `R/W`
  - 0: Disable
  - 1: Enable (Default)
- **PUMPX_UP** (Bit 1): Current pulse control voltage up enable `R/W`
  - 0: Disable (Default)
  - 1: Enable
  - Note: Returns to 0 after pulse control sequence completes
- **PUMPX_DN** (Bit 0): Current pulse control voltage down enable `R/W`
  - 0: Disable (Default)
  - 1: Enable
  - Note: Returns to 0 after pulse control sequence completes

### REG0A - Boost Mode Control
- **BOOSTV** (Bits 7-4): Boost Mode Voltage Regulation `R/W`
  - Offset: 4.55V
  - Range: 4.55V - 5.51V
  - Default: 4.988V (0111)
- **PFM_OTG_DIS** (Bit 3): PFM mode allowed in boost mode `R/W`
  - 0: Allow PFM (default)
  - 1: Disable PFM
- **BOOST_LIM** (Bits 2-0): Boost Mode Current Limit `R/W`
  - 000: 0.5A
  - 001: 0.75A
  - 010: 1.2A
  - 011: 1.4A (default)
  - 100: 1.65A
  - 101: 1.875A
  - 110: 2.15A
  - 111: Reserved

### REG0B - Status Register
- **VBUS_STAT** (Bits 7-5): VBUS Status register `R`
  - 000: No Input
  - 001: USB Host SDP
  - 010: Adapter (3.25A)
  - 111: OTG
- **CHRG_STAT** (Bits 4-3): Charging Status `R`
  - 00: Not Charging
  - 01: Pre-charge (< VBATLOWV)
  - 10: Fast Charging
  - 11: Charge Termination Done
- **PG_STAT** (Bit 2): Power Good Status `R`
  - 0: Not Power Good
  - 1: Power Good
- **VSYS_STAT** (Bit 0): VSYS Regulation Status `R`
  - 0: Not in VSYSMIN regulation (BAT > VSYSMIN)
  - 1: In VSYSMIN regulation (BAT < VSYSMIN)

### REG0C - Fault Register
- **WATCHDOG_FAULT** (Bit 7): Watchdog Fault Status `R`
  - 0: Normal
  - 1: Watchdog timer expiration
- **BOOST_FAULT** (Bit 6): Boost Mode Fault Status `R`
  - 0: Normal
  - 1: VBUS overloaded in OTG, or VBUS OVP, or battery is too low in boost mode
- **CHRG_FAULT** (Bits 5-4): Charge Fault Status `R`
  - 00: Normal
  - 01: Input fault (VBUS > VACOV or VBAT < VBUS < VVBUSMIN)
  - 10: Thermal shutdown
  - 11: Charge Safety Timer Expiration
- **BAT_FAULT** (Bit 3): Battery Fault Status `R`
  - 0: Normal
  - 1: BATOVP (VBAT > VBATOVP)
- **NTC_FAULT** (Bits 2-0): NTC Fault Status `R`
  - Buck Mode:
    - 000: Normal
    - 010: TS Warm
    - 011: TS Cool
    - 101: TS Cold
    - 110: TS Hot
  - Boost Mode:
    - 000: Normal
    - 101: TS Cold
    - 110: TS Hot

### REG0D - VINDPM Register
- **FORCE_VINDPM** (Bit 7): VINDPM Threshold Setting Method `R/W`
  - 0: Relative VINDPM Threshold (default)
  - 1: Absolute VINDPM Threshold
- **VINDPM** (Bits 6-0): Absolute VINDPM Threshold `R/W`
  - Offset: 2.6V
  - Range: 3.9V (0001101) - 15.3V (1111111)
  - Default: 4.4V (0010010)
  - Note: Read-only when FORCE_VINDPM=0

### REG0E - Battery Voltage Register
- **THERM_STAT** (Bit 7): Thermal Regulation Status `R`
  - 0: Normal
  - 1: In Thermal Regulation
- **BATV** (Bits 6-0): Battery Voltage Reading `R`
  - Offset: 2.304V
  - Range: 2.304V - 4.848V
  - Step size: 20mV

### REG0F - System Voltage Register
- **SYSV** (Bits 6-0): System Voltage Reading `R`
  - Offset: 2.304V
  - Range: 2.304V - 4.848V
  - Step size: 20mV

### REG10 - TS Voltage Register
- **TSPCT** (Bits 6-0): TS Voltage as percentage of REGN `R`
  - Offset: 21%
  - Range: 21% - 80%

### REG11 - VBUS Voltage Register
- **VBUS_GD** (Bit 7): VBUS Good Status `R`
  - 0: Not VBUS attached
  - 1: VBUS Attached
- **VBUSV** (Bits 6-0): VBUS Voltage Reading `R`
  - Offset: 2.6V
  - Range: 2.6V - 15.3V
  - Step size: 100mV

### REG12 - Charge Current Register
- **ICHGR** (Bits 6-0): Charge Current Reading `R`
  - Range: 0mA - 6350mA
  - Step size: 50mA
  - Note: Returns 0 for VBAT < VBATSHORT

### REG13 - VDPM/IDPM Status Register
- **VDPM_STAT** (Bit 7): VINDPM Status `R`
  - 0: Not in VINDPM
  - 1: VINDPM
- **IDPM_STAT** (Bit 6): IINDPM Status `R`
  - 0: Not in IINDPM
  - 1: IINDPM
- **IDPM_LIM** (Bits 5-0): Input Current Limit while ICO enabled `R`
  - Offset: 100mA
  - Range: 100mA - 3.25A
  - Step size: 50mA

### REG14 - Device Information Register
- **REG_RST** (Bit 7): Register Reset `R/W`
  - 0: Keep current register setting (default)
  - 1: Reset to default register value and reset safety timer
  - Note: Reset to 0 after register reset is completed
- **ICO_OPTIMIZED** (Bit 6): Input Current Optimizer Status `R`
  - 0: Optimization is in progress
  - 1: Maximum Input Current Detected
- **PN** (Bits 5-3): Device Configuration `R`
  - 000: bq25896
- **TS_PROFILE** (Bit 2): Temperature Profile `R`
  - 1: JEITA (default)
- **DEV_REV** (Bits 1-0): Device Revision `R`
  - 10: Device Revision

Links

Supports all targets

License: Apache-2.0

To add this component to your project, run:

idf.py add-dependency "kodediy/kode_bq25896^1.0.0"

or download archive

Stats

  • Archive size
    Archive size ~ 1.43 MB
  • Downloaded in total
    Downloaded in total 0 times
  • Downloaded this version
    This version: 0 times

Badge

kodediy/kode_bq25896 version: 1.0.0
|