espressif / arduino-esp32

Arduino core for the ESP32
GNU Lesser General Public License v2.1
13.78k stars 7.44k forks source link

DEEPSLEEP_RESET gets stuck after a few resets #796

Closed jh83 closed 3 years ago

jh83 commented 7 years ago

Hardware:

Board: ESP32 Dev Module - Sparkfun ESP32 Thing Core Installation/update date: 30/oct/2017 IDE name: Arduino IDE Flash Frequency: 80Mhz Upload Speed: 921600

Description:

The board does not correctly restart after deep sleep. Im using the builtin example sketch "TimerWakeUp" without modifications and no other hardware attached and i get random results on the powerup after sleep.

The board usually start successfully a few times after deepsleep, but then it failes to run the actual sketch after startup and a manual reset is needed.

The debug information below shows that the device starts after deepsleep and outputs "Boot number: x", but then in the last boot it doesn't output anything from the sketch and does not return to sleep. A manual press of the reset button restarts the device and the it runs for a few more deepsleep cycles before it gets stuck again.

Any one else seen this problem?

Sketch:

builtin "TimerWakeUp" example sketch

Debug Messages:

rst:0x10 (RTCWDT_RTC_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0018,len:4
load:0x3fff001c,len:956
load:0x40078000,len:0
load:0x40078000,len:11904
entry 0x40078a3c
Boot number: 1
Wakeup was not caused by deep sleep
Setup ESP32 to sleep for every 5 Seconds
Going to sleep now
ets Jun  8 2016 00:22:57

rst:0x5 (DEEPSLEEP_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0018,len:4
load:0x3fff001c,len:956
load:0x40078000,len:0
load:0x40078000,len:11904
entry 0x40078a3c
Boot number: 2
Wakeup caused by timer
Setup ESP32 to sleep for every 5 Seconds
Going to sleep now
ets Jun  8 2016 00:22:57

rst:0x5 (DEEPSLEEP_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0018,len:4
load:0x3fff001c,len:956
load:0x40078000,len:0
load:0x40078000,len:11904
entry 0x40078a3c
iot-man commented 7 years ago

I'm having the same problem. My sketch goes to sleep for 60 seconds after taking temp/humidity readings etc via I2C. It used to work ok before system upgraded to most recent commit. First two restarts work ok but always hangs on third restart.

Debug messages

rst:0x5 (DEEPSLEEP_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT) configsip: 0, SPIWP:0xee clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00 mode:DIO, clock div:1 load:0x3fff0018,len:4 load:0x3fff001c,len:956 load:0x40078000,len:0 load:0x40078000,len:11904 entry 0x40078a3c rst:0x10 (RTCWDT_RTC_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT) configsip: 0, SPIWP:0xee clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00 mode:DIO, clock div:1 load:0x3fff0018,len:4 load:0x3fff001c,len:956 load:0x40078000,len:0 load:0x40078000,len:11904 entry 0x40078a3c Boot number: 1 Setup ESP32 to sleep for every 60 Seconds

Connecting to SKYE3E0B MQTT connecting ...connected 19.74 1015.97 Going to sleep now ets Jun 8 2016 00:22:57

rst:0x5 (DEEPSLEEP_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT) configsip: 0, SPIWP:0xee clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00 mode:DIO, clock div:1 load:0x3fff0018,len:4 load:0x3fff001c,len:956 load:0x40078000,len:0 load:0x40078000,len:11904 entry 0x40078a3c Boot number: 2 Setup ESP32 to sleep for every 60 Seconds

Connecting to SKYE3E0B MQTT connecting ...connected 19.73 1015.91 Going to sleep now ets Jun 8 2016 00:22:57

rst:0x5 (DEEPSLEEP_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT) configsip: 0, SPIWP:0xee clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00 mode:DIO, clock div:1 load:0x3fff0018,len:4 load:0x3fff001c,len:956 load:0x40078000,len:0 load:0x40078000,len:11904 entry 0x40078a3c

s-oshidari commented 7 years ago

I'm having a "similar" problem. In my case it happened with ESP.restart(). It gets successfully restarted a few times, but after several cycles it hangs like below.

rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0018,len:4
load:0x3fff001c,len:956
load:0x40078000,len:0
load:0x40078000,len:11904
entry 0x40078a3c
copercini commented 7 years ago

Same here, after commit https://github.com/espressif/arduino-esp32/commit/55289a45af1e7898ca0b8da037d92a83baaf0083 this problem starts

degehi commented 7 years ago

Same here, hangs after 2-3 reboot, just after the 'entry' log line

etimou commented 7 years ago

Exactly the same problem for me as well with an unmodified "TimerWakeUp" example sketch.

me-no-dev commented 7 years ago

I would suggest an issue to be opened in IDF (if one does not already exist). It is surely something in that update.

mikey60 commented 7 years ago

I reset the core version back to https://github.com/espressif/arduino-esp32/tree/95123681d5340defa24472e441758fba88e3a34f as was suggested in Issue #801 and my sketch with a 20 minute deep sleep that would hang after an hour or so (as described above) now has been working properly for 2 days.

cristianhumelnicu commented 7 years ago

Any patch for deepsleep issue ???

etimou commented 7 years ago

I can do the test with older version as well, but I am not very familiar with git. I guess the following commands on debian must be adapted:

git clone https://github.com/espressif/arduino-esp32.git esp32

git submodule update --init --recursive

What is the way to follow?

On Wed, Nov 8, 2017 at 10:28 AM, cristianhumelnicu <notifications@github.com

wrote:

Any patch for deepsleep issue ???

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/espressif/arduino-esp32/issues/796#issuecomment-342760057, or mute the thread https://github.com/notifications/unsubscribe-auth/AFozOX29RaB7vvCxqu1svKkNz1Z3ZzUpks5s0XQ7gaJpZM4QLpWy .

degehi commented 7 years ago

@etimou: what I did: just apply a checkout after de clone operation, with a version number before 55289a4

on the esp32 directory: git checkout 9512368

running without reboot hangs with this release for me.

etimou commented 7 years ago

thank you! it works perfectly with this version.

On Thu, Nov 9, 2017 at 12:22 PM, David notifications@github.com wrote:

@etimou https://github.com/etimou: what I did: just apply a checkout after de clone operation, with a version number before 55289a4 https://github.com/espressif/arduino-esp32/commit/55289a45af1e7898ca0b8da037d92a83baaf0083

on the esp32 directory: git checkout 9512368 https://github.com/espressif/arduino-esp32/commit/95123681d5340defa24472e441758fba88e3a34f

running without reboot hangs with this release for me.

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/espressif/arduino-esp32/issues/796#issuecomment-343125619, or mute the thread https://github.com/notifications/unsubscribe-auth/AFozOaG5qnBe3CGMlcg3EoGHXNa1naGYks5s0uBogaJpZM4QLpWy .

cristianhumelnicu commented 7 years ago

@etimou, @degehi Could you tell me what is the maximum time you've been able to keep ESP32 in deepsleep? All I've done is a deepsleep time of 30 minutes ... if it's more than 30 minutes it's not waking up again ffrom deepsleep...

etimou commented 7 years ago

I've run the deep sleep example for more a little bit more than one hour with no problem. It think the counter was around 800.

On Thu, Nov 16, 2017 at 9:48 AM, cristianhumelnicu <notifications@github.com

wrote:

@etimou https://github.com/etimou, @degehi https://github.com/degehi Could you tell me what is the maximum time you've been able to keep ESP32 in deepsleep? All I've done is a deepsleep time of 30 minutes ... if it's more than 30 minutes it's not waking up again ffrom deepsleep...

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/espressif/arduino-esp32/issues/796#issuecomment-344854810, or mute the thread https://github.com/notifications/unsubscribe-auth/AFozOWrfh46w_nd7VBMllU7jngBq4QIWks5s2_bXgaJpZM4QLpWy .

cristianhumelnicu commented 7 years ago

@etimou Do you use the deepsleep example from Arduino or other scatch ? Thk!

mikey60 commented 7 years ago

I am using my own program based on the Arduino deepsleep example an it sleeps for 20 minutes and then sends sensor data to ThingSpeak. It has run for several days. When I get a chance I will change the deepsleep to one hour and see if it continues to work.

iotmodules commented 7 years ago

I'm using the Sparkfun esp32 thing and am having similar issues however its not just sleep, i'm getting hanged reboots when pressing the reset button too, not just in the TimerWakeUp sketch.

I also find that I get about 5 reboots before a hang when RTC_DATA_ATTR int bootCount = 0; is intialised however if I comment it out and all references to it then I get about 30-40 reboots before a hang.

Using latest with 80a7d60 commited 6 days ago

CelliesProjects commented 7 years ago

Using the MHET Live D1 mini-kit. Can confirm the problem with hanging reboots.

Both the reset button and ESP.restart() have the issue.

etimou commented 7 years ago

I am using the deep sleep example from Arduino, not modified.

On Thu, Nov 16, 2017 at 10:11 PM, Cellie notifications@github.com wrote:

Using the MHET Live D1 mini-kit. Can confirm the problem with hanging reboots.

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/espressif/arduino-esp32/issues/796#issuecomment-345063739, or mute the thread https://github.com/notifications/unsubscribe-auth/AFozOXOqiAkCWZX2x1qxgTveoh2lZZQdks5s3KUJgaJpZM4QLpWy .

euquiq commented 7 years ago

I'm having the same problem (with latest Arduino - idf):

I set up a deep-sleep / wake timer for N seconds (5, 2 or even 1 second) and after a low number of wake-ups (2 to 6 times of normal waking up), ESP32 hangs.

So after reading the above posts, I am waiting for the bug to be crushed (on IDF, it seems).

Regards,

Enrique.

copercini commented 7 years ago

There is a commit that fixes it on IDF https://github.com/espressif/esp-idf/commit/abacf8d2a0347a4bf95315cdb227e9b8b1c93794 seems like just wait @me-no-dev bump the version for Arduino IDE =)

me-no-dev commented 7 years ago

need to check if @nkolban has updated the BLE lib and find some time to put a new release.

nkolban commented 7 years ago

That is job number 1 starting now

cristianhumelnicu commented 7 years ago

@me-no-dev Could you estimate when any fix update for deepsleep and reset issue will be availble ?

me-no-dev commented 7 years ago

I have updated Arduino. Can you pull the latest changes and give it a try?

cristianhumelnicu commented 7 years ago

@me-no-dev I already did .. using deepsleep example with timer wake-up and put to be 60 min in deep sleep . Until now have 12 deepsleep cycles without problems for 1h deepsleep

But i still have one problem .. I put another 3 x Wroom32 (Rev.1) to sleep 2h , 6h and 8h ant all of them standing in sleep about 45 minutes and after that wake up . All i've done with success is 1h sleep time with first Wroom32

Could u guide me what is supouse to do for long time deepsleep i mean 8h - 24h ?

Thank you very much!

me-no-dev commented 7 years ago

@cristianhumelnicu please post a minimal sketch that shows that issue and I will run it here on a few boards to see the result

cristianhumelnicu commented 7 years ago

@me-no-dev Is the standard deepsleep example and i use Wroom32 Silicon Rev.1 chipset

#define uS_TO_S_FACTOR 1000000  
#define TIME_TO_SLEEP  7200        

RTC_DATA_ATTR int bootCount = 0;

void setup(){
  Serial.begin(115200);
  delay(200); 

  ++bootCount;
  Serial.println("Boot number: " + String(bootCount));

  esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR);
  Serial.println("Setup ESP32 to sleep for every " + String(TIME_TO_SLEEP) + " Seconds");

 Serial.println("Going to sleep now");
  esp_deep_sleep_start();  
}
void loop(){ 
}

After last update is working for 1h deep sleep, but if I set TIME_TO_SLEEP>2h , the microconttroler exit from deep sleep in 45min

Until last arduino-esp update never did exit from deepsleep for TIME_TO_SLEEP > 30 min

I did try to define TIME_TO_SLEEP as unsigned long with same results

Thank you !

me-no-dev commented 7 years ago

OH!!!! I got it ;) (TIME_TO_SLEEP * uS_TO_S_FACTOR) this will default to 32 bit integer as opposed to 64bit one (which is what the wakeup timer expects), so in essence you overflow the 32bit number. Try ((uint64_t)(TIME_TO_SLEEP) * uS_TO_S_FACTOR) instead

euquiq commented 7 years ago

Hi there ! I got a slightly different issue: I got a wakeup timer, which at this time is set for 3 seconds. When the ESP32 awakes, it produces two beeps in a piezoelectric, then goes to sleep.

After about 2 - 3 hours of working about OK, timing goes wrong and it starts to wake up each 1 second by itself.

At first I had a screen connected thru SPI to the ESP32 showing battery level when awake, but the screen started to be unresponsive at the time of the "acceleration". So I took it off the system just in case it was something related to it.

It seems to be not. Bottom line, after some time, timer awakening seems to default to another timing.

Right now I am in the process of creating a minimal example code and reproduce the problem with it. I will post it ASAP.

Regards,

Enrique.

mikey60 commented 7 years ago

I apologize for the late response. I actually cloned the esp32-arduino version 12 hours ago and my sketch worked just fine overnight. It has executed flawlessly for the past 12 hours or about 36 twenty minute deep-sleep periods. Also this version of esp32-arduino seems to have corrected the Arduino OTA issue I was experiencing with the ESP32 Radio sketch. Thank you for all the hard work.

On Sat, Nov 25, 2017 at 4:21 AM, Me No Dev notifications@github.com wrote:

I have updated Arduino. Can you pull the latest changes and give it a try?

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/espressif/arduino-esp32/issues/796#issuecomment-346931810, or mute the thread https://github.com/notifications/unsubscribe-auth/ACDp7skObfz2a5zxv7ZkpCwP1JYbJxhdks5s5-o-gaJpZM4QLpWy .

jh83 commented 7 years ago

I pulled the latest release now as well and it seems as if the device starts correctly after deepsleep now.

I would also like to say that it's boot is better overall now. Previously it could also fail to load the sketch after i pressed the reset button, but now it seems as if it always successfully starts the sketch.

cristianhumelnicu commented 7 years ago

Well i confirm too .. the deepsleep and reset is running normal after latest arduino-esp32 update

I think in this moment we can close the issue !

@me-no-dev Thank you for all !

euquiq commented 7 years ago

@cristianhumelnicu not so fast ... ! I am trying this code:

#include <esp_deep_sleep.h>

//----Defines 
#define uS_TO_S_FACTOR 1000000  /* Conversion factor for micro seconds to seconds */
#define SLEEP  3 //3 seconds
#define pinBeeper 32

//RTC_DATA_ATTR int bootCount = 0;

void setup()
{
    ledcSetup(0, 2000, 8); //for tone generation
    ledcAttachPin(pinBeeper, 0); //Beeper GPIO to channel 0
    tone(5000, 50); //Happy tone
    tone(6000, 50);
    esp_sleep_enable_timer_wakeup(SLEEP * uS_TO_S_FACTOR);
    esp_deep_sleep_start();
}

//Generates a tone
void tone(int freq, int dur) {
    ledcWrite(0, 127); 
    ledcWriteTone(0, freq);
    delay(dur);
    ledcWrite(0, 0);
}

void loop()
{
    //This is not going to be called
}

It starts OK, the beeping occurs on the correct timing. BUT after a couple of hours I cronometrize it again, and instead of 3 seconds, on this opportunity the beeps are spaced about 4 seconds and a half.

Today in the morning, a similar test, made the beeping go from the programmed 3 seconds down into 1 second.

I would say that something WEIRD is going on ... maybe it is my particular ESP32 board, so I will try now with a newer board, which also is version 1 silicon inside. (The one I am trying now is Version 0).

euquiq commented 7 years ago

Maybe it is better for me to open another issue ?

cristianhumelnicu commented 7 years ago

@euquiq

warning esp_deep_sleep.h will be deprecated in the next release. Use esp_sleep.h instead.

BTW why dont u use delay(3000); instead deepsleep? .. Because is all about boot time of ESP32

euquiq commented 7 years ago

@cristianhumelnicu thanks for the EYESUP on the deprecation for esp_deep_sleep.h ...

On the delay(3000) issue, this is part of a burn - in test for a system that operates under solar panel / supercapacitors system so I really need to put the ESP32 to sleep.

I find weird that sleep time may go faster or slower than the programmed value. Sometimes for a significant %. I am at this time performing tests on different sleep times, to see it's behavior.

I do not think it is "Boot time" related, not at differences drifting from 3 seconds down to 1 second or 4.x seconds, when WIFI is off, etc.

But if you can throw any idea or light into it, I will try to understand / process it into my tests.

Thank you, Enrique

degehi commented 6 years ago

I tried the last revision, like @mikey60 @fiskfan and @cristianhumelnicu, those last days and I still have reboot problems. It seems better than before (I use ESP32 with a 1 hour deepsleep and it can run a day without any problem) but finally, sooner or later, it will hang again on wake-up. I tried less than 1 hour deepsleep but same results

If I come back with version 9512368, it works fine even after several days.

What I use:

#define uS_TO_S_FACTOR 1000000  /* Conversion factor for micro seconds to seconds */
#define TIME_TO_SLEEP  3600     /* Time ESP32 will go to sleep (in seconds) */
...
// init deep sleep
esp_sleep_enable_timer_wakeup((uint64_t)(TIME_TO_SLEEP) * uS_TO_S_FACTOR);
...
esp_deep_sleep_start();

Hardware: Sparkfun ESP32 Thing

Nobody has the same problem than I?

mvadu commented 6 years ago

I can see the same problem on a Adafruit Huzzah32 feather board. I have a simple modified deep sleep sketch which logs the booth count to a influxdb (which is plotted with grafana). Sleep duration is 120 seconds. As you can see below it randomly gets rest to 0. Max I have seen it grow is 700 times (close to a day).

image

cloudiaworld commented 6 years ago

Any news regarding this issue? I continue having the same issue on some boards; namely that the esp32 stops waking-up correctly after some (non-deterministic) number of cycles of sleep/wake up. I get, in addition to the DEEPSLEEP_RESET a TG0WDT_SYS_RESET. All the values I have stored as RTC_DATA_ATTR are gone after the problem occurs.

Any hints? I am using a ESP-WROOM-32 module.

Core Installation/update date: 08/02/2018 IDE name: Arduino IDE 1.8.5 Flash Frequency: 40Mhz / also happens at 80MHz Upload Speed: 115200

rst:0x5 (DEEPSLEEP_RESET),boot:0x12 (SPI_FAST_FLASH_BOOT) ets Jun 8 2016 00:22:57

rst:0x7 (TG0WDT_SYS_RESET),boot:0x12 (SPI_FAST_FLASH_BOOT) ets Jun 8 2016 00:22:57

rst:0x7 (TG0WDT_SYS_RESET),boot:0x12 (SPI_FAST_FLASH_BOOT) configsip: 0, SPIWP:0xee clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00 mode:DIO, clock div:1 load:0x3fff0018,len:4 load:0x3fff001c,len:956 load:0x40078000,len:0 load:0x40078000,len:13076 entry 0x40078a58

alexisartus commented 6 years ago

Hi, I don't know about the resolution but I have the same problem. My 2 cents : I observed that the board is heating when it hangs. Sometimes after a long hanging time (10 hours for my last observation), the esp unlock itself and my sketch execute correctly for a random time until it hangs again. Very annoying problem for critical usage like lift pump management in my case.

misan commented 6 years ago

Same problem here. It works for a while but eventually does not wake up. Or more exactly, it hangs on wake-up, as the fact the chip is hot makes me think it is no longer in deep-sleep.

For low-power IoT applications (as it is mine) this issue is a deal-breaker.

wagnerfl85 commented 6 years ago

Same problem here, i also use a ESP32 Dev Module and it get stuck after some time. My sketch runs as follows:

  1. wakeup
  2. connect to wifi
  3. get data from BME280
  4. send data via mqtt to openhab
  5. go to deep_sleep
  6. wakeup after 5 Minutes

The last run was about 30-35 hours without a problem but then stucks again. After a button reset it doe work again.

gianky69 commented 6 years ago

I have a similar sketch like @wagnerfl85 (ESP32, wifi, BME data...) . I send data to Home Assistant via MQTT. Using latest Arduino build the ESP32 battery module hangs after 2-3 hours!

mkihr commented 6 years ago

Same issue here. With both adafruit feather and WEMOS ESP32. Hangup when wakeup from deep sleep. I only tried with 1 to 10 minutes. After some wakeup, it stuck. Can be after 10 or after 700. As I see here this is an ongoing issue for long time. Will there be a solution?

axelisart commented 6 years ago

Hi everybody. I don't know if it can help but here are some observations again : I tried with a raw esp32 (just the chip, not mount in any dev board) and I am near 1 month without any stall. It represent 3786 wakes as it wakes every 10mn. The esp32 is just connected to an SHT31 sensor to get temp/hdty. It is powered through a tsp-03 step down buck (220v to 3,3v). I have lot of different ESP32 and ESP8266 Chinese dev boards working in parallel in the same wake up frequency and every of them stalled lot of times during the same period. So for the moment my conclusion is that it is maybe not due to the ESP chip itself but more to the board it is attached. So if you absolutely need to run a project with ESP, look a my workaround. I used a Board Plate Pinboard Convertor to solder the esp32 (50 cents) and an ESP-WROOM32 (3$). I just soldered required pins for my sht sensor and tx/rx to program it. It is just a bit difficult to solder chip pin to the board but it is feasible. I will keep posting here if I see any stall for my "naked" ESP32.

misan commented 6 years ago

That is a very good point @axelisart I am going to monitor what happens to the power supply during the wake-up from sleep. It may well be that many of the existing boards are not properly designed to handle well this sudden load change. Thanks for reporting it, as many of us are trying to figure out why we could not get a reliable result when apparently others have no complaints.

misan commented 6 years ago

No wonder there is wake-up trouble, supply rail looks like sh*t on restart. Next stop is to get a decent 3v3 supply.

image

stickbreaker commented 6 years ago

@misan I see those droops (5 I think) are off scale, How far down does they go?

Chuck.

misan commented 6 years ago

It appears they go almost 1Volt down.

image

stickbreaker commented 6 years ago

@misan Wow, that regulator is useless, If I am reading you scope correctly, 800mV droop, 800mV overshoot. So the 3.3V drops down to 2.5V. A 24% reduction! and then jumps to 4.1V on the rebound. That is ridiculous.

Chuck.