Skip to content

Commit 188c162

Browse files
committed
fix: add delay after WDT reset for better stability
1 parent a6bceb7 commit 188c162

File tree

4 files changed

+12
-4
lines changed

4 files changed

+12
-4
lines changed

esptool/targets/esp32c3.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
# SPDX-License-Identifier: GPL-2.0-or-later
55

66
import struct
7+
from time import sleep
78
from typing import Dict
89

910
from .esp32 import ESP32ROM
@@ -255,13 +256,14 @@ def _post_connect(self):
255256
def hard_reset(self):
256257
if self.uses_usb_jtag_serial():
257258
self.rtc_wdt_reset()
259+
sleep(0.5) # wait for reset to take effect
258260
else:
259261
ESPLoader.hard_reset(self)
260262

261263
def rtc_wdt_reset(self):
262264
print("Hard resetting with RTC WDT...")
263265
self.write_reg(self.RTC_CNTL_WDTWPROTECT_REG, self.RTC_CNTL_WDT_WKEY) # unlock
264-
self.write_reg(self.RTC_CNTL_WDTCONFIG1_REG, 5000) # set WDT timeout
266+
self.write_reg(self.RTC_CNTL_WDTCONFIG1_REG, 2000) # set WDT timeout
265267
self.write_reg(
266268
self.RTC_CNTL_WDTCONFIG0_REG, (1 << 31) | (5 << 28) | (1 << 8) | 2
267269
) # enable WDT

esptool/targets/esp32p4.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
# SPDX-License-Identifier: GPL-2.0-or-later
55

66
import struct
7+
from time import sleep
78
from typing import Dict
89

910
from .esp32 import ESP32ROM
@@ -264,7 +265,7 @@ def check_spi_connection(self, spi_connection):
264265
def rtc_wdt_reset(self):
265266
print("Hard resetting with RTC WDT...")
266267
self.write_reg(self.RTC_CNTL_WDTWPROTECT_REG, self.RTC_CNTL_WDT_WKEY) # unlock
267-
self.write_reg(self.RTC_CNTL_WDTCONFIG1_REG, 5000) # set WDT timeout
268+
self.write_reg(self.RTC_CNTL_WDTCONFIG1_REG, 2000) # set WDT timeout
268269
self.write_reg(
269270
self.RTC_CNTL_WDTCONFIG0_REG, (1 << 31) | (5 << 28) | (1 << 8) | 2
270271
) # enable WDT
@@ -273,6 +274,7 @@ def rtc_wdt_reset(self):
273274
def hard_reset(self):
274275
if self.uses_usb_jtag_serial() or self.uses_usb_otg():
275276
self.rtc_wdt_reset()
277+
sleep(0.5) # wait for reset to take effect
276278
else:
277279
ESPLoader.hard_reset(self)
278280

esptool/targets/esp32s2.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
# SPDX-License-Identifier: GPL-2.0-or-later
55

66
import struct
7+
from time import sleep
78
from typing import Dict
89

910
from .esp32 import ESP32ROM
@@ -290,7 +291,7 @@ def _post_connect(self):
290291
def rtc_wdt_reset(self):
291292
print("Hard resetting with RTC WDT...")
292293
self.write_reg(self.RTC_CNTL_WDTWPROTECT_REG, self.RTC_CNTL_WDT_WKEY) # unlock
293-
self.write_reg(self.RTC_CNTL_WDTCONFIG1_REG, 5000) # set WDT timeout
294+
self.write_reg(self.RTC_CNTL_WDTCONFIG1_REG, 2000) # set WDT timeout
294295
self.write_reg(
295296
self.RTC_CNTL_WDTCONFIG0_REG, (1 << 31) | (5 << 28) | (1 << 8) | 2
296297
) # enable WDT
@@ -307,6 +308,7 @@ def hard_reset(self):
307308
and force_dl_reg & self.RTC_CNTL_FORCE_DOWNLOAD_BOOT_MASK == 0
308309
):
309310
self.rtc_wdt_reset()
311+
sleep(0.5) # wait for reset to take effect
310312
return
311313

312314
ESPLoader.hard_reset(self, uses_usb_otg)

esptool/targets/esp32s3.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
# SPDX-License-Identifier: GPL-2.0-or-later
55

66
import struct
7+
from time import sleep
78
from typing import Dict
89

910
from .esp32 import ESP32ROM
@@ -354,7 +355,7 @@ def _post_connect(self):
354355
def rtc_wdt_reset(self):
355356
print("Hard resetting with RTC WDT...")
356357
self.write_reg(self.RTC_CNTL_WDTWPROTECT_REG, self.RTC_CNTL_WDT_WKEY) # unlock
357-
self.write_reg(self.RTC_CNTL_WDTCONFIG1_REG, 5000) # set WDT timeout
358+
self.write_reg(self.RTC_CNTL_WDTCONFIG1_REG, 2000) # set WDT timeout
358359
self.write_reg(
359360
self.RTC_CNTL_WDTCONFIG0_REG, (1 << 31) | (5 << 28) | (1 << 8) | 2
360361
) # enable WDT
@@ -380,6 +381,7 @@ def hard_reset(self):
380381
and force_dl_reg & self.RTC_CNTL_FORCE_DOWNLOAD_BOOT_MASK == 0
381382
):
382383
self.rtc_wdt_reset()
384+
sleep(0.5) # wait for reset to take effect
383385
return
384386

385387
ESPLoader.hard_reset(self, uses_usb_otg)

0 commit comments

Comments
 (0)