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.

TPS25750: Explicitly enable sink path in patch mode

Part Number: TPS25750
Other Parts Discussed in Thread: BQ25798

Tool/software:

Hi there—our design implements a TPS25750 with a BQ25798, both of which are controlled by an EC. The ADCINx pins of the TPS25750 are strapped such that AlwaysEnableSink mode is used.

To ensure our design can boot reliably, the EC waits for the battery voltage (Vbat) to exceed a minimum voltage (Vmin) before proceeding too far in the boot process. If Vbat is below Vmin, the EC waits for the battery to charge until Vbat exceeds Vmin. This procedure occurs very early in the boot process, well before any drivers are loaded and the TPS25750 is patched.

This implementation works reliably in the case of dead-battery recovery, as the PPHV switch of the TPS25750 is closed automatically, allowing the battery to charge. During factory assembly, however, the battery is installed first, and the PPHV switch is open. In this case, the battery cannot charge until the TPS25750 is patched.

Under normal circumstances, Vbat is well above Vmin at the time the battery is installed, and the device can boot immediately. If Vbat is below Vmin, however, this protection loop is entered, but never exits because Vbat cannot increase beyond Vmin. It seems there are three workarounds for this problem:

  1. Move the TPS25750 patching procedure into the bootloader, before Vbat is checked.
  2. Add a supplemental EEPROM such that the TPS25750 patching procedure is no longer necessary.
  3. Ignore Vbat if the PP3switch field of the POWER_PATH_STATUS register is not equal to 2'b11.

Options (1) and (2) are massive undertakings for us, and not feasible at this time. Option (3) introduces additional complexity and is not preferred. What we would prefer instead is a means to explicitly close the PPHV switch while the TPS25750 operates in patch mode, but the dead battery flag is not set.

