From fdd67ce1b3d65ec38fab88436c4c514ca965be72 Mon Sep 17 00:00:00 2001 From: mikecarper Date: Wed, 30 Sep 2026 01:24:49 -0700 Subject: [PATCH] Warn LiFePO4 users about unchanged 4.2V chargers --- docs/cli_commands.md | 11 +++++++++++ src/helpers/NRF52VoltagePolicy.cpp | 5 +++++ 2 files changed, 16 insertions(+) diff --git a/docs/cli_commands.md b/docs/cli_commands.md index cd66480d0..e06eb946a 100644 --- a/docs/cli_commands.md +++ b/docs/cli_commands.md @@ -4824,6 +4824,13 @@ lock, and running cutoff off. `lifepo4` uses 2700 mV = 0%, 3550 mV = 100%, values and allows endpoint overrides. These percentages are simple voltage estimates; they are not an accurate state-of-charge measurement under load. +**WARNING: SELECTING LIFEPO4 DOES NOT CHANGE ANY BOARD'S CHARGING CIRCUIT. A +4.2 V LI-ION CHARGER WILL STILL CHARGE TOWARD 4.2 V AND CAN DESTROY A LIFEPO4 +CELL. USE A LIFEPO4-COMPATIBLE CHARGER OR DISABLE/ISOLATE ON-BOARD CHARGING +BEFORE CONNECTING A LIFEPO4 CELL.** Check the charging hardware on every board +before using this profile; firmware battery-profile and cutoff settings cannot +make a Li-ion charger safe for LiFePO4. + ```text get battery.profile set battery.profile lifepo4 @@ -4848,6 +4855,10 @@ For a RAK3401/RAK13302 LiFePOâ‚„ cell: set battery.profile lifepo4 ``` +For example, the +[RAK19007 base-board datasheet](https://docs.rakwireless.com/product-categories/wisblock/rak19007/datasheet/) +specifies 4.2 V charging for a Li-ion battery. The profile does not change it. + The 2.7 V cutoff is a cell-protection choice, not a guarantee of 1 W RF output. The [RAK13302 datasheet](https://docs.rakwireless.com/product-categories/wisblock/rak13302/datasheet-vd/) specifies 3.0 V minimum at VBAT and lists 5 V / 1 A peak for 30 dBm output. diff --git a/src/helpers/NRF52VoltagePolicy.cpp b/src/helpers/NRF52VoltagePolicy.cpp index 77830c153..a5d72e871 100644 --- a/src/helpers/NRF52VoltagePolicy.cpp +++ b/src/helpers/NRF52VoltagePolicy.cpp @@ -244,6 +244,11 @@ bool handleVoltagePolicyCommand(const char* command, char* reply, } if (!save(boot, low, empty, full, adc_permille, next)) snprintf(reply, reply_capacity, "Error: battery profile could not be saved"); + else if (next == LIFEPO4) + snprintf(reply, reply_capacity, + "OK - lifepo4 saved; reboot. " + "WARNING: PROFILE DOES NOT CHANGE CHARGERS. " + "A 4.2V CHARGER STILL CHARGES TO 4.2V AND CAN DESTROY LIFEPO4 CELLS."); else snprintf(reply, reply_capacity, "OK - %s profile saved; reboot for bootlock", value); return true; }