Post Go back to editing

Bootup behavior of MAX17330

Category: Hardware
Product Number: MAX17330

[00:00:00.374,938] <inf> max17330: DevName: 0x360F
[00:00:00.380,615] <inf> max17330: DevName: 0x360F
[00:00:00.386,322] <inf> max17330: DevName: 0x360F
[00:00:00.392,059] <inf> max17330: DevName: 0x360F
[00:00:00.397,735] <inf> max17330: DevName: 0x360F
[00:00:00.403,411] <inf> max17330: DevName: 0x360F
[00:00:00.409,149] <inf> max17330: DevName: 0x360F
[00:00:00.414,855] <inf> max17330: DevName: 0x360F
[00:00:00.420,562] <inf> max17330: DevName: 0x360F
[00:00:00.426,269] <inf> max17330: DevName: 0x360F
[00:00:00.431,945] <inf> max17330: DevName: 0x360F
[00:00:00.437,683] <inf> max17330: DevName: 0x360F
[00:00:00.443,359] <inf> max17330: DevName: 0x360F
[00:00:00.449,066] <inf> max17330: DevName: 0x360F
[00:00:00.454,742] <inf> max17330: DevName: 0x360F
[00:00:00.460,418] <inf> max17330: DevName: 0x360F
[00:00:00.466,094] <inf> max17330: DevName: 0x360F
[00:00:00.471,801] <inf> max17330: DevName: 0x360F
[00:00:00.477,478] <inf> max17330: DevName: 0x360F
[00:00:00.483,154] <inf> max17330: DevName: 0x360F
[00:00:00.488,861] <inf> max17330: DevName: 0x360F
[00:00:00.494,567] <inf> max17330: DevName: 0x360F
[00:00:00.500,244] <inf> max17330: DevName: 0x360F
[00:00:00.505,950] <inf> max17330: DevName: 0x360F
[00:00:00.511,688] <inf> max17330: DevName: 0x360F
[00:00:00.517,364] <inf> max17330: DevName: 0x360F
[00:00:00.523,071] <inf> max17330: DevName: 0x360F
[00:00:00.528,808] <inf> max17330: DevName: 0x360F
[00:00:00.534,515] <inf> max17330: DevName: 0x360F
[00:00:00.540,191] <inf> max17330: DevName: 0x360F
[00:00:00.545,898] <inf> max17330: DevName: 0x360F
[00:00:00.551,574] <inf> max17330: DevName: 0x40B0
[00:00:00.557,281] <inf> max17330: DevName: 0x40B0
[00:00:00.562,927] <inf> max17330: DevName: 0x40B0
[00:00:00.568,634] <inf> max17330: DevName: 0x40B0
[00:00:00.574,340] <inf> max17330: DevName: 0x40B0
[00:00:00.580,047] <inf> max17330: DevName: 0x40B0
[00:00:00.585,723] <inf> max17330: DevName: 0x40B0
[00:00:00.591,430] <inf> max17330: DevName: 0x40B0
[00:00:00.597,167] <inf> max17330: DevName: 0x40B0
[00:00:00.602,905] <inf> max17330: DevName: 0x40B0
[00:00:00.608,612] <inf> max17330: DevName: 0x40B0
[00:00:00.614,318] <inf> max17330: DevName: 0x40B0
[00:00:00.620,025] <inf> max17330: DevName: 0x40B0
[00:00:00.625,762] <inf> max17330: DevName: 0x40B0
[00:00:00.631,439] <inf> max17330: DevName: 0x40B0
[00:00:00.637,145] <inf> max17330: DevName: 0x40B0
[00:00:00.642,883] <inf> max17330: DevName: 0x40B0
[00:00:00.648,559] <inf> max17330: DevName: 0x40B0
[00:00:00.654,266] <inf> max17330: DevName: 0x40B0
[00:00:00.659,973] <inf> max17330: DevName: 0x40B0
[00:00:00.665,649] <inf> max17330: DevName: 0x40B0
[00:00:00.671,356] <inf> max17330: DevName: 0x40B0
[00:00:00.677,032] <inf> max17330: DevName: 0x40B0
[00:00:00.682,708] <inf> max17330: DevName: 0x40B0
[00:00:00.688,415] <inf> max17330: DevName: 0x40B0
[00:00:00.694,091] <inf> max17330: DevName: 0x40B0
[00:00:00.699,798] <inf> max17330: DevName: 0x40B0
[00:00:00.705,505] <inf> max17330: DevName: 0x40B0
[00:00:00.711,181] <inf> max17330: DevName: 0x40B0
[00:00:00.716,857] <inf> max17330: DevName: 0x40B0
[00:00:00.722,534] <inf> max17330: DevName: 0x40B0
[00:00:00.728,271] <inf> max17330: DevName: 0x40B0
[00:00:00.733,947] <inf> max17330: DevName: 0x40B0
[00:00:00.739,685] <inf> max17330: DevName: 0x40B0
[00:00:00.745,422] <inf> max17330: DevName: 0x40B0
[00:00:00.751,098] <inf> max17330: DevName: 0x40B0
[00:00:00.756,835] <inf> max17330: DevName: 0x40B0
[00:00:00.762,542] <inf> max17330: DevName: 0x40B0
[00:00:00.768,218] <inf> max17330: DevName: 0x40B0
[00:00:00.773,925] <inf> max17330: DevName: 0x40B0
[00:00:00.779,632] <inf> max17330: DevName: 0x40B0
[00:00:00.785,369] <inf> max17330: DevName: 0x40B0
[00:00:00.791,076] <inf> max17330: DevName: 0x40B0
[00:00:00.796,752] <inf> max17330: DevName: 0x40B0
[00:00:00.802,459] <inf> max17330: DevName: 0x40B0
[00:00:00.808,197] <inf> max17330: DevName: 0x40B0
[00:00:00.813,873] <inf> max17330: DevName: 0x40B0
[00:00:00.819,580] <inf> max17330: DevName: 0x40B0
[00:00:00.825,317] <inf> max17330: DevName: 0x40B0
[00:00:00.831,024] <inf> max17330: DevName: 0x40B0
[00:00:00.836,700] <inf> max17330: DevName: 0x40B0
[00:00:00.842,376] <inf> max17330: DevName: 0x40B0
[00:00:00.848,114] <inf> max17330: DevName: 0x40B0
[00:00:00.853,820] <inf> max17330: DevName: 0x40B0
[00:00:00.859,497] <inf> max17330: DevName: 0x40B0
[00:00:00.865,234] <inf> max17330: DevName: 0x40B0
[00:00:00.870,941] <inf> max17330: DevName: 0x40B0
[00:00:00.876,617] <inf> max17330: DevName: 0x40B0
[00:00:00.882,354] <inf> max17330: DevName: 0x40B0
[00:00:00.888,031] <inf> max17330: DevName: 0x40B0
[00:00:00.893,768] <inf> max17330: DevName: 0x40B0
[00:00:00.899,444] <inf> max17330: DevName: 0x40B0
[00:00:00.905,151] <inf> max17330: DevName: 0x40B0
[00:00:00.910,858] <inf> max17330: DevName: 0x40B0
[00:00:00.916,564] <inf> max17330: DevName: 0x40B0
[00:00:00.922,302] <inf> max17330: DevName: 0x40B0
[00:00:00.928,009] <inf> max17330: DevName: 0x40B0
[00:00:00.933,685] <inf> max17330: DevName: 0x40B0
[00:00:00.939,392] <inf> max17330: DevName: 0x40B0
[00:00:00.945,129] <inf> max17330: DevName: 0x40B0
[00:00:00.950,805] <inf> max17330: DevName: 0x40B0
[00:00:00.956,512] <inf> max17330: DevName: 0x40B0
[00:00:00.962,219] <inf> max17330: DevName: 0x40B0
[00:00:00.967,926] <inf> max17330: DevName: 0x40B0
[00:00:00.973,663] <inf> max17330: DevName: 0x40B0
[00:00:00.979,339] <inf> max17330: DevName: 0x40B0
[00:00:00.985,046] <inf> max17330: DevName: 0x40B0
[00:00:00.990,753] <inf> max17330: DevName: 0x40B0
[00:00:00.996,459] <inf> max17330: DevName: 0x40B0
[00:00:01.002,105] <inf> max17330: DevName: 0x40B0
[00:00:01.007,781] <inf> max17330: DevName: 0x40B0
[00:00:01.013,519] <inf> max17330: DevName: 0x40B0
[00:00:01.019,226] <inf> max17330: DevName: 0x40B0
[00:00:01.024,902] <inf> max17330: DevName: 0x40B0
[00:00:01.030,639] <inf> max17330: DevName: 0x40B0
[00:00:01.036,315] <inf> max17330: DevName: 0x40B0
[00:00:01.041,992] <inf> max17330: DevName: 0x40B0
[00:00:01.047,668] <inf> max17330: DevName: 0x40B0
[00:00:01.053,405] <inf> max17330: DevName: 0x40B0
[00:00:01.059,112] <inf> max17330: DevName: 0x40B0
[00:00:01.064,819] <inf> max17330: DevName: 0x40B0
[00:00:01.070,526] <inf> max17330: DevName: 0x40B0
[00:00:01.076,293] <inf> max17330: DevName: 0x40B0
[00:00:01.081,970] <inf> max17330: DevName: 0x40B0
[00:00:01.087,707] <inf> max17330: DevName: 0x40B0
[00:00:01.093,444] <inf> max17330: DevName: 0x40B0
[00:00:01.099,151] <inf> max17330: DevName: 0x40B0
[00:00:01.104,858] <inf> max17330: DevName: 0x40B0
[00:00:01.110,626] <inf> max17330: DevName: 0x40B0
[00:00:01.116,333] <inf> max17330: DevName: 0x40B0
[00:00:01.122,039] <inf> max17330: DevName: 0x40B0
[00:00:01.127,807] <inf> max17330: DevName: 0x40B0
[00:00:01.133,514] <inf> max17330: DevName: 0x40B0
[00:00:01.139,221] <inf> max17330: DevName: 0x40B0
[00:00:01.144,927] <inf> max17330: DevName: 0x40B0
[00:00:01.150,665] <inf> max17330: DevName: 0x40B0
[00:00:01.156,341] <inf> max17330: DevName: 0x40B0
[00:00:01.162,048] <inf> max17330: DevName: 0x40B0
[00:00:01.167,785] <inf> max17330: DevName: 0x40B0
[00:00:01.173,492] <inf> max17330: DevName: 0x40B0
[00:00:01.179,168] <inf> max17330: DevName: 0x40B0
[00:00:01.184,844] <inf> max17330: DevName: 0x40B0
[00:00:01.190,551] <inf> max17330: DevName: 0x40B0
[00:00:01.196,289] <inf> max17330: DevName: 0x40B0
[00:00:01.201,965] <inf> max17330: DevName: 0x40B0
[00:00:01.207,641] <inf> max17330: DevName: 0x40B0
[00:00:01.213,378] <inf> max17330: DevName: 0x40B0
[00:00:01.219,055] <inf> max17330: DevName: 0x40B0
[00:00:01.224,792] <inf> max17330: DevName: 0x40B0
[00:00:01.230,499] <inf> max17330: DevName: 0x40B0
[00:00:01.236,175] <inf> max17330: DevName: 0x40B0
[00:00:01.241,851] <inf> max17330: DevName: 0x40B0
[00:00:01.247,528] <inf> max17330: DevName: 0x40B0
--- 1 messages dropped ---
[00:00:01.253,265] <inf> max17330: DevName: 0x40B0
[00:00:01.258,972] <inf> max17330: DevName: 0x40B0
[00:00:01.264,678] <inf> max17330: DevName: 0x40B0
[00:00:01.270,385] <inf> max17330: DevName: 0x40B1