Is there any 4CC command or hidden register that can be used for this purpose, perhaps as part of BIST? In case I can clarify my question or application, please let me know.

  • Hi Jeff, 

    I have a couple follow up questions to help clarify the question:

    This implementation works reliably in the case of dead-battery recovery, as the PPHV switch of the TPS25750 is closed automatically, allowing the battery to charge. During factory assembly, however, the battery is installed first, and the PPHV switch is open. In this case, the battery cannot charge until the TPS25750 is patched.

    Can you elaborate with why the battery cannot be charge in this scenario? You previously mentioned the ADCINx pin strapping are to AlwaysEnableSink which TPS25750 will enable the sink path even without a patch loaded (PPHV is closed/enabled). How does the battery installation effect the behavior of TPS25750 enabling its sink path? 

    Options (1) and (2) are massive undertakings for us, and not feasible at this time. Option (3) introduces additional complexity and is not preferred. What we would prefer instead is a means to explicitly close the PPHV switch while the TPS25750 operates in patch mode, but the dead battery flag is not set.

    My understanding here is TPS25750 is powered on (VIN_3V3 is present) but is operating in patch mode with no configuration loaded, is that correct? Since TPS25750 is set to AlwaysEnableSink the PPHV switch will close automatically once a source is detected. By "explicitly close the PPHV switch" are you looking for a method for the external microcontroller to manually enable/disable the PPHV switch? If so is there a specific reason as to why this is needed and not just let the PD automatically enable the switch to allow charge to the BQ/battery? 

    Let me know if you have any follow up questions or clarifications! 

    Thanks and Regards,

    Raymond Lin

  • Hi Raymond—thank you for your prompt reply; I continue to be grateful for your support. Please find my answers as follows:

    Can you elaborate with why the battery cannot be charge in this scenario? You previously mentioned the ADCINx pin strapping are to AlwaysEnableSink which TPS25750 will enable the sink path even without a patch loaded (PPHV is closed/enabled). How does the battery installation effect the behavior of TPS25750 enabling its sink path? 

    This is because AlwaysEnableSink mode applies only to dead-battery operation, during which VBUS is applied before VIN_3V3. When the battery is installed, however, VIN_3V3 is the first supply presented to the TPS25750.

    When VIN_3V3 is applied before VBUS, the TPS25750 simply boots into patch mode with no additional functionality, and the PPHV switch remains open. This matches my interpretation of the datasheet, as well as the feedback from various other E2E threads.

    My understanding here is TPS25750 is powered on (VIN_3V3 is present) but is operating in patch mode with no configuration loaded, is that correct? Since TPS25750 is set to AlwaysEnableSink the PPHV switch will close automatically once a source is detected. By "explicitly close the PPHV switch" are you looking for a method for the external microcontroller to manually enable/disable the PPHV switch? If so is there a specific reason as to why this is needed and not just let the PD automatically enable the switch to allow charge to the BQ/battery? 

    Your understanding is correct, with the exception that the PPHV switch closes automatically—this is true only if VBUS is applied before VIN_3V3, as would be the case during dead-battery recovery in the field.

    If VIN_3V3 is applied before VBUS, as would be the case during factory assembly, the PPHV switch remains open. In that case, there is no conduction path through the TPS25750, and the battery cannot charge until the TPS25750 is patched.

    As such, we're looking for a means to manually control the PPHV switch. Adding simple register writes to our second-stage bootloader is relatively painless, but moving the entire patching sequence from the kernel introduces its own set of challenges and isn't practical for us at this stage.

    Stated another way—it would be handy for AlwaysEnableSink mode to be available regardless of the order in which VBUS and VIN_3V3 are applied. Maybe some internal registers are available for ATE purposes?

    Thanks again for your continued support—in case I can provide any additional information, please let me know.

  • Hi Jeff, 

    Thank you for the clarification, unfortunately as you mentioned if TPS25750 doesn't boot from Dead Battery mode (VBUS is present before VIN_3V3) then the AlwaysEnableSink mode does not apply. When TPS25750 is in PTCH mode (regardless of the DB flag), the registers on the PD are not accessible since it doesn't have a valid configuration loaded. 

    Is it possible to use the TPS25750 IRQ pin to indicate to the EC that the PD is waiting for a patch? I think this would be the quickest way for the EC to determine if it needs to load a patch when installing the battery. 

    Thanks and Regards,
    Raymond Lin

  • Hi Raymond—thanks again for your continued support. We can easily detect whether the TPS25750 idles in patch mode from our second-stage bootloader, but that information is not actionable at that stage, because we are trying to avoid moving the TPS25750 patching sequence into this part of the boot sequence.

    Just to double confirm—are there truly no writeable registers from patch mode? I confirmed that the read-only POWER_PATH_STATUS register (0x26) is at least available:

    0x0d: 0xf8 0x19 0x00 0x00
    0x0f: 0x00 0x05 0x09 0xf5
    0x14: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x02
    0x16: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x02
    0x18: 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x02
    0x26: 0x00 0x00 0x00 0x00 0x00
    0x2d: 0x30 0x03 0x60 0x02 0xa1

    What we're ultimately hoping for is a writeable version of this register (internal or otherwise). If this functionality indeed does not exist, then I think we'll adopt option (3), which is to forgo checking Vbat against Vmin if POWER_PATH_STATUS is zero, then "limp" into the kernel at which time the TPS25750 is patched.

    If the battery dies before this point, the TPS25750 will boot into dead battery mode during the next restart anyway, so this workaround is probably OK after all.

  • Hi Jeff, 

    Unfortunately there are no configurable register/bitfield when TPS25750 is in "PTCH" mode. Typically in most use cases once the PD is powered on (either through VBUS or VIN_3V3) the system EC will load the config as soon as possible. 

    Let me know if you have any further questions or concerns! 

    Thanks and Regards,

    Raymond Lin

  • Hi Raymond—thank you for checking; acknowledged on all counts. I will reach out in case I have any additional questions.