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.

TPS65981EVM: How can we startup a switch-off smartphone (S9) by using TPS95981 or TPS95987?

Part Number: TPS65981EVM
Other Parts Discussed in Thread: TPS65987, TPS65981, TPS65987D

Hi,

our use case: We want to startup a switched-off smartphone (Galaxy S9) using TPS65981 or TPS65987.

The S9 starts up in battery charge mode when 5V is connected to VBUS as this is the simplest USB 5V charging method.

So how can we have the TPS65981 / 65987 to switch PP_HV or PP_5V to the VBUS when no cable is detected?

Or is it alternatively possible to startup a smartphone also by applying 5V via PP_CABLE to CC1/2?

Thanks in advance

BR Roland

  • Hello Roland,

    You do not have to do anything special in this condition. The burden of starting up in a dead battery condition like this falls on the S9 (sink device), not the TPS65987D (source charger). Any base configuration with either the TPS65981 or TPS65987D should support charging when connected to a dead S9 smartphone.

    Hope this answers your question! If so, please click THIS RESOLVED MY ISSUE

  • Hi Adam,

    thanks for the quick answer!

    In the meantime we did a lot of testing with the TPS65987 Power Duo EVM (with the source part of the EVM).

    Intended target application: A docking station with an integrated hub and other USB peripherals. The docking station can be self-powered or powered by a Smartphone (at least S9 or newer models). The USB type C cable shall not needed to be disconnected/reconnected when the powering role changes.

    Test use case: 

    S9 is off and connected to the TPS95987 Power Duo EVM (Source Side). The firmware is the Default EVM firmware which has beem flashed using the Application Customization Tool.

    Observations:

    It takes typically several power cycles of the EVM until the S9 starts charging. It seems to be random whether charging starts or not after powering up the EVM.

    In case charging does not start, the Status looks like that:

    In case charging starts successfully after powering up the EVM, the status is as following:

    Any ideas why the S9 charging does not start always after powering up the EVM?

    Further test use case: 

    While the S9 gets charged by the EVM (S9 is a PD compliant sink, EVM is PD source), the EVM power supply gets disconnected.

    Observations:

    After EVM reboot due to the short interruption of VBUS, the EVM switches to Legacy Sink Mode and gets powered by the S9.

    Then the power supply is reconnected to the EVM and the dead battery flag using the appropriate command is cleared.

    The EVM stayes in Legacy Sink Mode which seems to be because the S9 does not communicating any more in PD mode. Ok, this seems to by related to the S9.

    Manually disconnecting and reconnecting the USB type C plug after a while does not solve the problem, because the EVM seems to stay forever in Legacy Sink Mode unless the EVM is also power cycled.

    Questions:

    a) How can we put the TPS65987 back to USB PD compliant Source Role without power cycling the EVM?

    b) Is there a way to "virtually" disconnect the USB type C cable by an TPS65987 command and reconnect the cable "virtually" later, so the S9 and the TPS65987 can restart the PD negotiating cycle from the very beginning?

    Thanks again in advance

    Roland

  • Hello Roland

    Thanks for the in depth description. I believe both questions you asked at the end of your post can be solved by the same answer.

    You can issue "Gaid" which is the 4CC command equivalent to a soft reset. I believe a soft reset is what you are looking for based on your description. The technical reference manual will help explain how to issue this command. Here is the description of a soft reset from the Type-C PD specification.

    "A Soft_Reset Message is used to recover from Protocol Layer errors; putting the Message counters to a known state in order to regain Message synchronization. The Soft_Reset Message has no effect on the Source or Sink; that is the previously negotiated direction. Voltage and current remain unchanged. Modal Operation is unaffected by Soft Reset. However after a Soft Reset has completed, an Explicit Contract negotiation occurs, in order to re-establish PD Communication and to bring state operation for both Port Partners back to either the PE_SNK_Ready or PE_SRC_Ready states as appropriate (see Section 8.3.3.4)."

    Let me know if this helps you or not.
  • Hi Adam,

    thanks for your answer.

    I've testet the "Warm Reboot" aka Gaid command. After executing the command, there was no response displayed in the Application Customization Tool and the state of the TPS65987 does not change (it is still acting like a legacy sink). Maybe the Gaid command has no effect because of the legacy sink mode.

    As descibed in an earlier post, the problem arises when the power of the EVM get disconncected and the TPS65981 should change to PD compliant sink after VBUS is powered by the S9 phone (there is a short interruption of power after disconnecting the EVM power supply until the S9 delivers VBUS power).

    Testing exactly the same use cases with the TPS65981 EVM worked, so the S9 phone seems to behave according to the USB PD Specs.

    Below you'll find the PD State Maschine Trace output of the TPS95987 PowerDup EVM after twice applying Gaid.

    Port 1 Module 31 0x1ff = UNKNOWN

    Port 1 Module 31 0x1ff = UNKNOWN

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 PD 0x1 = PEState_CableTypeDetect

    Port 0 Type-C 0x66 = COMMON_STATE_UNATTACHED_SNK

    Port 1 PD 0x1 = PEState_CableTypeDetect

    Port 1 Type-C 0x0 = SRC_STATE_DISABLED

    Port 0 Type-C 0x65 = COMMON_STATE_ATTACHWAIT_SNK

    Port 0 Type-C 0x61 = COMMON_STATE_ATTACHED_SNK

    Port 0 Module 1 0xd = UNKNOWN

    Port 0 PD 0x2 = PEState_LaunchPolicyEngine

    Port 0 PD 0x21 = PEState_Sink_Startup

    Port 0 Module 1 0x4 = UNKNOWN

    Port 0 VBUS 0x90 = VBUSState_MON_HI

    Port 0 PD 0x22 = PEState_Sink_Discovery

    Port 0 PD 0xbd = PEState_Legacy

    Best regards

      Roland

  • Hi Roland,

    I believe I must have glanced over this from the original description

    "As described in an earlier post, the problem arises when the power of the EVM get disconnected and the TPS65981 should change to PD compliant sink after VBUS is powered by the S9 phone (there is a short interruption of power after disconnecting the EVM power supply until the S9 delivers VBUS power)."

    Are you using the default project file that is loaded on the TPS65987D Power Duo EVM? If so, then that may explain the failure as the source board on the power duo EVM is not programmed to ever act as a sink device. If you would like for this functionality, then you will need to re-flash the board with a new project file, but you will also lose the functionality of the buttons if this is done.

    If you are not using the default template but instead one you have programmed yourself, could you share that with me so that I may take a look?