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.

TPS65987D: How to change the configuration on power duo board for no button press needed

Part Number: TPS65987D
Other Parts Discussed in Thread: TPS65987

Hi, I have a project that will use USB-C for charging.  The power duo EVM has been helpful to checkout the capabilities of the chip.  

For my application I'd like the TPS to auto-negotiate the PD contract which provides the most power and use that without any button presses.  I see there is an auto negotiate setting but I havne't been able to modify the existing firmware to use this new behavior.  How would I do that?

Thanks,

Chris

  • Hi Chris,

    The power duo EVM comes programmed with 4 potential configuration that the user can choose from. The default configuration only allows for 5V source capabilities while the buttons allow for a new configuration to load that allows for new source capabilities going up to 20V.

    If you would like to have the TPS65987D offer 20V without any button being pressed, then you must update the default configuration so that the source capabilities no longer allow only 5V, but allow up to 20V.

    You will need to use the application configuration tool to generate the new project file. You can watch the following video to help you get started

    https://training.ti.com/tps6598x-application-customization-gui-tool-basic-introduction 

  • I will be using a wall wart style source so the EVM source board is not really something I need to worry about.  I get that I need to use the app config tool to generate a new project file, and I've seen the video and the the exact register which needs to change still isn't obvious. 

    Does someone with a better knowledge of the TPS65987 know which register to change?

    C

  • Chris,

    You can view my response in this thread.

    You can change the source capabilities of the device 1 configuration to whatever you need, and the TPS65987D will automatically advertise this upon initial connection by default

    https://e2e.ti.com/support/interface/f/138/t/915371 

  • I'm not trying to change anything with the source.  It's the sink voltage request I'm trying to change to always take the highest power available. 

  • To configure the sink to request the maximum voltage without any button press you need to change the sink configuration using the same tool for changing the source configuration mentioned above.  It is just that you'll be changing a different register.  For sink configurations look at register 0x37 and 0x33.

    I wonder if you could get what you want by holding down the 20V button all the time from before plugging in the wall wart.  Just a hunch, I don't have a board to try it myself here.

  • Deric, thanks for the feedback!

    The overall usage of the GUI is a little confusing and I don't know if I missed something somewhere in the documentation or part of some video but I never did understand these basic questions:

    When the GUI is connected does chip act the same?  Maybe not in debug mode?  If I make changes to settings when do they take effect or get saved?  I've become somewhat familiar with lots of trial and error and having to pull the plug on all the power and comms many times to get back to a basic starting point.  Sometimes the buttons and LEDs don't do anything and other times they do.

    In any case, one general question I have that doesn't seem to be explained in the EVM docs is what really happens when you push those little buttons?

    I looked at those registers you suggested and they do seem very relevant but probably not everything needed to replicate the button push.  My general approach was to push the buttons, look at raw register values, copy down hex data, and then try to re-write those same values later after a power reset.  I am talking to the device over I2C, when the GUI isn't connected, from a controller so that general approach could be replicated later. 

    In the end, re-writing those two registers did not produce the same effect.  Perhaps there is another register needed to tell it to start sinking at those levels?

    Thanks,

    Chris

    ps- holding the button down does work, but I will need more advanced functionality than that eventually so figured it was best to dive into things a bit more.  Next on my to do list will be to tell the chip to switch to a 5V OTG power source.

  • GPIO event #61-66 are used for the button functionality.  Besides those two registers you will need to issue the 'GSrC' 4CC command.

  • I think I have a solution now.  I wrote to those 3 registers and when the chip isn't in some funky debug mode it works.  Basically, power cycle everything and have it load the stuff from SPI flash then issue these commands and it will go to the proper voltage.

    calling function: Raw Register Write

    input value: 0x4001692c4001692c4001692c0001692c0000000000000000000000000006412c0004b12c0002d12c3601905a013933

    Input Arguments

    Register Address 0x33

    Write Length 57

    Data 0x4001692c4001692c4001692c0001692c0000000000000000000000000006412c0004b12c0002d12c3601905a01

    execute status: Successful write

    return value: 0x4001692c4001692c4001692c0001692c0000000000000000000000000006412c0004b12c0002d12c3601905a01

    Data

    Confirmed Read 0x4001692c4001692c4001692c0001692c0000000000000000000000000006412c0004b12c0002d12c3601905a01

    calling function: Raw Register Write

    input value: 0x12c00000000000168c80000000000283c6f1437

    Input Arguments

    Register Address 0x37

    Write Length 20

    Data 0x12c00000000000168c80000000000283c6f

    execute status: Successful write

    return value: 0x12c00000000000168c80000000000283c6f

    Data

    Confirmed Read 0x12c00000000000168c80000000000283c6f

    calling function: Raw Register Write

    input value: 0x437253470408

    Input Arguments

    Register Address 0x8

    Write Length 4

    Data 0x43725347

    execute status: Successful write

    return value: 0x0

    Data

    Confirmed Read 0x0