Czy wolisz polską wersję strony elektroda?
Nie, dziękuję Przekieruj mnie tamDji batterie killer with arduino
• “DJI Battery Killer” is a community-made script that unlocks / revives DJI smart batteries whose BMS has entered “Permanent-Failure (PF) lock-out” after deep discharge or long storage.
• An Arduino (UNO/Nano/Pro-Micro) can act as a low-cost SMBus / I²C master to send the Texas-Instruments-style commands that un-seal the BMS, clear PF flags and, if required, reset the cycle counter.
• Typical workflow
DJI smart-battery architecture
• 4- to 6-cell Li-Ion/LiPo stack (Mavic: 3 S / 4 S; Inspire: 6 S).
• Texas-Instruments gas-gauge / BMS (BQ30z55/BQ40z50/BQ900x family).
• SMBus address 0x0B (Std. Smart-Battery spec).
• Protection flags: PF, PF2, CUV (under-voltage), OCC (over-current), OT (over-temperature).
• Once PF is asserted, the FETs are latched open (no charge / discharge). A simple charger will not recover the pack.
Why “battery killer” is a revival, not destruction
• Community coined name because it “kills” the PF flag, not the cells.
• Off-line sample answers confuse the term with destructive discharge; those methods are unrelated to the DJI revival tool.
SMBus command sequence (generic)
// ManufacturerAccess register = 0x00 on TI gauges
UNSEAL_STEP_1 0x3672
UNSEAL_STEP_2 0xFFFF
FULL_ACCESS 0xFFFF // some gauges need this
CLEAR_PF 0x0015 // or 0x0029 depending on IC
RESET_GAUGE 0x0041 // soft reset (optional)
TI gauges use little-endian. Always confirm with a register-map dump (MAC = 0x23/0x40
for BQ40z50).
Important: Different DJI models use slightly different firmware; use a dump from an intact battery of the same type whenever possible.
Arduino wiring & level considerations
• 5 V Arduinos usually tolerate 3.3 V SMBus pulled up by the battery (safe).
• Connection:
– Arduino A4 → SDA
– Arduino A5 → SCL
– Common GND
– Do NOT feed +5 V into the pack!
• Typical pull-up already present on the BMS; if not, add 4.7 kΩ to 3.3 V.
Minimal sketch (Wire-library)
#include <Wire.h>
const byte BMS = 0x0B; // SmartBattery default
void sendCmd(uint16_t cmd){
Wire.beginTransmission(BMS);
Wire.write(lowByte(cmd));
Wire.write(highByte(cmd));
Wire.endTransmission(true);
delay(50);
}
void setup(){
Wire.begin(); Serial.begin(115200);
sendCmd(0x3672); // Unseal 1
sendCmd(0xFFFF); // Unseal 2
sendCmd(0xFFFF); // Full-access (some gauges)
sendCmd(0x0015); // Clear PF
sendCmd(0x0041); // Gauge reset (optional)
Serial.println("Done – disconnect and test in charger.");
}
void loop(){}
Adapt commands for your exact gauge/firmware (consult TI data-sheet or working dump).
Pre-charging deeply depleted packs
• DJI BMS powers up only above ~9 V (3 S) / 12 V (4 S).
• If total pack is lower, open casing, isolate each cell pair, trickle charge at ≤ 0.2 C to 3.6 V / cell, monitor temperature, then re-assemble.
• After BMS wakes, proceed with the Arduino procedure.
Verification
• Read SBC commands 0x09 (Voltage), 0x0A (Current), 0x0F (RemainingCapacity).
• LED bar should respond, charger should accept the pack.
• Perform a full, balanced charge/discharge cycle and log IR to ensure no cell is damaged.
• Community keeps repositories on GitHub and GreyArrows / MavicPilots forums (2024 posts confirm procedure works on Mini 2, Air 2, Mavic Pro).
• CP2112 USB–I²C dongle is gaining popularity because scripts run directly from Python GUI; nevertheless, Arduino remains the cheapest platform.
• Newer DJI batteries (Avata, Mini 4) appear to add authentication crypto; the “battery killer” approach may not work without keys – area of active research.
• Think of the DJI BMS as a “fuse with a microcontroller”. The PF bit is that blown fuse. Clearing it is like sending a software command to re-latch the gate FETs.
• The two-step UNSEAL code acts as a password; FULL-ACCESS escalates to manufacturer level where destructive commands (e.g., flash write) are allowed.
• Warranty / TOS: Any manipulation voids DJI warranty; in some regions altering certified battery firmware may infringe regulations.
• Transport safety: A previously PF-locked pack was deemed unsafe. Confirm IR, balance and capacity before flying – otherwise you endanger airspace and property.
• Environmental responsibility: If cells show > 20 mΩ IR or > 30 % imbalance after revival, recycle the pack instead of flying with it.
• Work on a ceramic/metal surface, have a class-D (Li-ion) fire extinguisher.
• Use insulated probe clips; accidental short on a 4 S pack can deliver > 80 A.
• Log every SMBus transaction; if gauge NACKs the command, stop and re-evaluate wiring or cell voltage.
• After successful revival, flash the latest DJI firmware to the battery via DJI Fly / Go4; this recalibrates cycle count tables.
• Not all PF causes are benign. Packs that locked due to over-temperature or internal resistance rise can fail catastrophically even after reset.
• TI changed unseal passwords on some OEM firmware; brute-forcing is non-trivial and beyond the scope of this guide.
• Future DJI generations may incorporate secure-element based authentication, making this method obsolete.
• Reverse-engineering of crypto-secure gas gauges (TI BQ40z80 with SHA-256).
• Automated cell-level impedance spectroscopy to decide whether a revived pack is flight-worthy.
• Development of an open-source “Smart-Battery-Doctor” combining CP2112 + ADC sampling for all hobby-drone packs.
The so-called “DJI Battery Killer” does not destroy batteries; it is an I²C/SMBus routine that revives DJI smart batteries locked by their BMS. An Arduino can deliver the necessary unseal and PF-clear commands once the pack voltage is high enough for the gauge to power up. The process requires careful pre-charge, correct wiring, and adherence to Li-ion safety practice. Always validate cell health after revival and respect legal responsibilities when flying or disposing of repaired packs.