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: MCU HOST programming via I2C

Part Number: TPS25750
Other Parts Discussed in Thread: USB-PD-CHG-EVM-01, , EV2400

Hi TI, 

We are creating a USB-C charger based on the USB-PD-CHG-EVM-01, however, I want to program the TPS25750S via I2C from my host MCU, not using EEPROM.

So far the GUI only creates a binary file with no reference to I2C registers. 

I have read slvuc05 and I understand that the TPS25750 is programmed from a "patch bundle". However, I don't feel like you have offered enough information on how to do this and how to use the .bin file to program the TPS25750 from an MCU. 

Is it literally a case of putting it in patch mode and firing the whole .bin sequence across? There is a lot of 0xFF and 0x00 wasted space in the .bin file. 

I see other customers have been asking similar questions so perhaps you need to offer more software support here in the form of documentation and applications? 

Thank you for the help


  • David,

    I am actually working on a FAQ post to describe this process in more detail and will be posting it soon.  We are also revising the TRM early this summer to better describe this process.

    I am targeting completion on this FAQ by early next week.



  • Thanks for the reply Chuck

    I was hoping to start working on prototyping this next week so that would be good timing if you can get something up. 

    I look forward to reading it.. . hopefully the process is fairly simple and doesn't involve 



  • David,

    The process is described in the  TPS25750 Host Interface Technical Reference Manual, but I am attempting to document the process in a more detailed fashion because several users have struggled with working from the provided documentation.

  • David,

    We are still looking at this issue.  I apologize for the long delay

  • Ok thanks for the update. 

    While I wait, I will try to evaluate the part using an EEPROM as suggested. My issue now is the lack of the AARDVARK I2C programmer. I already have a TI EV2400 USB-I2C adapter. Will this work? 

    Do I need to use exactly the same EEPROM as in the EVM for the GUI code to work? 

    Thank you for the help. 


  • Hi David,

    Chuck is out of office until Wednesday. He will follow up with you later this week.



  • Hi

    Can I get an update please? I'd really like some further support and answers to the above questions. 

    Currently unable to patch via the host as the process isn't clear enough. I can't flash an EEPROM because I don't have an AARDVARK I2C adapter and refuse to pay £300 for one as I already have the TI EV2400 which does the same thing?



  • Dave,

    I need to look into how to do an eeprom update directly with the  TI EV2400.  It may be possible to use it.  The full flash binary file is stored in intel hex format that is compatible with almost any method of eeprom flashing.


  • Dave,

    I have followed up with our internal team on the EV2400 and it does not support EEPROM programming.

    I have thought of an alternative if you have a TPS25750 EVM if you still have one on hand.

    You can remove R12, R13, or R14 (any one will do)  and populate it or another resistor into R7, R8, or R9.  This will change the address of the on board eeprom.

    You can then jumper wires from J8 I2Cm_SCL, I2Cm_SDA, and GND onto your 3 pin header and use the TPS25750 GUI programming process just like the EVM.

    You will need to restore the resistor settings if you want to use the EVM as intended after this process.

  • Thanks Chuck. I've gone out and bought an Aardvark programmer. I figured this was the easiest thing to do rather than wasting more time. I don't have the EVM. 


  • David,

    Please let me know if you have any issues with the Aardvark.

  • Hi Chuck. 

    I have programmed with the Aardvark and the TSP25750 seems to be working. However, it is now holding the I2Cs lines low! So this throws the rest of my design out as other devices using the I2C bus can't operate. 

    Any idea whats going on? Is there something in the gui settings I need to change? It's all really strange. 


  • David,

    Which I2C port is being held low?  The I2C lines should only be held low during a brief period of time where data stretching is required.

    Can you provide me with an I2C capture and description what what pins are at issue.  This way I can look at so that I can attempt to determine what is going on?

  • The I2Cs port - pins 8 and 9. It wasn't doing this until I installed the EEPROM and allowed it to load up the GUI code. Now it holds them low from power on. 

    I'll try the EVM-01 board I have here... see if it does the same. 

  • David,

    The master I2C on pins 8 and 9 should have traffic to the EEPROM when the board is first powered up.  When this process completes, both pins should return to 3.3V which is the non-driven state of I2C.

    The device that is causing the pins to be low could be either the EEPROM or the TPS25750.  The best way to figure out which on it is would be for me to look at a capture of the I2C bus to see if the traffic makes sense.



  • Hi Chuck. Are you sure? Pins 8 and 9 are the I2Cs port which is the slave I2C port connected to the host microcontroller. The EEPROM is connected to pins 15 and 16 which is the I2Cm port as per the EVM. The I2Cm port is working as expected and loading the EEPROM which takes around 500ms. Then the I2Cm pins sit at 3.3V. However, the I2Cs pins are at 0v from power on. 

    As I said, I'll try the EVM next and see if that behaves the same. 

  • I just tested with the EVM and the TPS25750D and it does not hold the I2Cs lines low. However, I am using the TPS25750S and a slightly different version of the EEPROM code. 

    I just tried adding an extra 2.2k resistor between 3.3V ldo and I2Cs_SDA and it's still held low as soon as power is applied. 

    Any ideas?

  • I just realised that I had the TPS25750 in "negotiate high voltage mode" from previously when I wasn't using the EEPROM. I have changed it to the safemode #1 but it's still holding the lines low. Could I have damaged the IC?

  • David,

    As long as your power tree can tolerate the 20V that can happen from the PDO negotiation, you board will be fine.  The LDO that powers the EEPROM is safe to any type C power.

    Can you send me a scope capture of the VBUS and PPHV lines, this will let me see what is happening on the bus.  You should stay at 5V on both lines during boot and then negotiate up to whatever voltage you have configured.

  • Here is the VBUS and I2Cm SDA lines.... as you can see.. the TPS25750 boots up correctly from the EEPROM using the I2Cm, then configures the USB-C power source to switch to 15V. All good. 

    However, the other I2Cs interface to the microcontroller is useless and being held at 0V. So I can't communicate to the TPS25750 or the BQ controller. 

    Do you understand?

  • This is the VBUS (yellow) and PPHV (green)

    This is VBUS and I2Cs SDA

    As you can see, before power is applied, the I2Cs SDA line was floating with some leftover charge. When power was applied, it was pulled low by the TPS25750. This I2Cs line is my problem I can't figure out. 

  • Just to remove any confusion.. here is my layout. I2Cs_SDA is highlighted. This is normally pulled up to 3.3V via the connector on the mating PCB. However, I have tried removing this charging board completely and pulling it to LDO_3V3 via 2.2k and it's the same result 

    I've replaced the IC as well... the same result. And tried several versions of the boot patch. 

    I'm stumped. 

  • R20 and R21 are not populated

  • David,

    Is the configuration in SafeMode or in AlwaysEnablePPHV?

    IS your board based on the 750D or the 750S?  If it is the 750S, then it is best to see the output of the power switch.  I am trying to see if the switch is closed as part of the contract.

    To boot from an EEPROM, you need to be in SafeMode.  It appears that a 15V contract is being negotiated before the device has booted.

  • It WAS in alwaysenablePPHV but now I changed it to safemode - this didn't change anything.

    My design is based on the 750S with external switch as you can tell from the layout. You can see from the second waveform that the switch is open while it loads the EEPROM patch then closes to connect VBUS to PPHV. 

  • Hi Chuck. I really need your support with this, please. I'm losing confidence in this part and need to confirm whether I am going to use it or not very soon. 

  • David,

    I am addressing this thread with you through private conversation.  I will update the thread with our resolution once we achieve it.