XIAO ESP32C3 high power consumption and weird LED behavior

Go my hands on a one of the tiny XIAO ESP32C3. I really like to design and especially the form factor.
But I do not understand some aspects about deep sleep and the battery charging circuit:

When powering with USB or the 5 V-port, and after putting the XIAO into deep sleep, I measure a current of about ~230 uA (bare XIAO ESP32C3; measured with uCurrent Gold) instead of the ~44 uA according to specs.
In the seeedstudio-forum XIAO ESP32S3 Deep sleep current someone got quite the same results and the conclusion was, that you can only power the device by the battery-port of the XIAO to get the proclaimed ~44 uA.

When using the 5 V-port, it has a much higher power consumption in deep sleep (the XIAO is put to sleep by esp_deep_sleep_start() and a timed wake up).

Looking at the schematic of the XIAO, we see some reasons for this:

  • Voltage regulator is to be accounted for: 40 uA (67 uA max)
  • R9 pull-down-resistor: 50 uA
  • ESP32C3 (deep-sleep): 5 uA

The battery charging controller is not specified any further, but on (Battery charge on XIAO Esp32-C3 not working as expected) the component was guessed to be either MCP73831 or a XC6802. Regarding to an image of the opened XIAO imgur.com/KAYwJhC it is rather to XC6802.

In the datasheet of the XC6802, I did not find what exactly happens when no battery is connected. I did however find a note, that one should put the IC into shut-down manually in this case. This is not done by the XIAO according to schematics, so I guess the IC will be in stand-by-mode (?). So, there will be additional current as following:

  • MCP73831 (no battery connected): 53 uA (200 uA max)
  • XC6802 (stand-by-mode): 15 uA (35 uA max)

If I add up all the numbers, I could explain the power consumption when using the MCP73831 as charging controller. But as the image showed, it would rather be the XC6802, which would have much lower numbers.

What I also find weird, is, that when powering the board by USB or 5 V and no battery connected, the charging LED is flickering at about 24-25 Hz (very short pulses of about 20 mA for about ~16-18 us; the mentioned 230 uA is without those peaks).
I would rather expect the charging-port of the XC6802 to be “quiet” when there is no battery connected.

Can anyone confirm my numbers (or did I miss or messed up some of them?) and has an explanation for the behavior of the charging LED?

If all of my thoughts would be correct, it would render the XIAO quite useless for low power applications when using the 5 V-port in my opinion. Only when using the 3.7 V-battery, a reasonable low current can be achieved.

For nRF52840 instead of ESP32C3, would post 2 of the following link be helpful?

XIAO NRf52840 Power Reg Power Draw - #2 by msfujino

Hi there,
Curious to know which BSP you are using to measure this by? (2.0.8)? or another.
GL :slight_smile: PJ

Thank you msfujino

I’ve seen your response on this topic, and this could partly confirm my findings.

But I still do not fully understand, why I’m getting such a high current during deep sleep. Because the values I find in the datasheet of the charge controller states lower values (if I read it correctly).

Might this have to do with the controller trying to find a connected battery, because it is not shut-down manually as advised in the datasheet?

I’m working with the Arduino IDE and the BSP should be 2.0.14. I cannot confirm this currently because I do not have access to my pc right now, but I strongly suspect it to be this version, because I installed it just 2 weeks ago.

Would you think it would be any better with v2.0.8? Or why did you specifically ask for this version?
And this would imply, that you are suspecting the chip itself using more current than stated in the datasheet of the chip(?).

Hi there,
I won’t deny you :index_pointing_at_the_viewer:the pleasure of researching that exact question, WHY?
I will say" they Espressif had an alpha, & beta BSP before the 2.0.14" and some older code doesn’t :bomb:go well. I like 2.0.8 , but that’s just me. I don’t suspect anything or everything, You do you :wink:and I’m sure it’s fine.
GL :slight_smile: PJ :v:

You may be correct about the charge controller, and require additional code to support fully the deep sleep?

I guess additional code will not be enough, as the way to put the charge controller into shut-down according to datasheet is to float the Isense-pin (which is hard wired under the hood).

(I noticed that I might have messed up with some translations :sweat_smile: just replace all the suspect with assume. That was what I meant all the way :wink:)

I did now do some additional tests, including BSP 2.0.8 (I can now confirm that I was using 2.0.14).
I did also try the difference between esp_deep_sleep_start() and esp_deep_sleep(), which caused some higher current consumption some time ago (ESP32-C3 power consumption doesn’t match to the datasheet). In my case, this did not make any difference (there was also no difference if wake-up-time was not specified at all (by me)):

  • BSP 2.0.14, esp_deep_sleep_start(): ~218 uA
  • BSP 2.0.14, esp_deep_sleep(): ~217 uA
  • BSP 2.0.8, esp_deep_sleep_start(): ~216 uA
  • BSP 2.0.8, esp_deep_sleep(): ~216 uA

