zudo-PD
GitHub repository

Type to search...

to open search from anywhere

v3 USB-PD Failure Diagnosis (pin 18 root cause)

Why the v3 board still fails to negotiate USB-PD even after (a) the STUSB4500 NVM was correctly reprogrammed (SNK_PDO_NUMB=2, 15 V/3 A) and (b) pin 18 was bodged.

Method: every claim below was verified by reading the actual net topology in usb-pd-input.kicad_sch against U1's own symbol pin table (symbol origin 176.53,63.5, not mirrored; absolute pin = 176.53+dx, 63.5−dy). A first multi-agent pass produced several false findings from guessing pin numbers by screen position; those are listed in "Ruled out" so nobody chases them.

Authoritative U1 (STUSB4500QTR) pin map — verified

PinNameAbs (x,y)Connects toVerdict
1CC1DB156.21,49.53→ R19 (0 Ω) → GND, isolated from CC1ok
2CC1156.21,52.07CC1 net (D4, R17 5.1k→GND, J1.A5)ok
3NC156.21,54.61no_connectok
4CC2156.21,57.15CC2 net (D4, R18 5.1k→GND, J1.B5)ok
5CC2DB156.21,59.69→ R20 (0 Ω) → GND, isolated from CC2ok
6RESET156.21,62.23RST → GND (active-low idle = run)ok
7SCL156.21,64.77SCL-pin1 (R15 4.7k pull-up, J2)ok
8SDA156.21,67.31SDA-pin2 (R16 4.7k pull-up, J2)ok
9DISCH156.21,69.85(internal discharge)check
10GND156.21,72.39→ wire to GNDok
11ATTACH156.21,74.93ATT labelok
12ADDR0156.21,77.47→ GND (#PWR043)ok (addr strap)
13ADDR1196.85,77.47→ GNDok (addr strap)
14POWER_OK3196.85,74.93label / NCok
15GPIO196.85,72.39labelok
16VBUS_EN_SNK196.85,69.85VBEN → Q1 gateok
17A_B_SIDE196.85,67.31label / NCok
18VBUS_VS_DISCH196.85,64.77→ R14 (470 Ω) → GND. NO VBUS.BUG (blocker)
19ALERT196.85,62.23label / NCok
20POWER_OK2196.85,59.69POWER_OK2 labelok
21VREG_1V2196.85,57.15C34 (1µF) decap to GNDok
22VSYS196.85,54.61→ GND (#PWR047) — hard tieok (correct for VBUS-powered)
23VREG_2V7196.85,52.07VREG_2V7 rail + C30 (1µF) decapok
24VDD196.85,49.53VDD global labelok (powered)
25EP(center)GNDok

ADDR0=GND, ADDR1=GND ⇒ I2C address 0x28 (matches what the programmer saw — consistent).

ROOT CAUSE (blocker): pin 18 VBUS_VS_DISCH tied to GND

Verified net of pin 18 = { U1.18, the VBUS_VS_DISCH label, R14.1, TP6 }, and R14's other end goes to a GND symbol (#PWR046 at 236.22,76.2). The net never touches VBUS anywhere (confirmed: no VBUS_IN / VBUS_OUT node on it).

pin18 ──┬── VBUS_VS_DISCH label ── TP6
        └── R14 (470 Ω) ── GND        ← WRONG: should reach VBUS, not GND

Why this kills negotiation: VBUS_VS_DISCH is the high-voltage analog input the STUSB4500 uses to confirm VBUS is in a valid window before it asserts VBUS_EN_SNK (the load-switch enable). Held at 0 V, the chip believes VBUS is permanently absent → never enables the sink path → no contract. This is why "NVM correct + pin 18 bodged, still dead": the bodge restored a connection, but to GND, so the sense input is still grounded. Even a perfect respin of the current schematic would still fail.

Datasheet note (why GND looked plausible): ST DS12499 calls pin 18 VBUS_VS_DISCH — it doubles as a VBUS discharge path (≤50 mA, hence a series R). That dual name is what led the original design (and our earlier docs) to tie it toward GND. But its primary job is VBUS voltage sensing, so the pin-18 network's far end must reach the VBUS rail, not ground. The v1-debug doc said exactly this ("pin 18 → 470 Ω → VBUS_IN").

The fix (schematic)

Pin 18 needs to see VBUS through a series/divider, not a pull to GND. Two options:

  • Simplest (matches v1-debug intent): make R14 the series element to VBUS: VBUS_IN → R14 (470 Ω) → pin 18. Delete the R14→GND wire + #PWR046.

  • Safer divider (recommended): VBUS_IN → R_top (≈470 kΩ) → pin 18 → R14 (470 Ω) → GND, so the pin sees a small, current-limited fraction of VBUS. Keep TP6 on the pin-18 node.

Confirm the exact recommended topology/value against the ST datasheet Fig. 10 and the SparkFun Power Delivery Board before committing — see the open question below.

Fastest bench bodge to PROVE it (minutes, before any respin)

  1. Lift R14's GND end (or remove R14).

  2. Wire VBUS_IN (Q1 source / J1 VBUS / a VBUS test point) → ~470 kΩ → pin 18 (or TP6), and refit R14 (470 Ω) from pin 18 → GND. Net: VBUS_IN → 470k → pin18 → 470Ω → GND.

  3. Re-plug USB-C. DMM TP6: was ~0 V (broken) → now non-zero, rising with VBUS (pass). Watch VBEN (pin 16) assert and the +12/+5/−12 rails come up.

If that single bodge brings PD up, pin 18 was the whole story.

Secondary items — all verified OK (no action)

  • VSYS (pin 22): hard-tied to GND (#PWR047) — correct for a VBUS-powered (non-battery) design. (Earlier audit's "floating, missing decap" was wrong.)

  • VREG_2V7 (pin 23): decoupled by C30 (1 µF). OK. Bench: ≈ 2.7 V when powered.

  • VREG_1V2 (pin 21): decoupled by C34 (1 µF). OK. Bench: ≈ 1.2 V when powered.

  • DISCH (pin 9): confirm intended connection per datasheet (minor, not a blocker).

Conclusion: pin 18 → GND is the only confirmed bug. The rest of the front end is correct.

Ruled out — do NOT chase (false findings from position-guessing)

  • "VDD (pin 24) shorted to GND" — FALSE. Pin 24 carries the VDD global label. The GND the agent saw was on pin 13 ADDR1, a correct address strap.

  • "ADDR0→CC1DB / ADDR1→VDD mis-wired" — FALSE. Both ADDR pins go to GND (addr 0x28).

  • "RESET tied to GND is wrong" — FALSE. Active-low idle; held low = normal run.

  • "SCL shorted to RESET/GND" — FALSE. SCL/SDA route correctly to their labels + pull-ups.

  • "Pin 10 GND / pins floating" — FALSE. Every U1 pin has a wire; pin 10 reaches GND.

  • Q1 load switch — schematic OK (source→VBUS_IN, drain→VBUS_OUT, gate via VBEN). Worth a PCB continuity spot-check but not the blocker.

Open question for you

R14's far end should go to VBUS — but VBUS_IN or VBUS_OUT? VBUS_IN = raw USB-C VBUS (present before the load switch); VBUS_OUT = after Q1. For sink VBUS validity sensing you generally want the receptacle-side VBUS (VBUS_IN), which is also what the v1-debug doc specified. Recommend VBUS_IN unless the datasheet Fig. 10 says otherwise. Want me to fetch the datasheet figure and the SparkFun reference to lock down the exact value + which VBUS node, and then apply the schematic edit for you?

Revision History

Takeshi TakatsudoCreated: 2026-06-01T08:44:07+09:00Updated: 2026-06-14T17:57:27+09:00