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.

TPS25751: How to disable Sink Output if USB-PD Power Requirements are not met

Part Number: TPS25751
Other Parts Discussed in Thread: TPS25730

Tool/software:

I am configuring my TPS25751D as a Sink-Only USB-C power supply input for my circuit, with Dual Data Role.

My circuit requires minimum 5V, 3A (or 9V, 3A) and I want to disable the Sink Output if this requirement is not met after PD negotiation.

To achieve this I set the following settings:

I used the ADCINx inputs to configure Dead Battery Configuration to "SafeMode" (ADCIN1 = "7", ADCIN2 = "0") so that no power would be output to my circuit until Flash configuration was complete, and programmed a flash and tested.

My expectation was the following would happen:

1) Power-on would not initially power my circuit; only the TPS25751 - and this happened.

2) Flash would be read and the TPS25751 programmed - and this happened (confirmed by GPIOs behaving as configured).

3) Power would not be enabled to my circuit by the TPS25751 if a USB source incapable of 5V, 3A output was attached. - But power was enabled when connected with a lower-current 5 V-only USB-C port.

Can you help me understand why this was, and help me find my mistake?

I previously implemented this PD function successfully using the TPS25730 with its four ADCINx inputs, but unfortunately that simpler device does not support Dual Data Role function (which I also need), so I am trying to replicate the same PD functionality with the TPS25751 now.

Many thanks for your help,

Justin.
======

  • I can share a copy of my JSON file used if that helps? 

    Justin. 

    ======

  • Here is a cope trace of the power-up sequence, showing the Flash's I²C interface, along with the circuit power VBUS (pink) coming on after just under 1.25 seconds from power-on.


    Here's the JSON file for the config:

    {
      "questionnaire": {
        "device": "TPS25751",
        "toolBuildVersion": "1.0.2",
        "answers": [
          null,
          5,
          4,
          1,
          1,
          2,
          3,
          0,
          1,
          1,
          1,
          null,
          0,
          0,
          0,
          0,
          0,
          0,
          0
        ],
        "vendorId": "0000",
        "productId": "0000",
        "version": "1.0.0.2"
      },
      "configuration": {
        "data": {
          "selected_ace": [
            {
              "register": 6,
              "data": [
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0
              ]
            },
            {
              "register": 22,
              "data": [
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                3
              ]
            },
            {
              "register": 40,
              "data": [
                0,
                40,
                46,
                1,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                3
              ]
            },
            {
              "register": 41,
              "data": [
                50,
                80,
                129,
                0
              ]
            },
            {
              "register": 50,
              "data": [
                0,
                170,
                42,
                44,
                145,
                1,
                38,
                44,
                209,
                2,
                0,
                44,
                177,
                4,
                0,
                244,
                65,
                6,
                0,
                244,
                65,
                6,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0
              ]
            },
            {
              "register": 51,
              "data": [
                2,
                44,
                145,
                1,
                16,
                44,
                209,
                2,
                0,
                44,
                177,
                4,
                0,
                244,
                65,
                6,
                0,
                69,
                65,
                6,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0
              ]
            },
            {
              "register": 55,
              "data": [
                118,
                192,
                18,
                65,
                180,
                144,
                1,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0
              ]
            },
            {
              "register": 66,
              "data": [
                26,
                0,
                8,
                0
              ]
            },
            {
              "register": 92,
              "data": [
                8,
                8,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                8,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                29,
                0
              ]
            },
            {
              "register": 112,
              "data": [
                3
              ]
            },
            {
              "register": 119,
              "data": [
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                15,
                0
              ]
            },
            {
              "register": 122,
              "data": [
                0,
                0,
                0,
                0
              ]
            },
            {
              "register": 123,
              "data": [
                0,
                2,
                255,
                255,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0
              ]
            },
            {
              "register": 125,
              "data": [
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0
              ]
            },
            {
              "register": 126,
              "data": [
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0
              ]
            },
            {
              "register": 152,
              "data": [
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0,
                0
              ]
            }
          ]
        }
      }
    }

  • Hi Justin, 

    Apologies for the delayed response.

    In Autonegotiate Sink (0x37), you'll need to configure Auto Neg Capabilities Mismatch Power [61:52] to the minimum threshold required for TPS25751 to enable its sink path. For example if this field is set to 15W, TPS25751 will not enable its sink path unless the connected PD source can supply greater than 15W. 

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

    Thanks and Regards,

    Raymond Lin

  • Thank you very much Raymond, this was the piece of the puzzle I was missing.  Now I am able to create several Sink_PDOs, set a minimum power required, and the device shuts down if the power supply isn't suitable.

    One thing worth noting is the effect of the three Dead Battery Configuration options:

    1. NegotiateHighVoltage can't be used when programming the controller with an EEPROM, but the other two are useful to me:
    2. SafeMode keeps the Sink Path power off until a suitable power contract has been established.  This is great, but it leaves no way to program an unprogrammed flash in-circuit because the power will never come on.
    3. AlwaysEnableSink is very useful, because this also works with the EEPROM and, although it wasn't clear from the documentation, if a power contract is negotiated but it's not sufficient to meet the minimum requirements, the Sink Path is turned-off.  This allows the device to operate normally when adequate power is provided and to shut off if it isn't, but also allows initial in-system programming of the Flash in the factory without needing any special power connections.

    I don't yet understand the purpose of the additional limits set on the Autonegotiate Sink (0x37) / Autonegotiate Max or MinValues page, but I'll try to work those out from the Technical Reference Manual

    Many thanks for your help Raymond.

    Kind regards,

    Justin.
    ======