Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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.

15 changes: 12 additions & 3 deletions src/const.ts
Original file line number Diff line number Diff line change
Expand Up @@ -419,10 +419,10 @@ 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;
export const ESP32S31_EFUSE_BLOCK1_ADDR = ESP32S31_BASEFUSEADDR + 0x050;
export const ESP32S31_MACFUSEADDR = ESP32S31_BASEFUSEADDR + 0x050;
export const ESP32S31_SPI_USR_OFFS = 0x18;
export const ESP32S31_SPI_USR1_OFFS = 0x1c;
export const ESP32S31_SPI_USR2_OFFS = 0x20;
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