Hello,
We are currently working on MAX17320G20+T based circuit for cell protection and fuel gauge of a 2 cell series LiPo battery. I've made a arduino library to read/write registers via I2C and able to get the fuel gauge registers working (BATT, PKP, VCELL, CELL1, CELL2 etc.).
But now I'm trying to implement the battery balancing function of the IC. The cell balancing is not happening.

#include <Wire.h>
#include "MAX17320.h"
//uint8_t r_sense = 1;
void setup() {
  Wire.begin(DEVICE_ADDRESS);
  Wire.begin(NVM_ADDRESS);
  Serial.begin(9600);
}
void loop() {
  //  read_cell1();
  delay(1000);
  //  Serial.println(MAX17320::read_cell1());
  MAX17320::set_cell_balancing(ZenerEnable, mV800, 11.7, 100);
}void set_cell_balancing(BatteryBalancingZener zener_enable, CellBalancingConfig bal_cfg, float r_mismatch, uint8_t imbalance)
  {
    r_mismatch = 32 * r_mismatch / 125;
    uint16_t RMismatch = round(r_mismatch) << 5;
    imbalance = round(imbalance / 10);
    if (imbalance <= 31 && r_mismatch <= 31)
    {
      uint16_t code = zener_enable | static_cast<uint16_t>(bal_cfg) | static_cast<uint16_t>(RMismatch) | static_cast<uint16_t>(imbalance);
      unlock_write_protection();
      write_named_register_nvm(RegisterNvm::NBalTh, code);
      lock_write_protection();
    }
  }enum BatteryBalancingZener
{
  ZenerDisable = 0,
  ZenerEnable = 1 << 13,
};
enum CellBalancingConfig
{
  Disable = 0,
  /// For 2.5mV
  mV25 = 1 << 10,
  /// For 5mV
  mV50 = 2 << 10,
  /// For 10mV
  mV100 = 3 << 10,
  /// For 20mV
  mV200 = 4 << 10,
  /// For 40mV
  mV400 = 5 << 10,
  /// For 80mV
  mV800 = 6 << 10,
  /// For 160mV
  mV1600 = 7 << 10,
}; 
			     
             
					 
							