The measurements were done with a different DDM (vs. oscilloscope last time).

Hi there,
I’m curious to know how it shakes down with the PPK2. ?
GL :smiley: PJ :v:

According to Seeed’s information, the charge controller is ETA4054. I could not find a detailed datasheet.

ESP32-C3 XIAO Battery Charging IC

See here for the datasheet.
LCSC (based in Shenzhen) is similar to Mouser or Digikey and they stock many parts which are manufactured in China.

1 Like

Hi there,
I’m wondering if this might explain away some of the Vampire current
(from the data sheet)
“Note 1: Supply current includes ISET pin current (approximately 100μA) but does not include any current delivered
to the battery through the BAT pin (approximately 100mA).”
I’m surprised at some of the Technical design decisions seeed engineering has made with features supported but not implemented correctly or poorly SMH, i.e. devices you can read battery level seems to be their achilles heal.
GL :slight_smile: PJ

Hi there,
Great point and find, I had forgotten about LCSC
I used them to supply my pcb components on EasyEDA and JLPCB, They have some hard to find parts and good e-mail support for the DRC phase ,very helpful.
GL :slight_smile: PJ

I unfortunately can’t do any measurements with the PPK2, as do not own one of those. But as I was already thinking of getting one and to check whether my uCurrent is doing right, I did order one.

Let’s wait 'till it arrives for any new values…

@msfujino, @hobbya
This is interesting information which I didn’t find so far.
But this confuses me even more, as when calculating the current which the battery will be charged based on the ISET-resistor (2k7) we get lower values than reported from the thread linked above from @msfujino. So, we now even have contradictory information.

Interesting to know would now also be, if this Note 1 is really only applicable on the Charge Mode or should be used on the Standby Mode as well. Because under Charge Termination it is noted, that when the chip enters Standby Mode (which I guess happens when no battery is connected but ISET is still pulled to GND) the input current drops to 200 uA, which is well above the values in the table.
This then could actually be this vampire-current. I did check with a second XIAO, which behaves exactly the same.

And regarding the battery level read: they at least justify the lack of implementation. And I guess, an additional voltage divider would mean one more time some more current.


As shown in the link below, the battery is charged at a charging current of 1000/2.7k = 370mA, set at 2k7.
Charging characteristics of XIAO_nRF52840 and XIAO_ESP32C3

Since I can’t get the datasheet for the ETA4054, I thought about it while looking at the datasheet for the MCP73831, which seems to be almost equivalent.
In the SupplyCurrent(ChargeComplete, NoBattery) section, there is a description of Typ.53uA, Max.200uA.

@hobbya was able to locate the datasheet of the ETA at LCSC

But you are still right in the end, because I was refering to the different formula to calculate the charging current for the ETA, but just simply overlooked the square in the formula yesterday. Without the square it would be around 270 mA (incorrect) instead of now again ~360 mA.

In the datasheets of the XC6802 and the ETA4054 is not exactly specified what happens, when there is simply no battery connected without a proper shut-down. But I came to the same conclusion that it will probably behave as in Standby Mode.

It will then consume around the values you provided (60 to 100(max) uA, maybe even 200 uA regarding the above note).

This all would kind of confirm (except the blinking of the LED) my initial question and makes the XIAO only usefull for low(er) power applications when powered over the battery only.

Hi there,
Pretty sure the LED only blinks for a short period?
GL :wink: PJ

Really sure the LED blinks only a short time, but not 100 % sure the exact duration of the pulse. The frequency is between 24-25 Hz (checked with oscilloscope during current measurements and optically with a 960 fps camera). The “blinking” is visible by eye and it can be observed, that the LED is on at max one of the frames of the camera (so pulse is shorter than 1 ms).
As mentioned above, the current measurement show, that the pulse duration is around 16-18 us, but due to the low bandwidth (300 kHz) of the uCurrent, the exact values of duration and especially amplithude are to be questioned.

If I find time soon, I will try to probe the LED directly with the oscilloscope, to get better values of duration (but will add no value to current obviously).

So, did some more measurements. The PPK2 did arrive in the meantime and shows some slightly different values.

  • Previous current measurement with uCurrent and DDM: ~218 uA
  • new with PPK2: ~245 uA

To estimate, which of the two might be “more correct”, I looked for some DDM with the ability to measure sub-mA ranges directly:

  • directly with current measuring functionality of 4.5 digit DDM at 2000 uA range: ~250 uA
  • directly with current measuring functionality of cheap 3.5 digit DDM at 2000 uA range: ~250 uA

So it seams that my uCurrent is a bit off, as the other measurements without the uCurrent show very similar values.

I did now as well probe the LED directly with the oscilloscope and got again ~24 Hz, but a clearly longer pulse duration of ~353 us, which was not visible in the current measurements with the uCurrent.

1 Like

If the voltage applied at ppk2 is reduced below 5 V, there is a voltage at which the frequency of the pulse current changes significantly.