Hi everyone,
I’ve built a USB-C LiPo charging circuit based on the classic TP4056 + DW01A + FS8205A combo, inspired by designs from reputable sources and forums. This is a known-good design — I’ve seen it work for others — but for some reason, my board isn’t behaving as expected.
Schematic:
The setup:
- USB-C input → 5V regulated from charger
- TP4056 for charging
- DW01A + FS8205A for protection
- 600mAh single-cell LiPo (new and healthy)
- LEDs on CHRG and STDBY pins via 1.8k resistors
Symptoms:
- CHRG and STDBY LEDs never turn on
- OD pin on DW01A is stuck at 0V
- GATE is stuck HIGH (~3.8V) → FS8205A is OFF
- So the battery is completely isolated from the rest of the board
- The TP4056 BAT pin sees 0V → thinks there’s no battery → no charging activity
Tests I’ve done:
With USB-C connected:
- VBUS: 5V
- R6/R7 (USB-C CC resistors): Working correctly — one is 1.5V depending on plug orientation
- LiPo+ measured: 3.8V
- DW01A VDD and VC: ~3.4V–3.8V
- OD = 0V
- GATE = 3.8V
- TP4056 BAT pin = 0V
- Tried manually shorting OD to GND (1–2 seconds) to reset DW01A — no effect
Then I replaced the battery with another fully charged 3.8V one — still the exact same behavior.
My understanding:
The DW01A should auto-recover once the battery is above the overdischarge release threshold (3.0V). According to the datasheet, OD should go high and allow current through the FS8205A — but it doesn’t.
I know this combo is sensitive to false overcurrent detection. I’ve checked:
- No shorts on CS, GATE, or OD pins
- No visible soldering problems
- Measured across FS8205A pins 1–4 and confirmed there’s a full Vdrop — FETs are off
- Cleaned the area with IPA, reflowed FET + DW01A just in case
What I’m wondering now:
- Am I missing something obvious that prevents DW01A from exiting protection?
- Could a spike from TP4056 at boot be latching the overcurrent logic?
- Would adding a pull-down on GATE help?
- Is it time to just bypass the FETs for testing?
- Could there be something subtle in layout or trace resistance that's triggering the overcurrent?
Any ideas, tests I should try, or similar experiences would be much appreciated ![]()
Happy to share a schematic or board pics if needed.
Thanks in advance!