This is the bootup behavior of MAX17330.
Initially the DevName (Reg 0x021) is 0x360F, ~300ms it becomes 0x40B0 and ~900ms it becomes 0x40B1.
From datasheet, I recognize 0x40B0 and 0x40B1.


Also, I have seen that POR_CMD bit is set for atleast 500ms (my code timeout after loop_N=50 x Delay=10ms)...

---

Optional but useful inquiry for all of us. Don't need to be answered upfront... Please self-add any relevant questions if it help all of us.

Q1: When is it safe to start communicating with the IC?

Q2: Why such a big boot time?

Q3: Does ADI knows about 0x360F?

Q4: What do you recommend in term of waiting time?

Q5: If the IC "is" "not ready", why is I2C is active?

I'm leaving this for others in case they experience trouble debugging.

---

Usecase:

I'm not using Nonvolatile memory at all.

Shadow ram is loaded everytime register 0x1E0 (free for user) dont match a magic value. since its default value is 0x0000 as per datasheet.

Also I only put IC in ship mode rather than deepship or deepship2 mode because it preserve the ram/firmware. That way battery consumption is higher but the system is more flexible.

Please let me know if this something make sense and is not discouraged by ADI. Thanks!

  • Update: It takes around ~900ms for the POR_CMD bit to clear up. This is basically done to put the new registers (shadow ram) into use (without writing to Nonvoltaile memory)


    So overally my impression is that the IC requires 900ms to configure itself.

    Be it reading the ADI written configuration (which takes ~5ms to read from flash as per datasheet ) OR user provided configuration.

    ---

    Side note to the reader, if someone try to write shadow ram or execute POR_CMD before things are properly setup'd internally, the IC behave unpredictable from user pov.
    Why I know: Because the code wrote shadow ram and executed POR_CMD but end up showing a mismatch of Rsense which made me re-evaluate my assumptions.

    ---

    Hope this helps to future debuggers or future version of the IC.

  • Update2: I leave the reader with a hint as well:

    Register 0x061 (CommStat)

    "Write Protection: To prevent the host from accidentally writing any registers of the IC, write protection is enabled by
    default. Any time the host wants to write a register, the global write protection must be disabled as well as the write
    protection for the specific register page. To prevent accidental unlocking of the write protection, the CommStat register
    must be written with the desired value two times in a row (without accessing any other registers) to set or clear any of the
    write protection bits. All bits can be set or cleared in the same write sequence. For example, writing 0x0000 to CommStat
    twice in a row clears the WPGlobal and all WP1-WP5 at the same time."

    Mind the "any"... that include the 0x000 Status register as well. Just to be able to clear status register, one has to disable write protection. (same goes for Config 0x0AB which is required to set SHIP register).

    This was the last hint: github.com/.../MAX17332.cpp

    Now finally my driver is working.

    ---

    PS: if you are looking for help, ping me. happy to help.

Before You Switch


Switching languages will make ADI Explorer unavailable. Resume your session by switching back to English and reopening ADI Explorer.