tasmota-webserial-esptool 9.2.21 → 9.2.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/const.d.ts CHANGED
@@ -307,7 +307,7 @@ export declare const ESP32P4_PMU_EXT_LDO_P0_0P1A_REG: number;
307
307
  export declare const ESP32P4_PMU_0P1A_TARGET0_0: number;
308
308
  export declare const ESP32P4_PMU_0P1A_FORCE_TIEH_SEL_0: number;
309
309
  export declare const ESP32P4_PMU_DATE_REG: number;
310
- export declare const ESP32S31_SPI_REG_BASE = 542113792;
310
+ export declare const ESP32S31_SPI_REG_BASE = 542117888;
311
311
  export declare const ESP32S31_BASEFUSEADDR = 544296960;
312
312
  export declare const ESP32S31_EFUSE_BLOCK1_ADDR: number;
313
313
  export declare const ESP32S31_MACFUSEADDR: number;
@@ -319,6 +319,11 @@ export declare const ESP32S31_SPI_MISO_DLEN_OFFS = 40;
319
319
  export declare const ESP32S31_SPI_W0_OFFS = 88;
320
320
  export declare const ESP32S31_UART_DATE_REG_ADDR: number;
321
321
  export declare const ESP32S31_BOOTLOADER_FLASH_OFFSET = 8192;
