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.

TPS65950 LDO short circuit detection process failure

Other Parts Discussed in Thread: TPS65950, DM3725

Hi All,

We are working with TI-DM3725 and TPS65950. We are facing an issue LDO short circuit detection.

 

We are trying to consume power with cutting the LDOs (3V1, 1V5, 1V8) when the device enters the suspend mode and make it active when the device resumes.

We have tried with short circuiting the LDOs using SC_DETECT register checking with IT_CHECK_CFG register’s SC_STATUS bit as described in the Tech reference manual (page 317).

 

But when implemented, the SC_STATUS bit isn't getting set post short circuiting the LDOs,

but when checking the SC_DETECT register, the short circuitry bits for LDOs have been set.

 

below is the code for LDO disable,

 

int tps69590_DisableLDO(int LDO)

                {

                unsigned char LDORegValue;

                unsigned char RegValue;

               

                OSAL_TPS_I2C_Read_U8(MCCI_USB_ADDR_GROUP_4b,

                                                                SC_DETECT2,

                                                                &LDORegValue

                                                                );

                switch (LDO)

                                {

                                case USB1V8:

                                                LDORegValue |= SC_VUSB1V8;

                                break;

                                case USB1V5:

                                                LDORegValue |= SC_VUSB1V5;

                                break;

                                case USB3V1:

                                                LDORegValue |= SC_VUSB3V1;

                                break;

                                }

 

                RegValue = 0;

                /* Clearing Short Circuiting STATUS bit before performing Short circuitry*/

                OSAL_TPS_I2C_Read_U8(MCCI_USB_ADDR_GROUP_4b,

                                                                IT_CHECK_CFG,

                                                                &RegValue

                                                                );

                RegValue &= ~SC_STATUS;

 

                OSAL_TPS_I2C_Write_U8(MCCI_USB_ADDR_GROUP_4b,

                                                                IT_CHECK_CFG,

                                                                RegValue

                                                                );

 

                /* Disabling the LDO by Short Circuiting */

                OSAL_TPS_I2C_Write_U8(MCCI_USB_ADDR_GROUP_4b,

                                                                SC_DETECT2,

                                                                LDORegValue

                                                                );

 

                /* Check with SC_STATUS bit of IT_CHECK_CFG reg */

                OSAL_TPS_I2C_Read_U8(MCCI_USB_ADDR_GROUP_4b,

                                                                IT_CHECK_CFG,

                                                                &RegValue

                                                                );

 

                if ((RegValue & SC_STATUS) == 1)

                                {

                                OSAL_TPS_I2C_Read_U8(MCCI_USB_ADDR_GROUP_4b,

                                                                                SC_DETECT2,

                                                                                &LDORegValue

                                                                                );

                                }

                else

                                {

                                return 1;

                                }

 

                printf ("\nSC_DETECT reg - %s (0x%x)\n",

                                (LDO == 1) ? "USB1V8" : (LDO == 2) ? "USB1V5" : "USB3V1",

                                LDORegValue

                                );

 

                return 0;

                }

 

                printf ("\nSC_DETECT reg - %s (0x%x)\n",

                                (LDO == 1) ? "USB1V8" : (LDO == 2) ? "USB1V5" : "USB3V1",

                                LDORegValue

                                );

 

                return 0;

                }

please check and let me know if there is any problem in the code flow or is there any workaround for this issue.

