mirror of
https://github.com/espressif/esptool.git
synced 2025-10-20 13:23:38 +08:00
fix: add delay after WDT reset for better stability
This commit is contained in:
@@ -4,6 +4,7 @@
|
|||||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
import struct
|
import struct
|
||||||
|
from time import sleep
|
||||||
from typing import Dict
|
from typing import Dict
|
||||||
|
|
||||||
from .esp32 import ESP32ROM
|
from .esp32 import ESP32ROM
|
||||||
@@ -255,13 +256,14 @@ class ESP32C3ROM(ESP32ROM):
|
|||||||
def hard_reset(self):
|
def hard_reset(self):
|
||||||
if self.uses_usb_jtag_serial():
|
if self.uses_usb_jtag_serial():
|
||||||
self.rtc_wdt_reset()
|
self.rtc_wdt_reset()
|
||||||
|
sleep(0.5) # wait for reset to take effect
|
||||||
else:
|
else:
|
||||||
ESPLoader.hard_reset(self)
|
ESPLoader.hard_reset(self)
|
||||||
|
|
||||||
def rtc_wdt_reset(self):
|
def rtc_wdt_reset(self):
|
||||||
print("Hard resetting with RTC WDT...")
|
print("Hard resetting with RTC WDT...")
|
||||||
self.write_reg(self.RTC_CNTL_WDTWPROTECT_REG, self.RTC_CNTL_WDT_WKEY) # unlock
|
self.write_reg(self.RTC_CNTL_WDTWPROTECT_REG, self.RTC_CNTL_WDT_WKEY) # unlock
|
||||||
self.write_reg(self.RTC_CNTL_WDTCONFIG1_REG, 5000) # set WDT timeout
|
self.write_reg(self.RTC_CNTL_WDTCONFIG1_REG, 2000) # set WDT timeout
|
||||||
self.write_reg(
|
self.write_reg(
|
||||||
self.RTC_CNTL_WDTCONFIG0_REG, (1 << 31) | (5 << 28) | (1 << 8) | 2
|
self.RTC_CNTL_WDTCONFIG0_REG, (1 << 31) | (5 << 28) | (1 << 8) | 2
|
||||||
) # enable WDT
|
) # enable WDT
|
||||||
|
@@ -4,6 +4,7 @@
|
|||||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
import struct
|
import struct
|
||||||
|
from time import sleep
|
||||||
from typing import Dict
|
from typing import Dict
|
||||||
|
|
||||||
from .esp32 import ESP32ROM
|
from .esp32 import ESP32ROM
|
||||||
@@ -264,7 +265,7 @@ class ESP32P4ROM(ESP32ROM):
|
|||||||
def rtc_wdt_reset(self):
|
def rtc_wdt_reset(self):
|
||||||
print("Hard resetting with RTC WDT...")
|
print("Hard resetting with RTC WDT...")
|
||||||
self.write_reg(self.RTC_CNTL_WDTWPROTECT_REG, self.RTC_CNTL_WDT_WKEY) # unlock
|
self.write_reg(self.RTC_CNTL_WDTWPROTECT_REG, self.RTC_CNTL_WDT_WKEY) # unlock
|
||||||
self.write_reg(self.RTC_CNTL_WDTCONFIG1_REG, 5000) # set WDT timeout
|
self.write_reg(self.RTC_CNTL_WDTCONFIG1_REG, 2000) # set WDT timeout
|
||||||
self.write_reg(
|
self.write_reg(
|
||||||
self.RTC_CNTL_WDTCONFIG0_REG, (1 << 31) | (5 << 28) | (1 << 8) | 2
|
self.RTC_CNTL_WDTCONFIG0_REG, (1 << 31) | (5 << 28) | (1 << 8) | 2
|
||||||
) # enable WDT
|
) # enable WDT
|
||||||
@@ -273,6 +274,7 @@ class ESP32P4ROM(ESP32ROM):
|
|||||||
def hard_reset(self):
|
def hard_reset(self):
|
||||||
if self.uses_usb_jtag_serial() or self.uses_usb_otg():
|
if self.uses_usb_jtag_serial() or self.uses_usb_otg():
|
||||||
self.rtc_wdt_reset()
|
self.rtc_wdt_reset()
|
||||||
|
sleep(0.5) # wait for reset to take effect
|
||||||
else:
|
else:
|
||||||
ESPLoader.hard_reset(self)
|
ESPLoader.hard_reset(self)
|
||||||
|
|
||||||
|
@@ -4,6 +4,7 @@
|
|||||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
import struct
|
import struct
|
||||||
|
from time import sleep
|
||||||
from typing import Dict
|
from typing import Dict
|
||||||
|
|
||||||
from .esp32 import ESP32ROM
|
from .esp32 import ESP32ROM
|
||||||
@@ -290,7 +291,7 @@ class ESP32S2ROM(ESP32ROM):
|
|||||||
def rtc_wdt_reset(self):
|
def rtc_wdt_reset(self):
|
||||||
print("Hard resetting with RTC WDT...")
|
print("Hard resetting with RTC WDT...")
|
||||||
self.write_reg(self.RTC_CNTL_WDTWPROTECT_REG, self.RTC_CNTL_WDT_WKEY) # unlock
|
self.write_reg(self.RTC_CNTL_WDTWPROTECT_REG, self.RTC_CNTL_WDT_WKEY) # unlock
|
||||||
self.write_reg(self.RTC_CNTL_WDTCONFIG1_REG, 5000) # set WDT timeout
|
self.write_reg(self.RTC_CNTL_WDTCONFIG1_REG, 2000) # set WDT timeout
|
||||||
self.write_reg(
|
self.write_reg(
|
||||||
self.RTC_CNTL_WDTCONFIG0_REG, (1 << 31) | (5 << 28) | (1 << 8) | 2
|
self.RTC_CNTL_WDTCONFIG0_REG, (1 << 31) | (5 << 28) | (1 << 8) | 2
|
||||||
) # enable WDT
|
) # enable WDT
|
||||||
@@ -307,6 +308,7 @@ class ESP32S2ROM(ESP32ROM):
|
|||||||
and force_dl_reg & self.RTC_CNTL_FORCE_DOWNLOAD_BOOT_MASK == 0
|
and force_dl_reg & self.RTC_CNTL_FORCE_DOWNLOAD_BOOT_MASK == 0
|
||||||
):
|
):
|
||||||
self.rtc_wdt_reset()
|
self.rtc_wdt_reset()
|
||||||
|
sleep(0.5) # wait for reset to take effect
|
||||||
return
|
return
|
||||||
|
|
||||||
ESPLoader.hard_reset(self, uses_usb_otg)
|
ESPLoader.hard_reset(self, uses_usb_otg)
|
||||||
|
@@ -4,6 +4,7 @@
|
|||||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
import struct
|
import struct
|
||||||
|
from time import sleep
|
||||||
from typing import Dict
|
from typing import Dict
|
||||||
|
|
||||||
from .esp32 import ESP32ROM
|
from .esp32 import ESP32ROM
|
||||||
@@ -354,7 +355,7 @@ class ESP32S3ROM(ESP32ROM):
|
|||||||
def rtc_wdt_reset(self):
|
def rtc_wdt_reset(self):
|
||||||
print("Hard resetting with RTC WDT...")
|
print("Hard resetting with RTC WDT...")
|
||||||
self.write_reg(self.RTC_CNTL_WDTWPROTECT_REG, self.RTC_CNTL_WDT_WKEY) # unlock
|
self.write_reg(self.RTC_CNTL_WDTWPROTECT_REG, self.RTC_CNTL_WDT_WKEY) # unlock
|
||||||
self.write_reg(self.RTC_CNTL_WDTCONFIG1_REG, 5000) # set WDT timeout
|
self.write_reg(self.RTC_CNTL_WDTCONFIG1_REG, 2000) # set WDT timeout
|
||||||
self.write_reg(
|
self.write_reg(
|
||||||
self.RTC_CNTL_WDTCONFIG0_REG, (1 << 31) | (5 << 28) | (1 << 8) | 2
|
self.RTC_CNTL_WDTCONFIG0_REG, (1 << 31) | (5 << 28) | (1 << 8) | 2
|
||||||
) # enable WDT
|
) # enable WDT
|
||||||
@@ -380,6 +381,7 @@ class ESP32S3ROM(ESP32ROM):
|
|||||||
and force_dl_reg & self.RTC_CNTL_FORCE_DOWNLOAD_BOOT_MASK == 0
|
and force_dl_reg & self.RTC_CNTL_FORCE_DOWNLOAD_BOOT_MASK == 0
|
||||||
):
|
):
|
||||||
self.rtc_wdt_reset()
|
self.rtc_wdt_reset()
|
||||||
|
sleep(0.5) # wait for reset to take effect
|
||||||
return
|
return
|
||||||
|
|
||||||
ESPLoader.hard_reset(self, uses_usb_otg)
|
ESPLoader.hard_reset(self, uses_usb_otg)
|
||||||
|
Reference in New Issue
Block a user