Skip to content
Development
Skill

/battery-charger-fuel-gauge-integration

Use when integrating or debugging Li-ion charger/fuel gauge ICs (BQ24295, BQ27441, MAX17048) over I2C, covering charge start, watchdog host mode, NTC/JEITA faults, and SOC jumps

From plugin
aix-skills
3976 skills

Claude Code

$ npx -y skills add easyzoom/aix-skills --skill battery-charger-fuel-gauge-integration --agent claude-code

SKILL.md

battery-charger-fuel-gauge-integration.SKILL.md
name: battery-charger-fuel-gauge-integration
description: Use when integrating or debugging Li-ion charger/fuel gauge ICs (BQ24295, BQ27441, MAX17048) over I2C, covering charge start, watchdog host mode, NTC/JEITA faults, and SOC jumps

Battery Charger and Fuel Gauge Integration

Overview

Use this skill to bring up a Li-ion/LiPo charger IC (TI `BQ24xxx`/`BQ25xxx`) and a fuel gauge (TI `BQ27xxx` Impedance Track, or Maxim/Analog `MAX1704x` ModelGauge, e.g. `MAX17048`) over I2C. The hard parts are keeping the charger in host mode past its watchdog, and getting an accurate SOC before the gauge has a matching battery profile.

When To Use

Use this skill when:

  • Charging never starts or restarts in a loop: check input current limit (`IINLIM`, `REG00[2:0]`), `EN_HIZ`, the `CE` pin, and the I2C watchdog resetting registers to default.
  • The charger reports faults: `REG09` latched faults, `NTC_FAULT` (`REG09[2:0]`, with a real thermistor such as `103AT` on the `TS` pin), safety timer expiration, or JEITA temperature de-rating.
  • SOC from `BQ27441`/`MAX17048` is wrong or jumps at power-up: profile not loaded, no learning cycle, or bad OCV calibration.
  • I2C reads to the charger/gauge fail or the wrong 7-bit address is used.

Do not use this skill when the I2C bus itself is dead (no ACK on any address) or the board rails are wrong; debug the bus and power tree first with `hardware-interface-debug`.

First Questions

Ask for:

  • Exact charger and gauge part numbers, cell count/chemistry, pack capacity (mAh), and charge voltage (4.2 V vs 4.35 V — picks `BQ27441-G1A` vs `-G1B`).
  • 7-bit I2C addresses, bus speed, and pull-up values; whether `INT`/`GPOUT` is wired.
  • NTC/thermistor part and TS resistor network (`RT1`/`RT2`), plus target charge/discharge temperature window.
  • Whether a battery profile (TI golden image `.gm.fs`/`.df.fs`, or a Maxim `RCOMP`/custom-model INI) exists, or a golden image must be created.
  • Current symptom: register dump, fault code, measured `VBAT`/`ICHG`, or reported SOC vs true SOC.

Integration Checklist

1. Confirm the device on the bus. ACK the charger and gauge 7-bit addresses; read a known register (charger `REG0A` Vendor/Part/Revision, or gauge `Control()` `DEVICE_TYPE` subcommand) before writing anything.

1. Take and hold host mode on the charger. Set `IINLIM` in `REG00[2:0]`, clear `EN_HIZ` (`REG00[7]`), enable charging via `CE`/`CHG_CONFIG` (`REG01[4]`), then feed the I2C watchdog (write `REG01[6]`) on a timer, or disable it (`WATCHDOG` = `REG05[5:4]` = 00), so registers do not reset to default and drop charging.

1. Configure charge parameters and protection. Program fast-charge current (`ICHG`, `REG02`), pre-charge/termination current (`REG03`), charge voltage (`VREG`, `REG04`), and enable NTC/JEITA limits; confirm the thermistor scaling (e.g. `103AT`) on the `TS` pin.

1. Load the fuel gauge battery profile. For `BQ27441`: `UNSEAL` via `Control()`, enter `CFGUPDATE`, poll `Flags()` until bit 4 is set, write `Design Capacity`/`Design Energy`/`Terminate Voltage`/`Taper Rate` in the data-memory block, fix `BlockDataChecksum` (`255 - x`, where `x` is the byte-wise sum of the block), then `SOFT_RESET`. For `MAX17048`: load a custom model / set `RCOMP0` (`CONFIG` default `0x97`) or accept EZ defaults.

1. Calibrate SOC at first power-up. Let the pack rest for a valid OCV read, then issue `MAX17048` `QuickStart` (`MODE` = `0x4000`) or check `BQ27441` `Flags()` `ITPOR` cleared; do not `QuickStart` under load.

1. Run temperature compensation and status polling. Update `MAX17048` `RCOMP` from measured temperature at least once/minute; on `BQ27441` feed `Temperature()` if host-reported. Poll charger `CHRG_STAT` (`REG08[5:4]`) and read `REG09` twice to get fresh faults (it latches, clears on read).

