Post Go back to editing

MAX17320 Receiving error on nonvolatile memory write

Category: Software
Product Number: MAX17320
Hi,
 
I am trying to flash/burn a new configuration onto the nonvolatile memory onto the MAX17320 chip, but I am receiving an error on the CommStat.NVError bit when attempting to write. I have tried this with the GUI and it displays Error after using the Configuration Wizard.

It seems like the default factory setting is for a 2 cell system with a full capacity of 3400mAh. I need the chip to work on a 4 cell system, with each cell at 2600mAh for a total full capacity of 10400mAh. I have been able to write to the shadow ram with the correct config .ini for this setup, but no luck with writing to the nonvolatile memory.
 
The only changes I make throughout the Configuration Wizard are:
On step 2/21 Cell Model Selection: Select Use ModelGauge m5 EZ Model
Entering 10400 for Cell Size (mAh)
On step 3/21, Entering Cell Count as 4, Thermistor Temps as 4
Then I select "Program New Configuration to Non-Volatile Memory -> Click Update IC and/or Save New Configuration"
-Then I receive an error
 
This is the config .ini file it generates
;Device = MAX17320
;Title = EVKIT Configurator Profile Generated on 2025/03/14 08:48:52
[Registers]
0x180 = 0x0000		//nXTable0 Register
0x181 = 0x0000		//nXTable1 Register
0x182 = 0x0000		//nXTable2 Register
0x183 = 0x0000		//nXTable3 Register
0x184 = 0x0000		//nXTable4 Register
0x185 = 0x0000		//nXTable5 Register
0x186 = 0x0000		//nXTable6 Register
0x187 = 0x0000		//nXTable7 Register
0x188 = 0x0000		//nXTable8 Register
0x189 = 0x0000		//nXTable9 Register
0x18A = 0x0000		//nXTable10 Register
0x18B = 0x0000		//nXTable11 Register
0x18C = 0x0000		//nVAlrtTh Register
0x18D = 0x0000		//nTAlrtTh Register
0x18E = 0x0000		//nIAlrtTh Register
0x18F = 0x0000		//nSAlrtTh Register
0x190 = 0x0000		//nOCVTable0 Register
0x191 = 0x0000		//nOCVTable1 Register
0x192 = 0x0000		//nOCVTable2 Register
0x193 = 0x0000		//nOCVTable3 Register
0x194 = 0x0000		//nOCVTable4 Register
0x195 = 0x0000		//nOCVTable5 Register
0x196 = 0x0000		//nOCVTable6 Register
0x197 = 0x0000		//nOCVTable7 Register
0x198 = 0x0000		//nOCVTable8 Register
0x199 = 0x0000		//nOCVTable9 Register
0x19A = 0x0000		//nOCVTable10 Register
0x19B = 0x0000		//nOCVTable11 Register
0x19C = 0x046D		//nIChgTerm Register
0x19D = 0x0000		//nFilterCfg Register
0x19E = 0x0000		//nVEmpty Register
0x19F = 0x0000		//nLearnCfg Register
0x1A0 = 0x1050		//nQRTable00 Register
0x1A1 = 0x8002		//nQRTable10 Register
0x1A2 = 0x078C		//nQRTable20 Register
0x1A3 = 0x0880		//nQRTable30 Register
0x1A4 = 0x0000		//nCycles Register
0x1A5 = 0x2F20		//nFullCapNom Register
0x1A6 = 0x08CC		//nRComp0 Register
0x1A7 = 0x223E		//nTempCo Register
0x1A8 = 0x0000		//nBattStatus Register
0x1A9 = 0x28A0		//nFullCapRep Register
0x1AA = 0x0000		//ndQTot Register
0x1AB = 0x0000		//nMaxMinCurr Register
0x1AC = 0x0000		//nMaxMinVolt Register
0x1AD = 0x0000		//nMaxMinTemp Register
0x1AE = 0x0000		//nFaultLog Register
0x1AF = 0x0000		//nTimerH Register
0x1B0 = 0x2290		//nCONFIG Register
0x1B1 = 0x0204		//nRippleCfg Register
0x1B2 = 0x0000		//nMiscCFG Register
0x1B3 = 0x28A0		//nDesignCap Register
0x1B4 = 0x0008		//nSBSCFG Register
0x1B5 = 0x0012		//nPACKCFG Register
0x1B6 = 0x083B		//nRelaxCFG Register
0x1B7 = 0x2241		//nConvgCFG Register
0x1B8 = 0x0A80		//nNVCFG0 Register
0x1B9 = 0x0182		//nNVCFG1 Register
0x1BA = 0xBE2D		//nNVCFG2 Register
0x1BB = 0x0909		//nHibCFG Register
0x1BC = 0x0000		//nROMID0 Register
0x1BD = 0x0000		//nROMID1 Register
0x1BE = 0x0000		//nROMID2 Register
0x1BF = 0x0000		//nROMID3 Register
0x1C0 = 0x0000		//nChgCtrl1 Register
0x1C1 = 0x0000		//nPReserved1 Register
0x1C2 = 0x2061		//nChgCfg0 Register
0x1C3 = 0x00E1		//nChgCtrl0 Register
0x1C4 = 0x0000		//nRGain Register
0x1C5 = 0x0000		//nPackResistance Register
0x1C6 = 0x0000		//nFullSOCThr Register
0x1C7 = 0x0000		//nTTFCFG Register
0x1C8 = 0x4000		//nCGAIN Register
0x1C9 = 0x0000		//nCGTempCo Register
0x1CA = 0x71BE		//nThermCfg Register
0x1CB = 0x0000		//nChgCfg1 Register
0x1CC = 0x0000		//nManfctrName Register
0x1CD = 0x0000		//nManfctrName1 Register
0x1CE = 0x0000		//nManfctrName2 Register
0x1CF = 0x01F4		//nRSense Register
0x1D0 = 0x508C		//nUVPrtTh Register
0x1D1 = 0x3700		//nTPrtTh1 Register
0x1D2 = 0x5528		//nTPrtTh3 Register
0x1D3 = 0x4BB5		//nIPrtTh1 Register
0x1D4 = 0x0000		//nBALTh Register
0x1D5 = 0x2D0A		//nTPrtTh2 Register
0x1D6 = 0x7A58		//nProtMiscTh Register
0x1D7 = 0x0900		//nProtCfg Register
0x1D8 = 0x644B		//nJEITAC Register
0x1D9 = 0x0059		//nJEITAV Register
0x1DA = 0xB754		//nOVPrtTh Register
0x1DB = 0xC884		//nStepChg Register
0x1DC = 0xAB3D		//nDelayCfg Register
0x1DD = 0x0EAF		//nODSCTh Register
0x1DE = 0x4355		//nODSCCfg Register
0x1DF = 0xA00E		//nProtCfg2 Register
0x1E0 = 0x0000		//nDPLimit Register
0x1E1 = 0x0000		//nScOcvLim Register
0x1E2 = 0x0000		//nAgeFcCfg Register
0x1E3 = 0xA5B9		//nDesignVoltage Register
0x1E4 = 0x0000		//nVGain Register
0x1E5 = 0x0000		//nRFastVShdn Register
0x1E6 = 0x0000		//nManfctrDate Register
0x1E7 = 0x0000		//nFirstUsed Register
0x1E8 = 0x0000		//nSerialNumber0 Register
0x1E9 = 0x0000		//nSerialNumber1 Register
0x1EA = 0x0000		//nSerialNumber2 Register
0x1EB = 0x0000		//nDeviceName0 Register
0x1EC = 0x0000		//nDeviceName1 Register
0x1ED = 0x0000		//nDeviceName2 Register
0x1EE = 0x0000		//nDeviceName3 Register
0x1EF = 0x0000		//nDeviceName4 Register

Not sure where I'm going wrong here. Any guidance is appreciated


Datasheets for reference:

https://www.analog.com/media/en/technical-documentation/data-sheets/max17320.pdf

https://www.analog.com/media/en/technical-documentation/data-sheets/MAX17320G1EVKIT-MAX17320X2EVKIT.pdf

https://www.analog.com/media/en/technical-documentation/user-guides/max17320-software-implementation-guide.pdf

  • I have found the issue. While using a logic analyzer I was able to detect that when writing to registers like the comm stat and command register, I needed to use i2c address 0x36, but when sending read and write commands to the shadow ram, it needed to use i2c address 0x0B. 

    I could not find this anywhere in the datasheet and only could discover this by analyzing the logic output from the GUI. If a future revision is made for the datasheet, I think it would be very helpful to make this clear for future reference.