Thanks!

  • Hi Mukesh,

    Details for short circuit protection begin on page 420 of the TRM, which mentions that short circuit detection is disabled by default. Has the SC_CONFIG[7] ENABLE bit been set?
  • Hi Richard,

    Yes, I have read that and also have set this SC_CONFIG[7] ENABLE bit.

    Sorry, It has been set in another place in the same code, where I have configured the LDOs.

    Apart from this bit anything else needed to be configured for LDOs short circuit detection?

  • Hi All,

    Below are some more details on query:

    1. We are able to achieve ~6mA current consumption in device retention state.

    2.  And same need to achieve when USB cable is connected and it is in suspend state.

    3. For this we need consider below points:

                 a. 60MHz clock which is running and given to DM3725 from TPS should cutoff.

                 b. Switch off all regulators, for USB 3V1, 1V5, 1V8 need to switch off.

    So basically we are trying to switch off these regulators when USB goes in suspend state and for that above code is written.

    below are some queries:

    1. Is it possible to switch off 60MHz clock when USB goes in suspend state?

    2. Is it possible to disable all USB based regulators ( 3V1, 1V5, 1V8) when USB bus goes in suspend state?

    3. These regulators also required for MADC temperature channel calculation which is periodically need to read so I think we need to select all USB regulator source is VBAT instead of VBUS .

    Is it possible with this configuration to achieve ~6mA current(or less than 10mA) in USB suspend state when device goes in suspend/retention  state.

    Please provide your comments and help us to solve this issue.

    Thanks,

    Raviraj

     

  • Hi Raviraj,

    I'm looking into this but am not to familiar with the suspend mode on this device. Section 15.4.3 of the TRM leads me to believe that both the clock and PHY LDOs can be disabled but I'm not sure how this integrates with your current flow.

    As for the short circuit, I don't think it is asserted through software, are you actually shorting VUSB3V1 to GND?
  • Hi Richard,

    We have tried this clock and PHY LDOs disabling part for suspend mode, but we could not achieve it fully.

    Regarding Clock, we have cleared the SUSPENDM bit of FUNC_CTRL register as described in the section 15.4.3 of the TRM, post to this action we could see power drop of ~30 mA in power supply drawn by device. But resume isn’t happening for this case. When tried to give resume from host, device is appearing as “Unknown device” in the device manager, seems the USB module has been getting to the lowest power mode from where it couldn’t be resumed.

    Also we couldn’t see FUNC_CTRL[6].SUSPENDM bit getting cleared after we try clearing it, although we could see the above mentioned behaviors from device.

    Regarding LDOs, as described in the section 6.4.4 of TRM we are trying to make it sleep by short circuiting it using register SC_DETECT. As per TRM, we need to check the SC_DETECT register for short circuiting once IT_CHECK_CFG[3]SC_STATUS bit value is 1. After short circuiting the LDOs the SC_STATUS bit is not getting set, but In SC_DETECT register the values which I wrote is getting set. We have also enabled the SC_CONFIG.ENABLE bit while initializing the TPS65950 unit. We have done the necessary things needed for short circuiting. Please let us know if anything more has to be configured or followed to achieve LDOs short circuiting.

     

    You have mentioned that “I don't think it is asserted through software, are you actually shorting VUSB3V1 to GND?

    We have followed the Short-Circuit Protection in this case, it describes that LDOs are put in sleep mode when short circuiting is enabled & detected for resp. LDOs. But it couldn’t be achieve fully since the status bit is not getting set which I have mentioned above.

    You mean short circuiting couldn’t be achieved through software?

    Please help us providing your comments on this.

    Thanks,

    Mukesh

  • Hi Richard,

    Can you please provide your inputs on this, we are now blocked and tried all posibilities but no luck.

    Regards,

    Raviraj

  • Hi Raviraj,

    Using SUSPENDM makes register access impossible, which is likely why you don't see this bit getting cleared.

    As far as the LDOs short circuit, that feature is for software to recognize a physical over-current event on the output, which will shut down the LDO if a short occurs, since it does not have the capability to switch to a current-limited sleep mode.
  • Thanks Richard for comments.

    Can you please comment on below queries:

    USB regulators also required for MADC temperature channel calculation which is periodically need to read so I think we need to select all USB regulator source is VBAT instead of VBUS. 

    So with this VABT setting :

    1. Is it possible to switch off 60MHz clock when USB goes in suspend state? If yes how we can do because we are not able to do this.

    2. Is it possible to disable all USB based regulators ( 3V1, 1V5, 1V8) when USB bus goes in suspend state? If yes how we can do, because when we try to disable regulators USB ports are disconnecting.

    3. Is it possible with this configuration to achieve total device current ~6mA (or less than 10mA) in USB suspend state when device goes in suspend/retention  state.

    Thanks,

    Raviraj

  • Hi Raviraj,

    Apologies for the delay here, I understand that the intent is to save additional current consumption while in suspend mode, but I have no indication that disabling additional internal blocks on this device is a validated solution. I don’t know how these changes will affect operation with the OMAP device.

     

    Q: Is it possible to switch off 60MHz clock when USB goes in suspend state? If yes how we can do because we are not able to do this.  

    A: Strictly speaking to the PMIC, technically SUSPENDM should turn off the clock but will lock out access to the internal registers, which may disrupt suspend functionality. There is a chance that PHY_CLK_CTRL[2] CLOCKGATING_EN may be the best case for this type of scenario, but this will not turn off the clock completely and I'm not sure how it will affect device suspend functionality. 

     

    Q: Is it possible to disable all USB based regulators ( 3V1, 1V5, 1V8) when USB bus goes in suspend state? If yes how we can do, because when we try to disable regulators USB ports are disconnecting.

    A: Same as above, technically it should be possible to disable these regulators, but as you are seeing it may disrupt suspend functionality so I cannot say that this is recommended.

     

    Q: Is it possible with this configuration to achieve total device current ~6mA (or less than 10mA) in USB suspend state when device goes in suspend/retention  state.

    A: This is not a validated solution for suspend/resume so I cannot say what current consumption levels will be achieved. At this point this is solely an experimental endeavor and performance may vary from system to system.

  • Thanks for comments.

    How we can resume USB after writing 0 to the FUNC_CTRL[6] SUSPENDM bit, any register configuring which will enable clock once resume request receives from host.

    Regards,

    Raviraj