From f45c1521a4d6ad5b4ed431a29dab658bd53f39de Mon Sep 17 00:00:00 2001 From: Limor Fried Date: Mon, 4 Aug 2025 11:03:42 -0400 Subject: [PATCH] Initial Arduino library for BQ25628E I2C Battery Charger MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add basic library structure with constructor, destructor, and begin() - Include chip ID verification (0x22) in begin() function - Add register address definitions for all BQ25628E registers - Include test example sketch with basic functionality verification - Add GitHub CI workflow and clang-format configuration - Set up project structure following Adafruit library conventions 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- .clang-format | 13 ++++ .github/workflows/githubci.yml | 32 +++++++++ .gitignore | 48 ++++++++++++++ Adafruit_BQ25628E.cpp | 75 +++++++++++++++++++++ Adafruit_BQ25628E.h | 83 ++++++++++++++++++++++++ README.md | 34 ++++++++++ examples/test_BQ25628E/test_BQ25628E.ino | 31 +++++++++ 7 files changed, 316 insertions(+) create mode 100644 .clang-format create mode 100644 .github/workflows/githubci.yml create mode 100644 .gitignore create mode 100644 Adafruit_BQ25628E.cpp create mode 100644 Adafruit_BQ25628E.h create mode 100644 README.md create mode 100644 examples/test_BQ25628E/test_BQ25628E.ino diff --git a/.clang-format b/.clang-format new file mode 100644 index 0000000..ed70f56 --- /dev/null +++ b/.clang-format @@ -0,0 +1,13 @@ +Language: Cpp +BasedOnStyle: Google +IndentWidth: 2 +ColumnLimit: 80 +AllowShortFunctionsOnASingleLine: Empty +AllowShortIfStatementsOnASingleLine: false +AllowShortLoopsOnASingleLine: false +BinPackArguments: true +BinPackParameters: true +BreakBeforeBraces: Attach +DerivePointerAlignment: false +PointerAlignment: Left +SpacesBeforeTrailingComments: 1 \ No newline at end of file diff --git a/.github/workflows/githubci.yml b/.github/workflows/githubci.yml new file mode 100644 index 0000000..8695ec1 --- /dev/null +++ b/.github/workflows/githubci.yml @@ -0,0 +1,32 @@ +name: Arduino Library CI + +on: [pull_request, push, repository_dispatch] + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - uses: actions/setup-python@v1 + with: + python-version: '3.x' + - uses: actions/checkout@v2 + - uses: actions/checkout@v2 + with: + repository: adafruit/ci-arduino + path: ci + + - name: pre-install + run: bash ci/actions_install.sh + + - name: clang + run: python3 ci/run-clang-format.py -e "ci/*" -e "bin/*" -r . + + - name: test platforms + run: python3 ci/build_platform.py main_platforms + + - name: doxygen + env: + GH_REPO_TOKEN: ${{ secrets.GH_REPO_TOKEN }} + PRETTYNAME : "Adafruit BQ25628E Arduino Library" + run: bash ci/doxy_gen_and_deploy.sh \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..deedb7b --- /dev/null +++ b/.gitignore @@ -0,0 +1,48 @@ +# Datasheet files +*.pdf +*.txt + +# Compiled Object files +*.slo +*.lo +*.o +*.obj + +# Precompiled Headers +*.gch +*.pch + +# Compiled Dynamic libraries +*.so +*.dylib +*.dll + +# Fortran module files +*.mod +*.smod + +# Compiled Static libraries +*.lai +*.la +*.a +*.lib + +# Executables +*.exe +*.out +*.app + +# IDE files +.vscode/ +*.swp +*.swo +*~ + +# OS generated files +.DS_Store +.DS_Store? +._* +.Spotlight-V100 +.Trashes +ehthumbs.db +Thumbs.db \ No newline at end of file diff --git a/Adafruit_BQ25628E.cpp b/Adafruit_BQ25628E.cpp new file mode 100644 index 0000000..dd55845 --- /dev/null +++ b/Adafruit_BQ25628E.cpp @@ -0,0 +1,75 @@ +/*! + * @file Adafruit_BQ25628E.cpp + * + * @mainpage Adafruit BQ25628E I2C Battery Charger + * + * @section intro_sec Introduction + * + * This is a library for the BQ25628E I2C Battery Charger + * + * Designed specifically to work with the Adafruit BQ25628E Breakout + * ----> http://www.adafruit.com/products/ + * + * Pick one up today in the adafruit shop! + * + * These chips use I2C to communicate, 2 pins are required to interface. + * + * Adafruit invests time and resources providing this open source code, + * please support Adafruit and open-source hardware by purchasing products + * from Adafruit! + * + * @section author Author + * + * Limor 'ladyada' Fried with assistance from Claude Code + * + * @section license License + * + * MIT (see license.txt) + */ + +#include "Adafruit_BQ25628E.h" + +/*! + * @brief Instantiates a new BQ25628E class + */ +Adafruit_BQ25628E::Adafruit_BQ25628E() {} + +/*! + * @brief Cleans up the BQ25628E + */ +Adafruit_BQ25628E::~Adafruit_BQ25628E() { + if (i2c_dev) { + delete i2c_dev; + } +} + +/*! + * @brief Sets up the hardware and initializes I2C + * @param i2c_addr + * The I2C address to be used. + * @param wire + * The Wire object to be used for I2C connections. + * @return True if initialization was successful, otherwise false. + */ +bool Adafruit_BQ25628E::begin(uint8_t i2c_addr, TwoWire *wire) { + if (i2c_dev) { + delete i2c_dev; + } + + i2c_dev = new Adafruit_I2CDevice(i2c_addr, wire); + + if (!i2c_dev->begin()) { + return false; + } + + // Verify chip connection by reading part information register + Adafruit_BusIO_Register part_info_reg = Adafruit_BusIO_Register(i2c_dev, BQ25628E_REG_PART_INFORMATION); + uint8_t part_info = part_info_reg.read(); + + // Check for valid BQ25628E part ID (0x22) + if (part_info != 0x22) { + return false; + } + + return true; +} \ No newline at end of file diff --git a/Adafruit_BQ25628E.h b/Adafruit_BQ25628E.h new file mode 100644 index 0000000..47fdf20 --- /dev/null +++ b/Adafruit_BQ25628E.h @@ -0,0 +1,83 @@ +/*! + * @file Adafruit_BQ25628E.h + * + * This is a library for the BQ25628E I2C Battery Charger + * + * Designed specifically to work with the Adafruit BQ25628E Breakout + * ----> http://www.adafruit.com/products/ + * + * Pick one up today in the adafruit shop! + * + * These displays use I2C to communicate, 2 pins are required to interface. + * + * Adafruit invests time and resources providing this open source code, + * please support Adafruit and open-source hardware by purchasing products + * from Adafruit! + * + * @author Limor 'ladyada' Fried with assistance from Claude Code + * @license MIT (see license.txt) + */ + +#ifndef _ADAFRUIT_BQ25628E_H +#define _ADAFRUIT_BQ25628E_H + +#include "Arduino.h" +#include +#include + +/*! Default I2C address for the BQ25628E */ +#define BQ25628E_DEFAULT_ADDR 0x6A + +/*! Register addresses for the BQ25628E */ +#define BQ25628E_REG_CHARGE_CURRENT_LIMIT 0x02 +#define BQ25628E_REG_CHARGE_VOLTAGE_LIMIT 0x04 +#define BQ25628E_REG_INPUT_CURRENT_LIMIT 0x06 +#define BQ25628E_REG_INPUT_VOLTAGE_LIMIT 0x08 +#define BQ25628E_REG_MINIMAL_SYSTEM_VOLTAGE 0x0E +#define BQ25628E_REG_PRECHARGE_CONTROL 0x10 +#define BQ25628E_REG_TERMINATION_CONTROL 0x12 +#define BQ25628E_REG_CHARGE_CONTROL 0x14 +#define BQ25628E_REG_CHARGE_TIMER_CONTROL 0x15 +#define BQ25628E_REG_CHARGER_CONTROL_0 0x16 +#define BQ25628E_REG_CHARGER_CONTROL_1 0x17 +#define BQ25628E_REG_CHARGER_CONTROL_2 0x18 +#define BQ25628E_REG_CHARGER_CONTROL_3 0x19 +#define BQ25628E_REG_NTC_CONTROL_0 0x1A +#define BQ25628E_REG_NTC_CONTROL_1 0x1B +#define BQ25628E_REG_NTC_CONTROL_2 0x1C +#define BQ25628E_REG_CHARGER_STATUS_0 0x1D +#define BQ25628E_REG_CHARGER_STATUS_1 0x1E +#define BQ25628E_REG_FAULT_STATUS_0 0x1F +#define BQ25628E_REG_CHARGER_FLAG_0 0x20 +#define BQ25628E_REG_CHARGER_FLAG_1 0x21 +#define BQ25628E_REG_FAULT_FLAG_0 0x22 +#define BQ25628E_REG_CHARGER_MASK_0 0x23 +#define BQ25628E_REG_CHARGER_MASK_1 0x24 +#define BQ25628E_REG_FAULT_MASK_0 0x25 +#define BQ25628E_REG_ADC_CONTROL 0x26 +#define BQ25628E_REG_ADC_FUNCTION_DISABLE_0 0x27 +#define BQ25628E_REG_IBUS_ADC 0x28 +#define BQ25628E_REG_IBAT_ADC 0x2A +#define BQ25628E_REG_VBUS_ADC 0x2C +#define BQ25628E_REG_VPMID_ADC 0x2E +#define BQ25628E_REG_VBAT_ADC 0x30 +#define BQ25628E_REG_VSYS_ADC 0x32 +#define BQ25628E_REG_TS_ADC 0x34 +#define BQ25628E_REG_TDIE_ADC 0x36 +#define BQ25628E_REG_PART_INFORMATION 0x38 + +/*! + * @brief Class that stores state and functions for interacting with + * the BQ25628E I2C Battery Charger + */ +class Adafruit_BQ25628E { +public: + Adafruit_BQ25628E(); + ~Adafruit_BQ25628E(); + bool begin(uint8_t i2c_addr = BQ25628E_DEFAULT_ADDR, TwoWire *wire = &Wire); + +private: + Adafruit_I2CDevice *i2c_dev; /*!< Pointer to I2C bus interface */ +}; + +#endif \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..7c75f6e --- /dev/null +++ b/README.md @@ -0,0 +1,34 @@ +# Adafruit BQ25628E Library [![Build Status](https://github.com/adafruit/Adafruit_BQ25628E/workflows/Arduino%20Library%20CI/badge.svg)](https://github.com/adafruit/Adafruit_BQ25628E/actions)[![Documentation](https://github.com/adafruit/ci-arduino/blob/master/assets/doxygen_badge.svg)](http://adafruit.github.io/Adafruit_BQ25628E/html/index.html) + +Arduino library for the BQ25628E I2C Battery Charger with Power Path Management + +## About the BQ25628E + +The BQ25628E is a 1-cell Li-Ion battery charger with power path management: +- 2A charging current capability +- I2C interface for control and monitoring +- Power path management for seamless operation +- Integrated ADC for voltage and current monitoring +- Configurable charging parameters +- Safety features including thermal regulation + +## Installation + +Download and install the library using the Arduino Library Manager or by downloading the latest release from GitHub. + +### Dependencies + +This library requires: +- [Adafruit BusIO](https://github.com/adafruit/Adafruit_BusIO) + +## Hardware + +Connect the BQ25628E to your microcontroller via I2C. The default I2C address is 0x6A. + +## License + +MIT License. See LICENSE file for details. + +## Contributing + +Contributions are welcome! Please read the contributing guidelines and submit pull requests to the main repository. \ No newline at end of file diff --git a/examples/test_BQ25628E/test_BQ25628E.ino b/examples/test_BQ25628E/test_BQ25628E.ino new file mode 100644 index 0000000..f9a33f9 --- /dev/null +++ b/examples/test_BQ25628E/test_BQ25628E.ino @@ -0,0 +1,31 @@ +/*! + * Test sketch for the Adafruit BQ25628E I2C Battery Charger library + * + * Designed specifically to work with the Adafruit BQ25628E Breakout + * Pick one up today in the adafruit shop! + * + * Author: Limor 'ladyada' Fried with assistance from Claude Code + * License: MIT + */ + +#include "Adafruit_BQ25628E.h" + +Adafruit_BQ25628E bq; + +void setup() { + Serial.begin(115200); + while (!Serial) delay(10); + + Serial.println("Adafruit BQ25628E Test!"); + + if (!bq.begin()) { + Serial.println("Failed to find BQ25628E chip"); + while (1) delay(10); + } + + Serial.println("BQ25628E Found!"); +} + +void loop() { + delay(1000); +} \ No newline at end of file