This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

BQ25710: VDPM stops regulator?

Part Number: BQ25710


I am running into a weird issue. I have a fusb302 tied to the vbus rail which allows voltage to drop as far as 4v before it registers as disconnect. I have gotten a charge current of 3 amps to work, but the voltage sags below the 4v limit causing the fusb302 to detect a disconnect.  However when I set the Input Voltage limit to 4.1 Volts, It tells me that it is in fast charge mode, but is not actually charging the battery:


Dec 13 17:19:13 beaglebone kernel: bq257xx-charger 1-0009: REG0x12 : 0x70e
Dec 13 17:19:13 beaglebone kernel: bq257xx-charger 1-0009: REG0x14 : 0x12c0
Dec 13 17:19:13 beaglebone kernel: bq257xx-charger 1-0009: REG0x15 : 0x20d0
Dec 13 17:19:13 beaglebone kernel: bq257xx-charger 1-0009: REG0x30 : 0x210
Dec 13 17:19:13 beaglebone kernel: bq257xx-charger 1-0009: REG0x31 : 0x2b7
Dec 13 17:19:14 beaglebone kernel: bq257xx-charger 1-0009: REG0x32 : 0x30
Dec 13 17:19:14 beaglebone kernel: bq257xx-charger 1-0009: REG0x33 : 0x4a65
Dec 13 17:19:14 beaglebone kernel: bq257xx-charger 1-0009: REG0x34 : 0x8120
Dec 13 17:19:14 beaglebone kernel: bq257xx-charger 1-0009: REG0x35 : 0xe0ff
Dec 13 17:19:14 beaglebone kernel: bq257xx-charger 1-0009: REG0x20 : 0x8400
Dec 13 17:19:14 beaglebone kernel: bq257xx-charger 1-0009: REG0x21 : 0xa880
Dec 13 17:19:14 beaglebone kernel: bq257xx-charger 1-0009: REG0x22 : 0x1e00
Dec 13 17:19:14 beaglebone kernel: bq257xx-charger 1-0009: REG0x23 : 0x1b00
Dec 13 17:19:14 beaglebone kernel: bq257xx-charger 1-0009: REG0x24 : 0x0
Dec 13 17:19:14 beaglebone kernel: bq257xx-charger 1-0009: REG0x25 : 0x424
Dec 13 17:19:14 beaglebone kernel: bq257xx-charger 1-0009: REG0x26 : 0x3737
Dec 13 17:19:14 beaglebone kernel: bq257xx-charger 1-0009: REG0x3b : 0x744
Dec 13 17:19:14 beaglebone kernel: bq257xx-charger 1-0009: REG0x3c : 0x6400
Dec 13 17:19:14 beaglebone kernel: bq257xx-charger 1-0009: REG0x3d : 0x380
Dec 13 17:19:14 beaglebone kernel: bq257xx-charger 1-0009: REG0x3e : 0x1400
Dec 13 17:19:14 beaglebone kernel: bq257xx-charger 1-0009: REG0x3f : 0x1e00
Dec 13 17:19:14 beaglebone kernel: bq257xx-charger 1-0009: REG0xfe : 0x40
Dec 13 17:19:14 beaglebone kernel: bq257xx-charger 1-0009: REG0xff : 0x89
Dec 13 17:19:14 beaglebone kernel: bq257xx-charger 1-0009: battery charge current: 0mA
Dec 13 17:19:14 beaglebone kernel: bq257xx-charger 1-0009: battery discharge current: 0mA
Dec 13 17:19:14 beaglebone kernel: bq257xx-charger 1-0009: VSYS volatge: 6400mV
Dec 13 17:19:14 beaglebone kernel: bq257xx-charger 1-0009: BAT volatge: 6400mV
Dec 13 17:19:14 beaglebone kernel: bq257xx-charger 1-0009: SET CHARGE_CURRENT: 4800mA
Dec 13 17:19:14 beaglebone kernel: bq257xx-charger 1-0009: MAX_CHARGE_VOLTAGE: 16800mV
Dec 13 17:19:14 beaglebone kernel: bq257xx-charger 1-0009: INPUT_VOLTAGE: 4096mV
Dec 13 17:19:14 beaglebone kernel: bq257xx-charger 1-0009: INPUT_CURRENT: 1500mA
Dec 13 17:19:14 beaglebone kernel: bq257xx-charger 1-0009: MIN_SYS_VOTAGE: 6144mV
Dec 13 17:19:14 beaglebone kernel: bq257xx-charger 1-0009: status:
Dec 13 17:19:14 beaglebone kernel: bq257xx-charger 1-0009: AC_STAT: 1
Dec 13 17:19:14 beaglebone kernel: bq257xx-charger 1-0009: ICO_DONE: 0
Dec 13 17:19:14 beaglebone kernel: bq257xx-charger 1-0009: IN_VINDPM: 0
Dec 13 17:19:14 beaglebone kernel: bq257xx-charger 1-0009: IN_IINDPM: 0
Dec 13 17:19:14 beaglebone kernel: bq257xx-charger 1-0009: IN_FCHRG: 1
Dec 13 17:19:14 beaglebone kernel: bq257xx-charger 1-0009: IN_PCHRG: 0
Dec 13 17:19:14 beaglebone kernel: bq257xx-charger 1-0009: IN_OTG: 0
Dec 13 17:19:14 beaglebone kernel: bq257xx-charger 1-0009: F_ACOV: 0
Dec 13 17:19:14 beaglebone kernel: bq257xx-charger 1-0009: F_BATOC: 0
Dec 13 17:19:14 beaglebone kernel: bq257xx-charger 1-0009: F_ACOC: 0
Dec 13 17:19:14 beaglebone kernel: bq257xx-charger 1-0009: SYSOVP_STAT: 0
Dec 13 17:19:14 beaglebone kernel: bq257xx-charger 1-0009: F_LATCHOFF: 0
Dec 13 17:19:14 beaglebone kernel: bq257xx-charger 1-0009: F_OTGOVP: 0
Dec 13 17:19:14 beaglebone kernel: bq257xx-charger 1-0009: F_OTGOCP: 0

