Other Parts Discussed in Thread: TPD6S300A, , HD3SS460, BQ25895, TPS65987D, TPS25750, TPS65988
We have made several iterations to our board design in an attempt to fix a failure we have had with the TPS65982's CC lines for quite a long time now. In the previous revisions of our board, we have found that the CC lines (either CC1, CC2, or both) may fail due to plugging or unplugging a VBUS source. After discovering the short-to-VBUS failure mode that the TPS65982 is vulnerable to, we decided to introduce a TPD6S300A in order to protect against this. After adding the protection IC we still experienced these failures, which when it occurs we are unable to perform most negotiations such as VBUS voltage or DP alt-mode. Next, we added a 400CC1206LR-C PTC fuse, PTVS16VS1UR TVS diode, and a NSR20F30NXT5G Schottky on VBUS in an attempt to solve the issue. These changes, along with some fairly significant changes to the layout, seem to have slightly reduced the occurrences of the failure but it is still happening frequently enough to be an issue for our customers.
For reference, we are programming the TPS65982 to have three sink PDOs, one at 12V (preferred voltage for the device), one at 9V, and one at 5V. Additionally, we are using a BQ25895 charge controller, which is where VBUS gets delivered to. We sink VBUS (12V, 9V, or 5V) from PP_HV and when negotiated as a VBUS source we have the BQ25895 in OTG mode and it supplies 5V to PP_5V0. Our device is also making use of the HD3SS460 for DP alt-mode, but this failure mode has been found to occur during a simple power/charging state so we do not suspect this part of the circuit to be relevant. There have been suspicions that some of the failures have occurred while using USB-C hubs, but we have also witnessed them occur when just using a simple USB-C PD source (wall wart).
On the previous revisions of the board I have used a DMM to measure the failed CC lines DC resistance to GND to be near 0Ω (at least 100Ω or less), effectively shorted to GND. I do not have an instance where the failure occurred with the most recent unit with me, but my colleague does, so if you suggest any measurements to be taken he will do so on my behalf (he may even join this thread).
We have used the C_CCn Pin State Register (0x69) to help us determine if the CC lines have failed by seeing what the register reports when there is no VBUS source present (device is unplugged), when a VBUS source is present with the cable in one orientation, and when a VBUS source is present with the cable flipped in the other orientation. When this is done on a working unit where the TPS65982's CC lines have not failed, using a USB-C PD source, we would get something like the following:
$ sudo i2ctransfer -f -y 0 w1@3f 0x69 r5 0x04 0x00 0x00 0x00 0x42 <- this is 0x42000000 $ sudo i2ctransfer -f -y 0 w1@3f 0x69 r5 0x04 0x01 0x05 0x00 0x47 <- this is 0x47000501 $ sudo i2ctransfer -f -y 0 w1@3f 0x69 r5 0x04 0x02 0x00 0x05 0x47 <- this is 0x47050002
However, for the device where the CC lines are damaged we would get something like this (in one or both orientations depending on if both or just one are damaged):
$ sudo i2ctransfer -f -y 0 w1@3f 0x69 r5 0x04 0x00 0x00 0x00 0x21 <- this is 0x21000000 $ sudo i2ctransfer -f -y 0 w1@3f 0x69 r5 0x04 0x00 0x00 0x00 0x21 <- this is 0x21000000
Here CCpinForPD is stuck at 0x00, so is CC1PinState and CC2PinState, and it is stuck in an "Unattached.SNK" state. Whereas with the functional unit it accurately follows if "C_CC1" or "C_CC2" "is CC pin for PD communication", stating the 3.0A advertised current on the respective CC line, and achieves an "Attached.SNK" state as a DRP (as defined in our firmware).
Please let us know if you have any suggestions for how we can either figure out what's going on, or if you have any experience yourselves with this sort of failure how we might be able to fix it. If needed, we are willing and able to provide you with the relevant schematic and layout for you to review.