Common Failures

  • Charging restarts every ~40 s: I2C watchdog expired (default 40 s), resetting the writable control registers to defaults; feed it or disable `WATCHDOG`.
  • No current with valid adapter: `IINLIM` too low, `EN_HIZ` set, `ILIM` pin resistor, or `CE` held high disabling charge.
  • Charge stuck in pre-charge or never terminating: `BATLOWV` threshold (`REG04[1]`), wrong termination current, or safety timer expiring (`REG09` charge safety timer fault).
  • `NTC_FAULT` / no charge in a comfortable room: TS resistor network wrong, floating `TS` pin, or JEITA cold/hot fold-back.
  • SOC reads 0/100 % or jumps tens of percent: profile (`Design Capacity`) not written, `BlockDataChecksum` wrong so writes silently rejected, or `ITPOR` still set.
  • Gauge writes ignored: device still `SEALED`, or not in `CFGUPDATE` mode before writing the data-memory block.
  • I2C NAK: wrong 7-bit vs 8-bit address, missing pull-ups, or gauge in hibernate/shutdown.

Verification

Before claiming charging and gauging work:

  • Dump charger `REG00`–`REG0A`; confirm `IINLIM`, `VREG`, `ICHG`, watchdog state, and `CHRG_STAT` transitions Not Charging → Fast Charging → Termination Done.
  • Force a fault (unplug NTC or overheat pack) and confirm `REG09`/`INT` reports it and clears on re-read.
  • Compare gauge SOC against a coulomb-counted or bench-measured charge/discharge; verify it tracks within a few percent and survives a reset (`ITPOR` clear, profile persists).
  • Confirm charging continues across a full watchdog interval without host register rewrites (or with the feeding task running).

Example

User:

BQ24295 一充电就每隔几十秒重启,SOC 还老是乱跳,怎么查?

Agent:

1. Asks for I2C address, adapter/`IINLIM` setting, whether the watchdog is fed, NTC network, and whether a `BQ27441` profile was loaded. 1. Reads `REG00`/`REG08`/`REG09`; if registers reverted to defaults, enables watchdog feeding (write `REG01[6]`) or disables `WATCHDOG` to hold host mode. 1. Checks the gauge: `UNSEAL`, verifies `Design Capacity` and `BlockDataChecksum`, clears `ITPOR`, then `QuickStart`/rest-OCV calibrates SOC and re-tests across a charge cycle.

Read more
@easyzoom
Ships withaix-skills

AIX Skills is a public collection of Agent Skills, templates, and references for building repeatable AI workflows.

Stars on GitHub

Momentum

stars in total
39
Star history of easyzoom/aix-skills on GitHub, a chart by star-history.com

Other skills on aix-skills.

8051-mcu-debug

8051-mcu-debug

Use when debugging 8051-compatible microcontrollers, 51 MCU firmware, STC download issues, Keil C51 projects, interrupts, timers,…

@easyzoom@easyzoomInstall Skill
avem-integration

avem-integration

Use when integrating, evaluating, configuring, or debugging Avem embedded C framework modules, event-driven components, drivers,…

@easyzoom@easyzoomInstall Skill
ble-gatt-integration

ble-gatt-integration

Use when integrating, designing, or debugging BLE GATT services, characteristics, descriptors, MTU, notifications, indications,…

@easyzoom@easyzoomInstall Skill
bootloader-debug

bootloader-debug

Use when debugging embedded bootloaders, application jumps, vector table offsets, firmware upgrade flow, OTA state, image…

@easyzoom@easyzoomInstall Skill
canbus-integration

canbus-integration

Use when integrating, porting, configuring, or debugging CAN bus libraries, CANBus-Triple, MCP2515, CAN frames, bit timing,…

@easyzoom@easyzoomInstall Skill
canopen-integration

canopen-integration

Use when integrating, configuring, or debugging CANopen nodes, object dictionaries, NMT, SDO, PDO, heartbeat, SYNC, EMCY, EDS/DCF…

@easyzoom@easyzoomInstall Skill

More skills from other plugins.

brainstorming
Auto-invoked

brainstorming

You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…

@obra@obraInstall Skill
ask-matt

ask-matt

Ask which skill or flow fits your situation. A router over the skills in this repo.

skills2w309k
@mattpocock@mattpocockInstall Skill
accessibility
Auto-invoked

accessibility

Design, implement, and audit accessible UI to WCAG 2.2 Level AA across Web, iOS, and Android — semantic ARIA roles and labels,…

ecc2w293k
@affaan-m@affaan-mInstall Skill
compiler-commit

compiler-commit

Use when you want to verify compiler changes and commit with the correct convention. Runs tests, lint, and format, then commits…

react5d252k
@facebook@facebookInstall Skill

Questions about battery-charger-fuel-gauge-integration.

Which coding agents can use battery-charger-fuel-gauge-integration?
battery-charger-fuel-gauge-integration installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.