Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

11 changes: 10 additions & 1 deletion src/const.ts
Original file line number Diff line number Diff line change
Expand Up @@ -419,7 +419,7 @@ export const ESP32P4_PMU_0P1A_TARGET0_0 = 0xff << 23;
export const ESP32P4_PMU_0P1A_FORCE_TIEH_SEL_0 = 1 << 7;
export const ESP32P4_PMU_DATE_REG = ESP32P4_DR_REG_PMU_BASE + 0x3fc;

export const ESP32S31_SPI_REG_BASE = 0x20500000;
export const ESP32S31_SPI_REG_BASE = 0x20501000;
export const ESP32S31_BASEFUSEADDR = 0x20715000;
export const ESP32S31_EFUSE_BLOCK1_ADDR = ESP32S31_BASEFUSEADDR + 0x044;
export const ESP32S31_MACFUSEADDR = 0x20715000 + 0x044;
Expand All @@ -431,6 +431,15 @@ export const ESP32S31_SPI_MISO_DLEN_OFFS = 0x28;
export const ESP32S31_SPI_W0_OFFS = 0x58;
export const ESP32S31_UART_DATE_REG_ADDR = 0x2038a000 + 0x8c;
export const ESP32S31_BOOTLOADER_FLASH_OFFSET = 0x2000;
// ESP32-S31 RTC Watchdog Timer registers (LP_WDT)
export const ESP32S31_DR_REG_LP_WDT_BASE = 0x20801000;
export const ESP32S31_RTC_CNTL_WDTCONFIG0_REG =
ESP32S31_DR_REG_LP_WDT_BASE + 0x0000; // LP_WDT_RWDT_CONFIG0_REG
export const ESP32S31_RTC_CNTL_WDTCONFIG1_REG =
ESP32S31_DR_REG_LP_WDT_BASE + 0x0004; // LP_WDT_RWDT_CONFIG1_REG
export const ESP32S31_RTC_CNTL_WDTWPROTECT_REG =
ESP32S31_DR_REG_LP_WDT_BASE + 0x0018; // LP_WDT_RWDT_WPROTECT_REG
export const ESP32S31_RTC_CNTL_WDT_WKEY = 0x50d83aa1;

export interface SpiFlashAddresses {
regBase: number;
Expand Down
15 changes: 13 additions & 2 deletions src/esp_loader.ts
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,10 @@ import {
ESP32H2_EFUSE_BLOCK1_ADDR,
ESP32P4_EFUSE_BLOCK1_ADDR,
ESP32S31_EFUSE_BLOCK1_ADDR,
ESP32S31_RTC_CNTL_WDTWPROTECT_REG,
ESP32S31_RTC_CNTL_WDTCONFIG0_REG,
ESP32S31_RTC_CNTL_WDTCONFIG1_REG,
ESP32S31_RTC_CNTL_WDT_WKEY,
SlipReadError,
ESP32S2_RTC_CNTL_WDTWPROTECT_REG,
ESP32S2_RTC_CNTL_WDTCONFIG0_REG,
Expand Down Expand Up @@ -1640,6 +1644,12 @@ export class ESPLoader extends EventTarget {
WDTCONFIG0_REG = ESP32P4_RTC_CNTL_WDTCONFIG0_REG;
WDTCONFIG1_REG = ESP32P4_RTC_CNTL_WDTCONFIG1_REG;
WDT_WKEY = ESP32P4_RTC_CNTL_WDT_WKEY;
} else if (this.chipFamily === CHIP_FAMILY_ESP32S31) {
// S31 uses LP_WDT (Low Power Watchdog Timer)
WDTWPROTECT_REG = ESP32S31_RTC_CNTL_WDTWPROTECT_REG;
WDTCONFIG0_REG = ESP32S31_RTC_CNTL_WDTCONFIG0_REG;
WDTCONFIG1_REG = ESP32S31_RTC_CNTL_WDTCONFIG1_REG;
WDT_WKEY = ESP32S31_RTC_CNTL_WDT_WKEY;
} else {
throw new Error(
`rtcWdtResetChipSpecific() is not supported for ${this.chipFamily}`,
Expand Down Expand Up @@ -1700,12 +1710,13 @@ export class ESPLoader extends EventTarget {

// Check if chip supports WDT reset
// WDT reset is not needed for ESP32-C3
// WDT reset is supported by: ESP32-S2, ESP32-S3, ESP32-P4
// WDT reset is supported by: ESP32-S2, ESP32-S3, ESP32-P4, ESP32-S31
// WDT reset is NOT supported by: ESP32-C5, ESP32-C6, ESP32-C61, ESP32-H2
const supportsWdtReset =
this.chipFamily === CHIP_FAMILY_ESP32S2 ||
this.chipFamily === CHIP_FAMILY_ESP32S3 ||
this.chipFamily === CHIP_FAMILY_ESP32P4;
this.chipFamily === CHIP_FAMILY_ESP32P4 ||
this.chipFamily === CHIP_FAMILY_ESP32S31;

if (!supportsWdtReset) {
this.logger.debug(
Expand Down
8 changes: 8 additions & 0 deletions src/stubs/esp32s31.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"entry": 788533248,
"text": "ARG3pwAvN9cBLwbOIswmykrIk4cHABMHR9tj6ucE7wCQaRMH9f+FRyqEY+TnAO8QQEABRe8AMHqBRQFF7wBQcyKF7wCwaLdXQUmTh/eEkUUoAD7EhUTBKAlJJSxjHZUAaABhJLJF7wBQDX0s/bcjoAcAkQddt+MKJf/jEJT+7xCAN2Hd7xAAOMm/CcW31wEvI6qn2oKAt6cALyOgpwCCgLfXAS+Dp0fbEwUADIKHQREixDfUAS8TBETbBsaTBgAMHEBjCtUAkwawDWMN1QAiRLJAQQGChxMFsA2Cl",
"text_start": 788533248,
"data": "ECIAL0wiAS+OEwAvjhMAL44TAC+OEwAvjhMAL44TAC+OEwAvjhMAL44TAC+OEwAvjhMAL44TAC+OEwAvjhMAL44TAC+OEwAvjhMAL44TAC+OEwAvjhMAL44TAC+qGgAvthoALwIbAC8uGwAvuBsAL2IbAC+MGgAv+hsAL3YcAC+cHAAvQhoAL4ocAC9CGgAvAh0ALxIdAC8WHQAvAhsAL24dAC+CHQAv",
"data_start": 788647348,
"bss_start": 788570112
}
5 changes: 3 additions & 2 deletions src/stubs/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,7 @@ export const getStubCode = async (
// Chips without stub support yet
if (
chipFamily == CHIP_FAMILY_ESP32H4 ||
chipFamily == CHIP_FAMILY_ESP32H21 ||
chipFamily == CHIP_FAMILY_ESP32S31
chipFamily == CHIP_FAMILY_ESP32H21
) {
return null;
}
Expand Down Expand Up @@ -75,6 +74,8 @@ export const getStubCode = async (
} else {
stubcode = await import("./esp32p4.json");
}
} else if (chipFamily == CHIP_FAMILY_ESP32S31) {
stubcode = await import("./esp32s31.json");
} else {
// Unknown chip family - no stub available
return null;
Expand Down