322
+ export declare const ESP32S31_DR_REG_LP_WDT_BASE = 545263616;
323
+ export declare const ESP32S31_RTC_CNTL_WDTCONFIG0_REG: number;
324
+ export declare const ESP32S31_RTC_CNTL_WDTCONFIG1_REG: number;
325
+ export declare const ESP32S31_RTC_CNTL_WDTWPROTECT_REG: number;
326
+ export declare const ESP32S31_RTC_CNTL_WDT_WKEY = 1356348065;
322
327
  export interface SpiFlashAddresses {
323
328
  regBase: number;
324
329
  baseFuse: number;
package/dist/const.js CHANGED
@@ -352,10 +352,10 @@ export const ESP32P4_PMU_EXT_LDO_P0_0P1A_REG = ESP32P4_DR_REG_PMU_BASE + 0x1b8;
352
352
  export const ESP32P4_PMU_0P1A_TARGET0_0 = 0xff << 23;
353
353
  export const ESP32P4_PMU_0P1A_FORCE_TIEH_SEL_0 = 1 << 7;
354
354
  export const ESP32P4_PMU_DATE_REG = ESP32P4_DR_REG_PMU_BASE + 0x3fc;
355
- export const ESP32S31_SPI_REG_BASE = 0x20500000;
355
+ export const ESP32S31_SPI_REG_BASE = 0x20501000;
356
356
  export const ESP32S31_BASEFUSEADDR = 0x20715000;
357
- export const ESP32S31_EFUSE_BLOCK1_ADDR = ESP32S31_BASEFUSEADDR + 0x044;
358
- export const ESP32S31_MACFUSEADDR = 0x20715000 + 0x044;
357
+ export const ESP32S31_EFUSE_BLOCK1_ADDR = ESP32S31_BASEFUSEADDR + 0x050;
358
+ export const ESP32S31_MACFUSEADDR = ESP32S31_BASEFUSEADDR + 0x050;
359
359
  export const ESP32S31_SPI_USR_OFFS = 0x18;
360
360
  export const ESP32S31_SPI_USR1_OFFS = 0x1c;
361
361
  export const ESP32S31_SPI_USR2_OFFS = 0x20;
@@ -364,6 +364,12 @@ export const ESP32S31_SPI_MISO_DLEN_OFFS = 0x28;
364
364
  export const ESP32S31_SPI_W0_OFFS = 0x58;
365
365
  export const ESP32S31_UART_DATE_REG_ADDR = 0x2038a000 + 0x8c;
366
366
  export const ESP32S31_BOOTLOADER_FLASH_OFFSET = 0x2000;
367
+ // ESP32-S31 RTC Watchdog Timer registers (LP_WDT)
368
+ export const ESP32S31_DR_REG_LP_WDT_BASE = 0x20801000;
369
+ export const ESP32S31_RTC_CNTL_WDTCONFIG0_REG = ESP32S31_DR_REG_LP_WDT_BASE + 0x0000; // LP_WDT_RWDT_CONFIG0_REG
370
+ export const ESP32S31_RTC_CNTL_WDTCONFIG1_REG = ESP32S31_DR_REG_LP_WDT_BASE + 0x0004; // LP_WDT_RWDT_CONFIG1_REG
371
+ export const ESP32S31_RTC_CNTL_WDTWPROTECT_REG = ESP32S31_DR_REG_LP_WDT_BASE + 0x0018; // LP_WDT_RWDT_WPROTECT_REG
372
+ export const ESP32S31_RTC_CNTL_WDT_WKEY = 0x50d83aa1;
367
373
  export const SYNC_PACKET = toByteArray("\x07\x07\x12 UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU");
368
374
  export const CHIP_DETECT_MAGIC_REG_ADDR = 0x40001000;
369
375
  // Image Chip IDs (used by ESP32-C3 and later for chip detection)
@@ -189,7 +189,7 @@ export declare class ESPLoader extends EventTarget {
189
189
  */
190
190
  watchdogReset(): Promise<void>;
191
191
  /**
192
- * RTC watchdog timer reset for ESP32-S2, ESP32-S3, and ESP32-P4
192
+ * RTC watchdog timer reset for ESP32-S2, ESP32-S3, ESP32-P4, and ESP32-S31
193
193
  * Uses specific registers for each chip family
194
194
  * Note: ESP32-C3 does NOT boot correctly after WDT reset
195
195
  * Note: ESP32-C5, ESP32-C6, ESP32-C61, ESP32-H2 do NOT support WDT reset (no usable RTC WDT path)
@@ -1,5 +1,5 @@
1
1
  /// <reference types="@types/w3c-web-serial" />
2
- import { CHIP_FAMILY_ESP32, CHIP_FAMILY_ESP32S2, CHIP_FAMILY_ESP32S3, CHIP_FAMILY_ESP32C2, CHIP_FAMILY_ESP32C3, CHIP_FAMILY_ESP32C5, CHIP_FAMILY_ESP32C6, CHIP_FAMILY_ESP32C61, CHIP_FAMILY_ESP32H2, CHIP_FAMILY_ESP32H4, CHIP_FAMILY_ESP32H21, CHIP_FAMILY_ESP32P4, CHIP_FAMILY_ESP32S31, CHIP_FAMILY_ESP8266, MAX_TIMEOUT, DEFAULT_TIMEOUT, ERASE_REGION_TIMEOUT_PER_MB, ESP_CHANGE_BAUDRATE, ESP_CHECKSUM_MAGIC, ESP_FLASH_BEGIN, ESP_FLASH_DATA, ESP_FLASH_END, ESP_MEM_BEGIN, ESP_MEM_DATA, ESP_MEM_END, ESP_READ_REG, ESP_WRITE_REG, ESP_SPI_ATTACH, ESP_SYNC, ESP_GET_SECURITY_INFO, FLASH_SECTOR_SIZE, FLASH_WRITE_SIZE, STUB_FLASH_WRITE_SIZE, MEM_END_ROM_TIMEOUT, ROM_INVALID_RECV_MSG, SYNC_PACKET, SYNC_TIMEOUT, USB_RAM_BLOCK, ESP_ERASE_FLASH, ESP_ERASE_REGION, ESP_READ_FLASH, CHIP_ERASE_TIMEOUT, FLASH_READ_TIMEOUT, timeoutPerMb, ESP_ROM_BAUD, USB_JTAG_SERIAL_PID, ESP_FLASH_DEFL_BEGIN, ESP_FLASH_DEFL_DATA, ESP_FLASH_DEFL_END, getSpiFlashAddresses, DETECTED_FLASH_SIZES, CHIP_DETECT_MAGIC_REG_ADDR, CHIP_DETECT_MAGIC_VALUES, CHIP_ID_TO_INFO, ESP32_BASEFUSEADDR, ESP32_APB_CTL_DATE_ADDR, ESP32S2_EFUSE_BLOCK1_ADDR, ESP32S3_EFUSE_BLOCK1_ADDR, ESP32C2_EFUSE_BLOCK2_ADDR, ESP32C5_EFUSE_BLOCK1_ADDR, ESP32C6_EFUSE_BLOCK1_ADDR, ESP32C61_EFUSE_BLOCK1_ADDR, ESP32H2_EFUSE_BLOCK1_ADDR, ESP32P4_EFUSE_BLOCK1_ADDR, ESP32S31_EFUSE_BLOCK1_ADDR, SlipReadError, ESP32S2_RTC_CNTL_WDTWPROTECT_REG, ESP32S2_RTC_CNTL_WDTCONFIG0_REG, ESP32S2_RTC_CNTL_WDTCONFIG1_REG, ESP32S2_RTC_CNTL_WDT_WKEY, ESP32S2_RTC_CNTL_OPTION1_REG, ESP32S2_RTC_CNTL_FORCE_DOWNLOAD_BOOT_MASK, ESP32S3_RTC_CNTL_WDTWPROTECT_REG, ESP32S3_RTC_CNTL_WDTCONFIG0_REG, ESP32S3_RTC_CNTL_WDTCONFIG1_REG, ESP32S3_RTC_CNTL_WDT_WKEY, ESP32S3_RTC_CNTL_OPTION1_REG, ESP32S3_RTC_CNTL_FORCE_DOWNLOAD_BOOT_MASK, ESP32C3_EFUSE_RD_MAC_SPI_SYS_3_REG, ESP32C3_EFUSE_RD_MAC_SPI_SYS_5_REG, ESP32C5_UART_CLKDIV_REG, ESP32C5_PCR_SYSCLK_CONF_REG, ESP32C5_PCR_SYSCLK_XTAL_FREQ_V, ESP32C5_PCR_SYSCLK_XTAL_FREQ_S, ESP32P4_RTC_CNTL_WDTWPROTECT_REG, ESP32P4_RTC_CNTL_WDTCONFIG0_REG, ESP32P4_RTC_CNTL_WDTCONFIG1_REG, ESP32P4_RTC_CNTL_WDT_WKEY, ESP32P4_RTC_CNTL_OPTION1_REG, ESP32P4_RTC_CNTL_FORCE_DOWNLOAD_BOOT_MASK, ESP32P4_LP_SYSTEM_REG_ANA_XPD_PAD_GROUP_REG, ESP32P4_PMU_EXT_LDO_P0_0P1A_ANA_REG, ESP32P4_PMU_ANA_0P1A_EN_CUR_LIM_0, ESP32P4_PMU_EXT_LDO_P0_0P1A_REG, ESP32P4_PMU_0P1A_TARGET0_0, ESP32P4_PMU_0P1A_FORCE_TIEH_SEL_0, ESP32P4_PMU_DATE_REG, ESP32S2_UARTDEV_BUF_NO, ESP32S2_UARTDEV_BUF_NO_USB_OTG, ESP32S3_UARTDEV_BUF_NO, ESP32S3_UARTDEV_BUF_NO_USB_OTG, ESP32S3_UARTDEV_BUF_NO_USB_JTAG_SERIAL, ESP32C3_UARTDEV_BUF_NO_USB_JTAG_SERIAL, ESP32C3_BUF_UART_NO_OFFSET, ESP32C5_UARTDEV_BUF_NO, ESP32C5_UARTDEV_BUF_NO_USB_JTAG_SERIAL, ESP32C6_UARTDEV_BUF_NO, ESP32C6_UARTDEV_BUF_NO_USB_JTAG_SERIAL, ESP32C61_UARTDEV_BUF_NO_REV_LE2, ESP32C61_UARTDEV_BUF_NO_REV_GT2, ESP32C61_UARTDEV_BUF_NO_USB_JTAG_SERIAL_REV_LE2, ESP32C61_UARTDEV_BUF_NO_USB_JTAG_SERIAL_REV_GT2, ESP32H2_UARTDEV_BUF_NO, ESP32H2_UARTDEV_BUF_NO_USB_JTAG_SERIAL, ESP32H4_UARTDEV_BUF_NO, ESP32H4_UARTDEV_BUF_NO_USB_JTAG_SERIAL, ESP32P4_UARTDEV_BUF_NO_REV0, ESP32P4_UARTDEV_BUF_NO_REV300, ESP32P4_UARTDEV_BUF_NO_USB_OTG, ESP32P4_UARTDEV_BUF_NO_USB_JTAG_SERIAL, } from "./const";
2
+ import { CHIP_FAMILY_ESP32, CHIP_FAMILY_ESP32S2, CHIP_FAMILY_ESP32S3, CHIP_FAMILY_ESP32C2, CHIP_FAMILY_ESP32C3, CHIP_FAMILY_ESP32C5, CHIP_FAMILY_ESP32C6, CHIP_FAMILY_ESP32C61, CHIP_FAMILY_ESP32H2, CHIP_FAMILY_ESP32H4, CHIP_FAMILY_ESP32H21, CHIP_FAMILY_ESP32P4, CHIP_FAMILY_ESP32S31, CHIP_FAMILY_ESP8266, MAX_TIMEOUT, DEFAULT_TIMEOUT, ERASE_REGION_TIMEOUT_PER_MB, ESP_CHANGE_BAUDRATE, ESP_CHECKSUM_MAGIC, ESP_FLASH_BEGIN, ESP_FLASH_DATA, ESP_FLASH_END, ESP_MEM_BEGIN, ESP_MEM_DATA, ESP_MEM_END, ESP_READ_REG, ESP_WRITE_REG, ESP_SPI_ATTACH, ESP_SYNC, ESP_GET_SECURITY_INFO, FLASH_SECTOR_SIZE, FLASH_WRITE_SIZE, STUB_FLASH_WRITE_SIZE, MEM_END_ROM_TIMEOUT, ROM_INVALID_RECV_MSG, SYNC_PACKET, SYNC_TIMEOUT, USB_RAM_BLOCK, ESP_ERASE_FLASH, ESP_ERASE_REGION, ESP_READ_FLASH, CHIP_ERASE_TIMEOUT, FLASH_READ_TIMEOUT, timeoutPerMb, ESP_ROM_BAUD, USB_JTAG_SERIAL_PID, ESP_FLASH_DEFL_BEGIN, ESP_FLASH_DEFL_DATA, ESP_FLASH_DEFL_END, getSpiFlashAddresses, DETECTED_FLASH_SIZES, CHIP_DETECT_MAGIC_REG_ADDR, CHIP_DETECT_MAGIC_VALUES, CHIP_ID_TO_INFO, ESP32_BASEFUSEADDR, ESP32_APB_CTL_DATE_ADDR, ESP32S2_EFUSE_BLOCK1_ADDR, ESP32S3_EFUSE_BLOCK1_ADDR, ESP32C2_EFUSE_BLOCK2_ADDR, ESP32C5_EFUSE_BLOCK1_ADDR, ESP32C6_EFUSE_BLOCK1_ADDR, ESP32C61_EFUSE_BLOCK1_ADDR, 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, ESP32S2_RTC_CNTL_WDTCONFIG1_REG, ESP32S2_RTC_CNTL_WDT_WKEY, ESP32S2_RTC_CNTL_OPTION1_REG, ESP32S2_RTC_CNTL_FORCE_DOWNLOAD_BOOT_MASK, ESP32S3_RTC_CNTL_WDTWPROTECT_REG, ESP32S3_RTC_CNTL_WDTCONFIG0_REG, ESP32S3_RTC_CNTL_WDTCONFIG1_REG, ESP32S3_RTC_CNTL_WDT_WKEY, ESP32S3_RTC_CNTL_OPTION1_REG, ESP32S3_RTC_CNTL_FORCE_DOWNLOAD_BOOT_MASK, ESP32C3_EFUSE_RD_MAC_SPI_SYS_3_REG, ESP32C3_EFUSE_RD_MAC_SPI_SYS_5_REG, ESP32C5_UART_CLKDIV_REG, ESP32C5_PCR_SYSCLK_CONF_REG, ESP32C5_PCR_SYSCLK_XTAL_FREQ_V, ESP32C5_PCR_SYSCLK_XTAL_FREQ_S, ESP32P4_RTC_CNTL_WDTWPROTECT_REG, ESP32P4_RTC_CNTL_WDTCONFIG0_REG, ESP32P4_RTC_CNTL_WDTCONFIG1_REG, ESP32P4_RTC_CNTL_WDT_WKEY, ESP32P4_RTC_CNTL_OPTION1_REG, ESP32P4_RTC_CNTL_FORCE_DOWNLOAD_BOOT_MASK, ESP32P4_LP_SYSTEM_REG_ANA_XPD_PAD_GROUP_REG, ESP32P4_PMU_EXT_LDO_P0_0P1A_ANA_REG, ESP32P4_PMU_ANA_0P1A_EN_CUR_LIM_0, ESP32P4_PMU_EXT_LDO_P0_0P1A_REG, ESP32P4_PMU_0P1A_TARGET0_0, ESP32P4_PMU_0P1A_FORCE_TIEH_SEL_0, ESP32P4_PMU_DATE_REG, ESP32S2_UARTDEV_BUF_NO, ESP32S2_UARTDEV_BUF_NO_USB_OTG, ESP32S3_UARTDEV_BUF_NO, ESP32S3_UARTDEV_BUF_NO_USB_OTG, ESP32S3_UARTDEV_BUF_NO_USB_JTAG_SERIAL, ESP32C3_UARTDEV_BUF_NO_USB_JTAG_SERIAL, ESP32C3_BUF_UART_NO_OFFSET, ESP32C5_UARTDEV_BUF_NO, ESP32C5_UARTDEV_BUF_NO_USB_JTAG_SERIAL, ESP32C6_UARTDEV_BUF_NO, ESP32C6_UARTDEV_BUF_NO_USB_JTAG_SERIAL, ESP32C61_UARTDEV_BUF_NO_REV_LE2, ESP32C61_UARTDEV_BUF_NO_REV_GT2, ESP32C61_UARTDEV_BUF_NO_USB_JTAG_SERIAL_REV_LE2, ESP32C61_UARTDEV_BUF_NO_USB_JTAG_SERIAL_REV_GT2, ESP32H2_UARTDEV_BUF_NO, ESP32H2_UARTDEV_BUF_NO_USB_JTAG_SERIAL, ESP32H4_UARTDEV_BUF_NO, ESP32H4_UARTDEV_BUF_NO_USB_JTAG_SERIAL, ESP32P4_UARTDEV_BUF_NO_REV0, ESP32P4_UARTDEV_BUF_NO_REV300, ESP32P4_UARTDEV_BUF_NO_USB_OTG, ESP32P4_UARTDEV_BUF_NO_USB_JTAG_SERIAL, } from "./const";
3
3
  import { getStubCode } from "./stubs";
4
4
  import { hexFormatter, padTo, sleep, slipEncode, toHex } from "./util";
5
5
  import { deflate } from "pako";
@@ -1226,7 +1226,7 @@ export class ESPLoader extends EventTarget {
1226
1226
  await this.rtcWdtResetChipSpecific();
1227
1227
  }
1228
1228
  /**
1229
- * RTC watchdog timer reset for ESP32-S2, ESP32-S3, and ESP32-P4
1229
+ * RTC watchdog timer reset for ESP32-S2, ESP32-S3, ESP32-P4, and ESP32-S31
1230
1230
  * Uses specific registers for each chip family
1231
1231
  * Note: ESP32-C3 does NOT boot correctly after WDT reset
1232
1232
  * Note: ESP32-C5, ESP32-C6, ESP32-C61, ESP32-H2 do NOT support WDT reset (no usable RTC WDT path)
@@ -1256,6 +1256,13 @@ export class ESPLoader extends EventTarget {
1256
1256
  WDTCONFIG1_REG = ESP32P4_RTC_CNTL_WDTCONFIG1_REG;
1257
1257
  WDT_WKEY = ESP32P4_RTC_CNTL_WDT_WKEY;
1258
1258
  }
1259
+ else if (this.chipFamily === CHIP_FAMILY_ESP32S31) {
1260
+ // S31 uses LP_WDT (Low Power Watchdog Timer)
1261
+ WDTWPROTECT_REG = ESP32S31_RTC_CNTL_WDTWPROTECT_REG;
1262
+ WDTCONFIG0_REG = ESP32S31_RTC_CNTL_WDTCONFIG0_REG;
1263
+ WDTCONFIG1_REG = ESP32S31_RTC_CNTL_WDTCONFIG1_REG;
1264
+ WDT_WKEY = ESP32S31_RTC_CNTL_WDT_WKEY;
1265
+ }
1259
1266
  else {
1260
1267
  throw new Error(`rtcWdtResetChipSpecific() is not supported for ${this.chipFamily}`);
1261
1268
  }
@@ -1301,7 +1308,8 @@ export class ESPLoader extends EventTarget {
1301
1308
  // WDT reset is NOT supported by: ESP32-C5, ESP32-C6, ESP32-C61, ESP32-H2
1302
1309
  const supportsWdtReset = this.chipFamily === CHIP_FAMILY_ESP32S2 ||
1303
1310
  this.chipFamily === CHIP_FAMILY_ESP32S3 ||
1304
- this.chipFamily === CHIP_FAMILY_ESP32P4;
1311
+ this.chipFamily === CHIP_FAMILY_ESP32P4 ||
1312
+ this.chipFamily === CHIP_FAMILY_ESP32S31;
1305
1313
  if (!supportsWdtReset) {
1306
1314
  this.logger.debug(`${this.chipName} does not support WDT reset - using classic reset instead`);
1307
1315
  // Use classic reset for chips without WDT support
@@ -1413,7 +1421,8 @@ export class ESPLoader extends EventTarget {
1413
1421
  // C3, C5, C6, C61, H2 do NOT boot correctly after WDT reset
1414
1422
  const supportsWdtReset = this.chipFamily === CHIP_FAMILY_ESP32S2 ||
1415
1423
  this.chipFamily === CHIP_FAMILY_ESP32S3 ||
1416
- this.chipFamily === CHIP_FAMILY_ESP32P4;
1424
+ this.chipFamily === CHIP_FAMILY_ESP32P4 ||
1425
+ this.chipFamily === CHIP_FAMILY_ESP32S31;
1417
1426
  if (supportsWdtReset) {
1418
1427
  this.logger.debug("USB-JTAG/OTG detected - using WDT reset");
1419
1428
  // Get USB mode details
@@ -0,0 +1,8 @@
1
+ {
2
+ "entry": 788533248,
3
+ "text": "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",
4
+ "text_start": 788533248,
5
+ "data": "ECIAL0wiAS+OEwAvjhMAL44TAC+OEwAvjhMAL44TAC+OEwAvjhMAL44TAC+OEwAvjhMAL44TAC+OEwAvjhMAL44TAC+OEwAvjhMAL44TAC+OEwAvjhMAL44TAC+OEwAvjhMAL44TAC+OEwAvjhMAL44TAC+qGgAvthoALwIbAC8uGwAvuBsAL2IbAC+MGgAv+hsAL3YcAC+cHAAvQhoAL4ocAC9CGgAvAh0ALxIdAC8WHQAvAhsAL24dAC+CHQAv",
6
+ "data_start": 788647348,
7
+ "bss_start": 788570112
8
+ }
@@ -4,8 +4,7 @@ export const getStubCode = async (chipFamily, chipRevision) => {
4
4
  let stubcode;
5
5
  // Chips without stub support yet
6
6
  if (chipFamily == CHIP_FAMILY_ESP32H4 ||
7
- chipFamily == CHIP_FAMILY_ESP32H21 ||
8
- chipFamily == CHIP_FAMILY_ESP32S31) {
7
+ chipFamily == CHIP_FAMILY_ESP32H21) {
9
8
  return null;
10
9
  }
11
10
  if (chipFamily == CHIP_FAMILY_ESP32) {
@@ -47,6 +46,9 @@ export const getStubCode = async (chipFamily, chipRevision) => {
47
46
  stubcode = await import("./esp32p4.json");
48
47
  }
49
48
  }
49
+ else if (chipFamily == CHIP_FAMILY_ESP32S31) {
50
+ stubcode = await import("./esp32s31.json");
51
+ }
50
52
  else {
51
53
  // Unknown chip family - no stub available
52
54
  return null;
@@ -0,0 +1 @@
1
+ var A=788533248,B="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",E=788533248,F="ECIAL0wiAS+OEwAvjhMAL44TAC+OEwAvjhMAL44TAC+OEwAvjhMAL44TAC+OEwAvjhMAL44TAC+OEwAvjhMAL44TAC+OEwAvjhMAL44TAC+OEwAvjhMAL44TAC+OEwAvjhMAL44TAC+OEwAvjhMAL44TAC+qGgAvthoALwIbAC8uGwAvuBsAL2IbAC+MGgAv+hsAL3YcAC+cHAAvQhoAL4ocAC9CGgAvAh0ALxIdAC8WHQAvAhsAL24dAC+CHQAv",Q=788647348,w=788570112,g={entry:A,text:B,text_start:E,data:F,data_start:Q,bss_start:w};export{w as bss_start,F as data,Q as data_start,g as default,A as entry,B as text,E as text_start};