It seems that the VDPM stat is stopping the charging, even though I have disabled it from the PROCHOT output. How can I get around that so I can set a high input current limit where actual current is being regulated by the incoming voltage without triggering VDPM?

  • Hi Konstantin,

    PROCHOT_VDPM triggers at a lower level than the regular VINDPM. please refer to datasheet 9.3.9. So I guess VDPM was active in your case. You can set up VDPM value very low to "disable" it.

    Also keep in mind, at charge current as high as 3A in your case, voltage drop on cables starts to be significant. You may want to make sure you've minimized the loss between adapter and charger.

    Best Regards,

    Linhong

  • Hi Linhong,

    I tried replying yesterday but it seems the post didn't  go through.

    Thank you for responding quickly!

    Mainly I am trying to set a max charge limit and charge as much as possible up to the voltage limit. Is that possible?

    Rather than telling the charger "I want to charge at X rate", Can I say "Charge as fast as possible up to the X current limit, as long as voltage stays above Vmin"?

    Thank you!

  • Hi Konstantin,

    Yes! This is exactly what VDPM is designed for. Once you set up a proper VDPM(slightly lower than nominal input voltage but not enough to crash the input source), charger will adjust/reduce charge current, but keep it as high as possible without crashing the input source.

    Best Regards,

    Linhong

  • Hi Linhong,

    Alright, that's good to hear. 

    How can I reliably enter that state? 

    I currently have a polling loop that monitors status bits and on ac detection, executes the following in this order:

    1) Set input voltage (0x3D) to approx 4.1v,

    2) Set charge current (0x14) to 448mA,

    2) Set en_ico_mode to 1.

    and now I'm in this state:

    Dec 14 08:21:09 beaglebone kernel: bq257xx-charger 1-0009: REG0x12 : 0x70e
    Dec 14 08:21:09 beaglebone kernel: bq257xx-charger 1-0009: REG0x14 : 0x12c0
    Dec 14 08:21:09 beaglebone kernel: bq257xx-charger 1-0009: REG0x15 : 0x20d0
    Dec 14 08:21:09 beaglebone kernel: bq257xx-charger 1-0009: REG0x30 : 0x210
    Dec 14 08:21:09 beaglebone kernel: bq257xx-charger 1-0009: REG0x31 : 0x10b7
    Dec 14 08:21:09 beaglebone kernel: bq257xx-charger 1-0009: REG0x32 : 0x830
    Dec 14 08:21:09 beaglebone kernel: bq257xx-charger 1-0009: REG0x33 : 0x4a65
    Dec 14 08:21:09 beaglebone kernel: bq257xx-charger 1-0009: REG0x34 : 0x8120
    Dec 14 08:21:09 beaglebone kernel: bq257xx-charger 1-0009: REG0x35 : 0xe07f
    Dec 14 08:21:09 beaglebone kernel: bq257xx-charger 1-0009: REG0x20 : 0x8400
    Dec 14 08:21:09 beaglebone kernel: bq257xx-charger 1-0009: REG0x21 : 0xa880
    Dec 14 08:21:09 beaglebone kernel: bq257xx-charger 1-0009: REG0x22 : 0xa00
    Dec 14 08:21:09 beaglebone kernel: bq257xx-charger 1-0009: REG0x23 : 0x1d00
    Dec 14 08:21:09 beaglebone kernel: bq257xx-charger 1-0009: REG0x24 : 0x0
    Dec 14 08:21:09 beaglebone kernel: bq257xx-charger 1-0009: REG0x25 : 0x0
    Dec 14 08:21:09 beaglebone kernel: bq257xx-charger 1-0009: REG0x26 : 0x3c3d
    Dec 14 08:21:09 beaglebone kernel: bq257xx-charger 1-0009: REG0x3b : 0x744
    Dec 14 08:21:09 beaglebone kernel: bq257xx-charger 1-0009: REG0x3c : 0x1400
    Dec 14 08:21:09 beaglebone kernel: bq257xx-charger 1-0009: REG0x3d : 0x380
    Dec 14 08:21:09 beaglebone kernel: bq257xx-charger 1-0009: REG0x3e : 0x1400
    Dec 14 08:21:09 beaglebone kernel: bq257xx-charger 1-0009: REG0x3f : 0x4100
    Dec 14 08:21:09 beaglebone kernel: bq257xx-charger 1-0009: REG0xfe : 0x40
    Dec 14 08:21:09 beaglebone kernel: bq257xx-charger 1-0009: REG0xff : 0x89

    Is there something wrong with this? Could Adc enabling during device initialization be interfering with charge regulation?

    Thank you,

    Konstantin

  • Hi Konstantin,

    If I understand correctly, you were able to make 3A charging. I suggest you use this as a starting point, measure the actual input voltage seen by charger, then set VDMP slight lower than measured value, gradually increase ICHG to test if it triggers VDPM. repeat until you find your target VDMP value. 

    Set up a VDMP higher than the "actual" input voltage will cause charging stop.

    ADC doesn't matter in this case.

    Best Regards,

    Linhong

  • forgot to mention, according to your datalog, Reg 0x21, you were in PP_VDPM.

    To avoid this, you want to start from a known working condition, then change incrementally, as described in my previous post.

    Best Regards,

    Linhong

  • Hi Linhong,

    After leaving the charger connected overnight, it seems to have started charging at some point. Still have the pp_vdpm state set, but at least it's charging. It also starts charging relatively quickly after disconnecting and reconnecting:


    Dec 15 01:26:39 beaglebone kernel: bq257xx-charger 1-0009: REG0xff : 0x89
    Dec 15 01:26:39 beaglebone kernel: bq257xx-charger 1-0009: REG0xfe : 0x40
    Dec 15 01:26:39 beaglebone kernel: bq257xx-charger 1-0009: REG0x3f : 0x4100
    Dec 15 01:26:39 beaglebone kernel: bq257xx-charger 1-0009: REG0x3e : 0x1400
    Dec 15 01:26:39 beaglebone kernel: bq257xx-charger 1-0009: REG0x3d : 0x380
    Dec 15 01:26:39 beaglebone kernel: bq257xx-charger 1-0009: REG0x3c : 0x1400
    Dec 15 01:26:39 beaglebone kernel: bq257xx-charger 1-0009: REG0x3b : 0x744
    Dec 15 01:26:39 beaglebone kernel: bq257xx-charger 1-0009: REG0x26 : 0x5353
    Dec 15 01:26:39 beaglebone kernel: bq257xx-charger 1-0009: REG0x25 : 0x1c00
    Dec 15 01:26:39 beaglebone kernel: bq257xx-charger 1-0009: REG0x24 : 0x500
    Dec 15 01:26:39 beaglebone kernel: bq257xx-charger 1-0009: REG0x23 : 0xd00
    Dec 15 01:26:39 beaglebone kernel: bq257xx-charger 1-0009: REG0x22 : 0x4100
    Dec 15 01:26:39 beaglebone kernel: bq257xx-charger 1-0009: REG0x21 : 0xa880
    Dec 15 01:26:39 beaglebone kernel: bq257xx-charger 1-0009: REG0x20 : 0x9400
    Dec 15 01:26:39 beaglebone kernel: bq257xx-charger 1-0009: REG0x35 : 0xc07f
    Dec 15 01:26:39 beaglebone kernel: bq257xx-charger 1-0009: REG0x34 : 0x8120
    Dec 15 01:26:39 beaglebone kernel: bq257xx-charger 1-0009: REG0x33 : 0x4a65
    Dec 15 01:26:39 beaglebone kernel: bq257xx-charger 1-0009: REG0x32 : 0x30
    Dec 15 01:26:39 beaglebone kernel: bq257xx-charger 1-0009: REG0x31 : 0x10b7
    Dec 15 01:26:39 beaglebone kernel: bq257xx-charger 1-0009: REG0x30 : 0x210
    Dec 15 01:26:39 beaglebone kernel: bq257xx-charger 1-0009: REG0x15 : 0x20d0
    Dec 15 01:26:39 beaglebone kernel: bq257xx-charger 1-0009: REG0x14 : 0x12c0
    Dec 15 01:26:39 beaglebone kernel: bq257xx-charger 1-0009: REG0x12 : 0x70e

    Alright, my current understanding for what was happening is: 

    Upon vbus connection, the charger resets it's vindpm to 1.28v below vbus, Later I detect vbis I set a higher vindpm. Then when I write in a charge rate, it shoots past the limit and hits the vdpm limit initializing some sort of slow charge detection. 

    Is this a likely scenario? 

    Also, If the pp_vdpm state is set, what is a good way to reset it?

    Best,

    Konstantin

  • Hi Konstantin,

    According to Reg0x20, now you are officially in VINDPM. :-)

    What you described makes sense, which means you are too close to your input source(adapter etc) limit(voltage drops too much with heavy load), or you have too much line resistance in cable. You may look if anything can be improved. On the other hand, you need to lower your VINDPM. You should be able to back to charging once condition is removed. no need to reset.

    Best Regards,

    Linhong

  • Yea, but it seems the stat_vdpm bit is still set there. 

    It does seem that the charge very slowly starts ramping up over a period of at least a couple of hours.

    At some point the In_vindpm bit start flickering on-off and eventually stays on.

    But so far I have not found a way to clear that stat_vdpm bit.

    So really I am curious as to what are the ways that Stat_vdpm is cleared? Also, Is it safe to ignore that bit? It seems like it does not really affect much, especially since I have not seen it set to 0,even at startup.

    Also, Is it expected for it to take hours to achieve charge regulation? If not, what could be causing that?

    Thank you!

  • Hi Konstantin,

    No. Charge doesn't need hours to recover. Something else must have kicked in. Maybe fusb302 ??

    To better debug this, I recommend remove all other components in the circuit, to isolate the problems. Then add back in piece by piece.

    Best Regards,

    Linhong 

  • Hmm, Fusb302 is actually not really part of the system. it is connected to the vbus line, but it has no control over it. It is also not enabled in my tests.

    In  the design the Vin from a usb port is connected directly through the reference design with the source current limiting jumpers selected. 

    Would you be able to say in what situations Stat_vdpm is cleared?

    Best,

    Konstantin

  • Hi Konstantin,

    To make VINDPM out of your way, you can set VDPM to minimum and charge current to a smaller value(<< adapter capacity). Then you will never trigger VINDPM.

    Best Regards,

    Linhong

  • Hi Linhong,

    So there is no way to reset the stat_vdpm bit without power-cycling? 

    Best,

    Konstantin

  • Hi Konstantin,

    You can set FORCE_LATCHOFF =1 and reset the bit. 

    Best Regards,

    Linhong

  • Haha Thank you for all the help!

    I think we figured it out. The input protection circuitry was not fully turning on at 5v on the input. Bypassing the protection circuity worked fantastically. It doesn't trip the usb port reset either.

    It's working great now! no more permanent stat_vdpm bit set! woo!

    Thank you,

    Konstantin