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.

TPS25762-Q1: Shuts down when requesting more than 13.5V

Part Number: TPS25762-Q1
Other Parts Discussed in Thread: PMP40933, PMP40934, TPS25772-Q1

Tool/software:

Hi

After some issues I got my design working. USB PD is reporting correctly to the sink and port orientations is detected.
Now I got a new issue. When requesting more than 13.5V the output just shuts of, even with no load. 

I've tried a USB tester, JOY-IT JT-UM120, to request outputs from the IC and it works beautifully until I try to get 13.6V or more.
i've also tried with a Valve Steam Deck that wants up to 3A @ 15V, but it does not start charging, the input current to the board just jumps around a bit.
Here I can also use my USB tester to see the voltage and current readings. Voltage matches my oscilloscope

I've a voltage offset of about -8 here to get a better view of it waveform.
As we can see, it goes up to 5V, sen it tries to go for 15V but fails.

What else can I test?

  • Hello Pontus,

    Making a note that we are continuing our discussion from this thread

    Glad the change in the I2C pull up resistor values has helped with progress and you are able to charge a sink device. Do you have a PD analyzer to capture the PD logs when the disconnect occurs when a 15V PDO contract is negotiated? Have you used your thermal camera to measure the board temperature when this disconnect occurs?

    Back to the topic regarding your inner layers missing ground pour under the IC and I2C traces  - One thing to note is that energy does not come from voltage or current, but the EM waves. Without proper grounding, the EM waves from the I2C signals do not have a good return path, so although the voltage levels may look okay from an oscilloscope capture, there could be signal reflections on the traces, and cross talk from uncontrolled EM waves that could cause issues. And the other byproduct of not having proper grounding and ground via placements is poor PCB thermal management. All this to say that a second revision of your board is recommended to eliminate any potential issues when debugging. 

    And to answer your question from our direct messages, the -CA variant was released to address the issue the -C version would have during certain cold crank scenarios. More information/details on this can be read here.

    BR,

    Seong

  • Hi Seong

    My USB analyzer does not have an option to export the sniffed packages, but I did take som pictures of it.


    It's 6 packages that repeats when the IC reboots.
    The first 3 are the same, I'm guessing some identification from the sink.



    Then we get capabilities from the source.



    Then the sink sends it's request and the source accepts it.
    Then there's a reboot and it starts all over.



    Thermals looks fine.
    Here I've connected a MHP30 PCB pre-heater. It does support up to 100W but will work with lower power. I've tested it down to 15W and it works.
    When connected here, the display doesn't even turn on. So there is not really any load, maybe a few mA.
    The PD packages and the behavior are the same for other PD sinks I've connected that requests more than 13.5V.


    About the ground pour on the inner layers, I've just received notice that my revised PCBs are shipped from the manufacture.
    As I mentioned in the email, I did have them in the design but had misspelled the name of the net and I had no body to audit my design before production as I work for a small company. I'm just glad it wasn't anything worse.


    Thanks for the info about the different versions.

  • Hi Pontus,

    As mentioned before, I recommend leveraging E2E next time and requesting a design review before going to production.

    Yes, the first 0x108F Message Header shows that the VDM Header is 0xFF00A801 which is the TPS25762-Q1 requesting a Disc ID to know the capability of the USB cable you are using. What is the part number of the USB cable you are using? The first three transactions all have the 0x108F Message Header. Do the 2nd and 3rd messages also show the same 0xFF00A801 VDM Header if you select them?

    Let's try one debug step to confirm if the ADC is working properly. I2C register 0x1A is the STATUS register and the 0x1A register map is shown here. You  mentioned that the 5V and 9V PDOs work and when a 9V contract is negotiated, you can draw up to 1.5A. How are you measuring the voltage and current, by the way? After you confirm the VIN voltage and output voltage/current, read the 0x1A register and check how accurate the VBUS current, VBUS voltage, and VIN voltage ADC readings are.

    Taking a closer look at your gerbers, the current sense resistor layout is also of concern. The trace lengths do not match and the connection from the CSP and CSN/BUS pins to the resistor is not ideal. Figure 2C in the Integrated-Resistor Current Sensors Simplify PCB Design is the preferred method and is how it was also designed in the PMP40933 reference design (see image below). The 0x1A register read will tell us VBUS current ADC reading is poor or not. What is the part number of R14 shunt resistor, by the way?

    As mentioned on our other thread, the AGND and PGND were not separated and connected near the AGND pin via single-point grounding as stated in the datasheet (see snip from datasheet below). The reason why this is important is to reduce the power ground PGND causing fluctuations to interfere with the signal ground AGND and causing oscillation.

      

    Also, is the USB3 data communication working correctly? It is hard to image that it would considering that it also does not have an adjacent ground reference plane. If it is working, is USB 3 active when the TPS25762-Q1 is negotiating the 15V PDO? I see in the image below that the CC2 trace on the 3rd layer is directly above the SSRX traces on the top layer. Does the same issue occur when you connect the sink device's USB plug right-side-up and upside-down?

    BR,

    Seong

  • Hi Seong

    I missunderstod you, I didn't think that it would a in-depth board review/audit. 

    Yes, the 3 0x108F messages are identical.
    I've tested a lot of different cables. Some from Samsung, some generic and some from brand like ugreen. I do not have an exact parts number.
    They all work on other PD chargers, and I can get up to 13.5V with all of them on my board.

    I'm unable to get anything meaningful from the i2c. I'm reading from device address 0x22. I've texted with a simple i2c scanner 
    and that is what it found. 
    I read 12 bytes from register 0x1A. First 5 is just discarded. The rest is just 0x00.
    Reading from device address 0x23 only gives me 0xFF on all bytes.


    I'm getting the voltage and current from JT-UM120, they call it a USB-multimeter and can measure up to 120W. 4-28V @ 0-7A

    I've made some changes to the gerbers, all of these are in the new production run that is on it's way from the factory as mentioned earlier. See attached file.

    7433.usbhub_usb_pd_2024-12-18.zip


    I'm not sure what is ment with "connected near the AGND pin via single-point grounding"
    Can I connect the AGND to the ground pour with a trace? If so, how wide?
    I'd let the ground pour connect to the AGND, I thought that was a single point connection. How does it differ?
    When checking the reference, both PMP40933 and PMP40934, there is a smal AGND pour:


    There are 2 vias, but they don't connect to anything according to the gerbers?


    I'm very confused right now.


    The USB 3 data does work as far as I've tested.
    No USB traffic was active when I had the PCB Preheater connected, and it still failed when requesting 15V.
    Rotating the USB plug did not made any difference.

  • Hi Pontus,

    When you are reading 12 bytes from register 0x1A, you are saying bytes 6~12 are all 0's? Is this when the device is operable, a 9V PDO contract is negotiated, and as you are continuously drawing 1.5A? By the way, your schematic shows that you are booting in TVSP index #0, so technically the second I2C device address is 0x26, and not 0x23. This it not a critical piece of information for you since you are not using the dual-port TPS25772-Q1 variant, but just wanted to let you know as an FYI.

    See the example PCB design below where the entire AGND net is highlighted. The red indicates the top layer and blue trace is layer 3. The green box is where the system GND/PGND net connects to the AGND net at the device's AGND pin, pin5. This is what is known as single-point grounding, or when the connection is made at a single ground point. This is better to do versus what was done on the PMP40933 and PMP40934 designs, where although the AGND planes on the top layer are isolated, they directly connect to the adjacent 2nd layer GND plane through vias.

    The more important thing to highlight on the PMP40933 and PMP40934 designs that should be followed is how the 2nd layer is a dedicated GND layer (the entire 2nd layer is a GND pour). See Section 3.5 in the High-Speed Layout Guidelines for Signal Conditioners and USB Hubs appnote. As stated in this section, high-speed signals (such as USB 3 which is in the 2.5~5GHz bandwidth) should not be routed across a plane split in the reference plane. This also applies to I2C. 

    There is also another pair of AGND vias with keep outs on the bottom layer of the PMP40933 board. I am not sure why the designer of this board added these keep outs only on the bottom layer, but for future reference, follow my recommendation and the example above instead.

    BR,

    Seong

  • Hi Seong

    I did a check today, and now I'm getting data from the 0x1A register. Strange.
    But that address is 0x22 for sure. I'm not getting anything on 0x23 or 0x26.

    I've setup my JT-UM120 to request up to 3A @ 9V, I then connected my JOY-IT  JT-HD35 USB electronic load and set it to 1.5A.
    The JT-UM120 is reading a constant 1.4992A draw, close enough I'd say.

    I did try to convert the i2c reading to some usable numbers, but I must be doing something wrong.
    This is what I get
    bit 0-15: 0xBA00
    bit 16-23:0x03
    bit 31:24: 0x7B
    bit 39:32: 0xC9
    bit 47:40: around 0x59 - 0x5C
    bit 55:48: around 0x73 - 0x78

    I'm using an Arduino to read the I2C. Here is the code:

    #include <Wire.h>
    
    void setup() {
      Serial.begin(115200); //Initialize UART port , on ATmega32U this is the one connected to USB.
      while(!Serial) {} //Wait for serial monitor to connect, Only works because it's a ATmega32U based board.
      Wire.begin(); // Initialize I2C
    }
    
    byte val = 0;
    
    void loop() {
      Wire.beginTransmission(0x22);    // Start transmission. Send device address
      Wire.write(0x1A);                // Tell it what register I want to read from.
      Wire.requestFrom(0x22,12);       //Start requesting the data. Is read into FIFO buffer.
      //First 5 bytes are crap:
      Wire.read();
      Wire.read();
      Wire.read();
      Wire.read();
      Wire.read();
    
      //Internal DCDC voltage code reading (10mV LSB)
      byte LSB = Wire.read();
      byte MSB = Wire.read();
      uint16_t DCDCV = ((MSB << 8) | LSB);
    
      //Internal DCDC Current code reading (25 mA LSB)
      byte DCDCC = Wire.read();
    
      //VIN voltage ADC reading (0.08 V LSB)
      byte ADC_VIN = Wire.read();
    
      //VBUS voltage ADC reading (0.098 V LSB)
      byte ADC_VBUS_V = Wire.read();
    
      //VBUS current ADC reading (23 mA LSB)
      byte ADC_VBUS_C = Wire.read();
    
      //VNTC voltage ADC reading (0.014 V LSB)
      byte ADC_NTC = Wire.read();
    
      Wire.endTransmission();
    
      Serial.print("DC Voltage:");
      Serial.print(DCDCV * 10);
      Serial.print("mV - ");
      Serial.print("0x");
      Serial.println(DCDCV, HEX);
    
      printValue("DC Current:", "mA", DCDCC, 25.0f);
      printValue("ADC VIN:", "V", ADC_VIN, 0.08f);
      printValue("ADC VBUS voltage:", "V", ADC_VBUS_V, 0.098f);
      printValue("ADC VBUS current:", "mA", ADC_VBUS_C, 23.0f);
      printValue("ADC VNTC voltage:", "V", ADC_NTC, 0.014f);
    
    
      Serial.println();
      Serial.println();
      Serial.println();
    
      delay(2000);
    }
    
    void printValue(const char* text, const char* unit, unsigned char value, float convertion) {
      Serial.print(text);
      Serial.print(value * convertion);
      Serial.print(unit);
      Serial.print(" - ");
      Serial.print("0x");
      if (value < 10)
        Serial.print("0");
      Serial.println(value, HEX);
    }
    

    The result looks like this:

    DC Voltage:17408mV - 0xBA00
    DC Current:75mA - 0x3
    ADC VIN:9.84V - 0x7B
    ADC VBUS voltage:19.80V - 0xCA
    ADC VBUS current:2116mA - 0x5C
    ADC VNTC voltage:1.64V - 0x75

    Something is very off here, I'm guessing that my quick and dirty code is the culprit in this case.
    When I change the load from 500mA to 1500mA, non of the data from the tps25762 changes, so I'm guessing that it's not just my code that is the issue.

    Thanks for the clarification. That example looks like that I did on the last revision of the board that I attached in the previous post.
    I do have some power and ground pour on layer 2 and mostly ground (except a few signals) on layer 3, should I move all power to layer 3 and 
    have only ground on layer 2 then?
    I do think my english is quite good, but this parts confuses me "should not be routed across a plane split in the reference plane"
    Care to explain it a bit more?


  • Hi Pontus,

    You misread my comment. I was saying that the second address is 0x26, but you do not need to use this second address for TPS25762-Q1. It was just an FYI, so you can ignore this. 

    By the way, your schematic shows that you are booting in TVSP index #0, so technically the second I2C device address is 0x26, and not 0x23.

    As stated in Section 8.3.1.2 of the datasheet, LDO_1V5 supplies power to the device's digital core, which includes the ADC. The LDO_1V5 caps need to be connected to AGND, but yours is connected to the system ground plane. As mentioned before, the reason why separating AGND and PGND is important is to reduce the power ground PGND causing fluctuations to interfere with the signal ground AGND and causing oscillation. The caps also need to be placed as close to pin7 as possible. On the PMP40933 design, the trace connecting pin7 to the LDO_1V5 caps is roughly 0.7mm. It looks to be about 10cm on your board. This explains why the ADC readings from the 0x1A register are not accurate and why the TPS25762-Q1 may be disconnecting the Sink. A VBUS overvoltage/overcurrent event could be triggering.

    I also see from your JSON your VIN engine on/off thresholds for Range 2 to Range 1 is 8.56V. 

    If your VIN is 15V, but the ADC is reading 9.84V when a 9V PDO is negotiated, it could be possible that the ADC reads VIN <8.56V when a 15V PDO is negotiated as there will be more noise in the system from the DCDC and turn off VBUS.

    Yes, I recommend making layer 2 all GND. 

    Apologies, I did not link you to the High-Speed Layout Guidelines for Signal Conditioners and USB Hubs appnoteFigure 4 in this appnote shows the AC/digital signal trace on the top layer. The blue GND plane is the second layer reference plane. Figure 5 shows the same signal trace, but routed across a plane split in the reference plane. I've circled in green in the image below where this occurs on your I2C and inductor traces.

    There are numerous things that we've flagged on your PCB design so far as you have not followed many of the design guidelines from the datasheet, PMP40933 reference design, and other general PCB design practices. You should wait until you get your new board to test and see what issues there are. Then based on those results, make any necessary fixes to the PCB design, request a design review on E2E, apply any other changes needed from our feedback, and build another revision.

    BR,

    Seong

  • Hi Seong

    You are correct, I did miss that part where you said 'second address' That's my bad.

    I will re-design the AGND ASAP.
    The distance to the LDO_1v5 caps are about 15mm, noway near 10cm. But I will move them closer while fixing the AGND.

    The VIN engine settings is the default. Should I try to change it and if so, to what?

    The VIN reading from the 0x1A register does not change when I change the negotiated voltage, I've tried 5-13V yesterday and the
    reading I got was the same no matter what.
    Only the DC Voltage reading would change at times.

    I will make layer 2 a complete ground pour.

    Thanks for the link to the app note. It makes perfect sense now. 
    Moving all power from layer 2 to layer 3 will resolve the highlighted issues, correct?

    I did change the current sensor network so be length matched, moved CC2 line, added a bunch of stiching to improve return path and improved the ground and thermal transfer around the TPS25762 IC.
    How do I request a design review? Do I just make a forum post about wanting one?

    Br
    Pontus

  • Hi Pontus,

    Sorry that was a typo! I meant to write 10mm haha. 

    Please feel free to experiment with different appconfig settings via the GUI as you wait for the new boards.

    Yes, it is best to make layer 2 all GND.

    I will close this thread. When ready, please post a new thread with your design files and request a review. 

    BR,

    Seong