vs-code server

This commit is contained in:
2025-07-26 14:04:40 -04:00
parent 85c2166eaf
commit 0714b72f46
117 changed files with 50147 additions and 0 deletions

32
node_modules/esptool-js/lib/targets/esp32.d.ts generated vendored Normal file
View File

@@ -0,0 +1,32 @@
import { ESPLoader } from "../esploader.js";
import { ROM } from "./rom.js";
export declare class ESP32ROM extends ROM {
CHIP_NAME: string;
IMAGE_CHIP_ID: number;
EFUSE_RD_REG_BASE: number;
DR_REG_SYSCON_BASE: number;
UART_CLKDIV_REG: number;
UART_CLKDIV_MASK: number;
UART_DATE_REG_ADDR: number;
XTAL_CLK_DIVIDER: number;
FLASH_SIZES: {
[key: string]: number;
};
FLASH_WRITE_SIZE: number;
BOOTLOADER_FLASH_OFFSET: number;
SPI_REG_BASE: number;
SPI_USR_OFFS: number;
SPI_USR1_OFFS: number;
SPI_USR2_OFFS: number;
SPI_W0_OFFS: number;
SPI_MOSI_DLEN_OFFS: number;
SPI_MISO_DLEN_OFFS: number;
readEfuse(loader: ESPLoader, offset: number): Promise<number>;
getPkgVersion(loader: ESPLoader): Promise<number>;
getChipRevision(loader: ESPLoader): Promise<number>;
getChipDescription(loader: ESPLoader): Promise<string>;
getChipFeatures(loader: ESPLoader): Promise<string[]>;
getCrystalFreq(loader: ESPLoader): Promise<number>;
_d2h(d: number): string;
readMac(loader: ESPLoader): Promise<string>;
}

185
node_modules/esptool-js/lib/targets/esp32.js generated vendored Normal file
View File

@@ -0,0 +1,185 @@
import { ROM } from "./rom.js";
export class ESP32ROM extends ROM {
constructor() {
super(...arguments);
this.CHIP_NAME = "ESP32";
this.IMAGE_CHIP_ID = 0;
this.EFUSE_RD_REG_BASE = 0x3ff5a000;
this.DR_REG_SYSCON_BASE = 0x3ff66000;
this.UART_CLKDIV_REG = 0x3ff40014;
this.UART_CLKDIV_MASK = 0xfffff;
this.UART_DATE_REG_ADDR = 0x60000078;
this.XTAL_CLK_DIVIDER = 1;
this.FLASH_SIZES = {
"1MB": 0x00,
"2MB": 0x10,
"4MB": 0x20,
"8MB": 0x30,
"16MB": 0x40,
};
this.FLASH_WRITE_SIZE = 0x400;
this.BOOTLOADER_FLASH_OFFSET = 0x1000;
this.SPI_REG_BASE = 0x3ff42000;
this.SPI_USR_OFFS = 0x1c;
this.SPI_USR1_OFFS = 0x20;
this.SPI_USR2_OFFS = 0x24;
this.SPI_W0_OFFS = 0x80;
this.SPI_MOSI_DLEN_OFFS = 0x28;
this.SPI_MISO_DLEN_OFFS = 0x2c;
}
async readEfuse(loader, offset) {
const addr = this.EFUSE_RD_REG_BASE + 4 * offset;
loader.debug("Read efuse " + addr);
return await loader.readReg(addr);
}
async getPkgVersion(loader) {
const word3 = await this.readEfuse(loader, 3);
let pkgVersion = (word3 >> 9) & 0x07;
pkgVersion += ((word3 >> 2) & 0x1) << 3;
return pkgVersion;
}
async getChipRevision(loader) {
const word3 = await this.readEfuse(loader, 3);
const word5 = await this.readEfuse(loader, 5);
const apbCtlDate = await loader.readReg(this.DR_REG_SYSCON_BASE + 0x7c);
const revBit0 = (word3 >> 15) & 0x1;
const revBit1 = (word5 >> 20) & 0x1;
const revBit2 = (apbCtlDate >> 31) & 0x1;
if (revBit0 != 0) {
if (revBit1 != 0) {
if (revBit2 != 0) {
return 3;
}
else {
return 2;
}
}
else {
return 1;
}
}
return 0;
}
async getChipDescription(loader) {
const chipDesc = [
"ESP32-D0WDQ6",
"ESP32-D0WD",
"ESP32-D2WD",
"",
"ESP32-U4WDH",
"ESP32-PICO-D4",
"ESP32-PICO-V3-02",
];
let chipName = "";
const pkgVersion = await this.getPkgVersion(loader);
const chipRevision = await this.getChipRevision(loader);
const rev3 = chipRevision == 3;
const single_core = (await this.readEfuse(loader, 3)) & (1 << 0);
if (single_core != 0) {
chipDesc[0] = "ESP32-S0WDQ6";
chipDesc[1] = "ESP32-S0WD";
}
if (rev3) {
chipDesc[5] = "ESP32-PICO-V3";
}
if (pkgVersion >= 0 && pkgVersion <= 6) {
chipName = chipDesc[pkgVersion];
}
else {
chipName = "Unknown ESP32";
}
if (rev3 && (pkgVersion === 0 || pkgVersion === 1)) {
chipName += "-V3";
}
return chipName + " (revision " + chipRevision + ")";
}
async getChipFeatures(loader) {
const features = ["Wi-Fi"];
const word3 = await this.readEfuse(loader, 3);
const chipVerDisBt = word3 & (1 << 1);
if (chipVerDisBt === 0) {
features.push(" BT");
}
const chipVerDisAppCpu = word3 & (1 << 0);
if (chipVerDisAppCpu !== 0) {
features.push(" Single Core");
}
else {
features.push(" Dual Core");
}
const chipCpuFreqRated = word3 & (1 << 13);
if (chipCpuFreqRated !== 0) {
const chipCpuFreqLow = word3 & (1 << 12);
if (chipCpuFreqLow !== 0) {
features.push(" 160MHz");
}
else {
features.push(" 240MHz");
}
}
const pkgVersion = await this.getPkgVersion(loader);
if ([2, 4, 5, 6].indexOf(pkgVersion) !== -1) {
features.push(" Embedded Flash");
}
if (pkgVersion === 6) {
features.push(" Embedded PSRAM");
}
const word4 = await this.readEfuse(loader, 4);
const adcVref = (word4 >> 8) & 0x1f;
if (adcVref !== 0) {
features.push(" VRef calibration in efuse");
}
const blk3PartRes = (word3 >> 14) & 0x1;
if (blk3PartRes !== 0) {
features.push(" BLK3 partially reserved");
}
const word6 = await this.readEfuse(loader, 6);
const codingScheme = word6 & 0x3;
const codingSchemeArr = ["None", "3/4", "Repeat (UNSUPPORTED)", "Invalid"];
features.push(" Coding Scheme " + codingSchemeArr[codingScheme]);
return features;
}
async getCrystalFreq(loader) {
const uartDiv = (await loader.readReg(this.UART_CLKDIV_REG)) & this.UART_CLKDIV_MASK;
const etsXtal = (loader.transport.baudrate * uartDiv) / 1000000 / this.XTAL_CLK_DIVIDER;
let normXtal;
if (etsXtal > 33) {
normXtal = 40;
}
else {
normXtal = 26;
}
if (Math.abs(normXtal - etsXtal) > 1) {
loader.info("WARNING: Unsupported crystal in use");
}
return normXtal;
}
_d2h(d) {
const h = (+d).toString(16);
return h.length === 1 ? "0" + h : h;
}
async readMac(loader) {
let mac0 = await this.readEfuse(loader, 1);
mac0 = mac0 >>> 0;
let mac1 = await this.readEfuse(loader, 2);
mac1 = mac1 >>> 0;
const mac = new Uint8Array(6);
mac[0] = (mac1 >> 8) & 0xff;
mac[1] = mac1 & 0xff;
mac[2] = (mac0 >> 24) & 0xff;
mac[3] = (mac0 >> 16) & 0xff;
mac[4] = (mac0 >> 8) & 0xff;
mac[5] = mac0 & 0xff;
return (this._d2h(mac[0]) +
":" +
this._d2h(mac[1]) +
":" +
this._d2h(mac[2]) +
":" +
this._d2h(mac[3]) +
":" +
this._d2h(mac[4]) +
":" +
this._d2h(mac[5]));
}
}

37
node_modules/esptool-js/lib/targets/esp32c2.d.ts generated vendored Normal file
View File

@@ -0,0 +1,37 @@
import { ESPLoader } from "../esploader.js";
import { ESP32C3ROM } from "./esp32c3.js";
export declare class ESP32C2ROM extends ESP32C3ROM {
CHIP_NAME: string;
IMAGE_CHIP_ID: number;
EFUSE_BASE: number;
MAC_EFUSE_REG: number;
UART_CLKDIV_REG: number;
UART_CLKDIV_MASK: number;
UART_DATE_REG_ADDR: number;
XTAL_CLK_DIVIDER: number;
FLASH_WRITE_SIZE: number;
BOOTLOADER_FLASH_OFFSET: number;
FLASH_SIZES: {
"1MB": number;
"2MB": number;
"4MB": number;
"8MB": number;
"16MB": number;
};
SPI_REG_BASE: number;
SPI_USR_OFFS: number;
SPI_USR1_OFFS: number;
SPI_USR2_OFFS: number;
SPI_MOSI_DLEN_OFFS: number;
SPI_MISO_DLEN_OFFS: number;
SPI_W0_OFFS: number;
getPkgVersion(loader: ESPLoader): Promise<number>;
getChipRevision(loader: ESPLoader): Promise<number>;
getChipDescription(loader: ESPLoader): Promise<string>;
getChipFeatures(loader: ESPLoader): Promise<string[]>;
getCrystalFreq(loader: ESPLoader): Promise<number>;
changeBaudRate(loader: ESPLoader): Promise<void>;
_d2h(d: number): string;
readMac(loader: ESPLoader): Promise<string>;
getEraseSize(offset: number, size: number): number;
}

114
node_modules/esptool-js/lib/targets/esp32c2.js generated vendored Normal file
View File

@@ -0,0 +1,114 @@
import { ESP32C3ROM } from "./esp32c3.js";
export class ESP32C2ROM extends ESP32C3ROM {
constructor() {
super(...arguments);
this.CHIP_NAME = "ESP32-C2";
this.IMAGE_CHIP_ID = 12;
this.EFUSE_BASE = 0x60008800;
this.MAC_EFUSE_REG = this.EFUSE_BASE + 0x040;
this.UART_CLKDIV_REG = 0x60000014;
this.UART_CLKDIV_MASK = 0xfffff;
this.UART_DATE_REG_ADDR = 0x6000007c;
this.XTAL_CLK_DIVIDER = 1;
this.FLASH_WRITE_SIZE = 0x400;
this.BOOTLOADER_FLASH_OFFSET = 0;
this.FLASH_SIZES = {
"1MB": 0x00,
"2MB": 0x10,
"4MB": 0x20,
"8MB": 0x30,
"16MB": 0x40,
};
this.SPI_REG_BASE = 0x60002000;
this.SPI_USR_OFFS = 0x18;
this.SPI_USR1_OFFS = 0x1c;
this.SPI_USR2_OFFS = 0x20;
this.SPI_MOSI_DLEN_OFFS = 0x24;
this.SPI_MISO_DLEN_OFFS = 0x28;
this.SPI_W0_OFFS = 0x58;
}
async getPkgVersion(loader) {
const numWord = 1;
const block1Addr = this.EFUSE_BASE + 0x040;
const addr = block1Addr + 4 * numWord;
const word3 = await loader.readReg(addr);
const pkgVersion = (word3 >> 22) & 0x07;
return pkgVersion;
}
async getChipRevision(loader) {
const block1Addr = this.EFUSE_BASE + 0x040;
const numWord = 1;
const pos = 20;
const addr = block1Addr + 4 * numWord;
const ret = ((await loader.readReg(addr)) & (0x03 << pos)) >> pos;
return ret;
}
async getChipDescription(loader) {
let desc;
const pkgVer = await this.getPkgVersion(loader);
if (pkgVer === 0 || pkgVer === 1) {
desc = "ESP32-C2";
}
else {
desc = "unknown ESP32-C2";
}
const chip_rev = await this.getChipRevision(loader);
desc += " (revision " + chip_rev + ")";
return desc;
}
async getChipFeatures(loader) {
return ["Wi-Fi", "BLE"];
}
async getCrystalFreq(loader) {
const uartDiv = (await loader.readReg(this.UART_CLKDIV_REG)) & this.UART_CLKDIV_MASK;
const etsXtal = (loader.transport.baudrate * uartDiv) / 1000000 / this.XTAL_CLK_DIVIDER;
let normXtal;
if (etsXtal > 33) {
normXtal = 40;
}
else {
normXtal = 26;
}
if (Math.abs(normXtal - etsXtal) > 1) {
loader.info("WARNING: Unsupported crystal in use");
}
return normXtal;
}
async changeBaudRate(loader) {
const rom_with_26M_XTAL = await this.getCrystalFreq(loader);
if (rom_with_26M_XTAL === 26) {
loader.changeBaud();
}
}
_d2h(d) {
const h = (+d).toString(16);
return h.length === 1 ? "0" + h : h;
}
async readMac(loader) {
let mac0 = await loader.readReg(this.MAC_EFUSE_REG);
mac0 = mac0 >>> 0;
let mac1 = await loader.readReg(this.MAC_EFUSE_REG + 4);
mac1 = (mac1 >>> 0) & 0x0000ffff;
const mac = new Uint8Array(6);
mac[0] = (mac1 >> 8) & 0xff;
mac[1] = mac1 & 0xff;
mac[2] = (mac0 >> 24) & 0xff;
mac[3] = (mac0 >> 16) & 0xff;
mac[4] = (mac0 >> 8) & 0xff;
mac[5] = mac0 & 0xff;
return (this._d2h(mac[0]) +
":" +
this._d2h(mac[1]) +
":" +
this._d2h(mac[2]) +
":" +
this._d2h(mac[3]) +
":" +
this._d2h(mac[4]) +
":" +
this._d2h(mac[5]));
}
getEraseSize(offset, size) {
return size;
}
}

37
node_modules/esptool-js/lib/targets/esp32c3.d.ts generated vendored Normal file
View File

@@ -0,0 +1,37 @@
import { ESPLoader } from "../esploader.js";
import { ROM } from "./rom.js";
export declare class ESP32C3ROM extends ROM {
CHIP_NAME: string;
IMAGE_CHIP_ID: number;
EFUSE_BASE: number;
MAC_EFUSE_REG: number;
UART_CLKDIV_REG: number;
UART_CLKDIV_MASK: number;
UART_DATE_REG_ADDR: number;
FLASH_WRITE_SIZE: number;
BOOTLOADER_FLASH_OFFSET: number;
FLASH_SIZES: {
"1MB": number;
"2MB": number;
"4MB": number;
"8MB": number;
"16MB": number;
};
SPI_REG_BASE: number;
SPI_USR_OFFS: number;
SPI_USR1_OFFS: number;
SPI_USR2_OFFS: number;
SPI_MOSI_DLEN_OFFS: number;
SPI_MISO_DLEN_OFFS: number;
SPI_W0_OFFS: number;
getPkgVersion(loader: ESPLoader): Promise<number>;
getChipRevision(loader: ESPLoader): Promise<number>;
getChipDescription(loader: ESPLoader): Promise<string>;
getFlashCap(loader: ESPLoader): Promise<number>;
getFlashVendor(loader: ESPLoader): Promise<string>;
getChipFeatures(loader: ESPLoader): Promise<string[]>;
getCrystalFreq(loader: ESPLoader): Promise<number>;
_d2h(d: number): string;
readMac(loader: ESPLoader): Promise<string>;
getEraseSize(offset: number, size: number): number;
}

133
node_modules/esptool-js/lib/targets/esp32c3.js generated vendored Normal file
View File

@@ -0,0 +1,133 @@
import { ROM } from "./rom.js";
export class ESP32C3ROM extends ROM {
constructor() {
super(...arguments);
this.CHIP_NAME = "ESP32-C3";
this.IMAGE_CHIP_ID = 5;
this.EFUSE_BASE = 0x60008800;
this.MAC_EFUSE_REG = this.EFUSE_BASE + 0x044;
this.UART_CLKDIV_REG = 0x3ff40014;
this.UART_CLKDIV_MASK = 0xfffff;
this.UART_DATE_REG_ADDR = 0x6000007c;
this.FLASH_WRITE_SIZE = 0x400;
this.BOOTLOADER_FLASH_OFFSET = 0;
this.FLASH_SIZES = {
"1MB": 0x00,
"2MB": 0x10,
"4MB": 0x20,
"8MB": 0x30,
"16MB": 0x40,
};
this.SPI_REG_BASE = 0x60002000;
this.SPI_USR_OFFS = 0x18;
this.SPI_USR1_OFFS = 0x1c;
this.SPI_USR2_OFFS = 0x20;
this.SPI_MOSI_DLEN_OFFS = 0x24;
this.SPI_MISO_DLEN_OFFS = 0x28;
this.SPI_W0_OFFS = 0x58;
}
async getPkgVersion(loader) {
const numWord = 3;
const block1Addr = this.EFUSE_BASE + 0x044;
const addr = block1Addr + 4 * numWord;
const word3 = await loader.readReg(addr);
const pkgVersion = (word3 >> 21) & 0x07;
return pkgVersion;
}
async getChipRevision(loader) {
const block1Addr = this.EFUSE_BASE + 0x044;
const numWord = 3;
const pos = 18;
const addr = block1Addr + 4 * numWord;
const ret = ((await loader.readReg(addr)) & (0x7 << pos)) >> pos;
return ret;
}
async getChipDescription(loader) {
let desc;
const pkgVer = await this.getPkgVersion(loader);
if (pkgVer === 0) {
desc = "ESP32-C3";
}
else {
desc = "unknown ESP32-C3";
}
const chip_rev = await this.getChipRevision(loader);
desc += " (revision " + chip_rev + ")";
return desc;
}
async getFlashCap(loader) {
const numWord = 3;
const block1Addr = this.EFUSE_BASE + 0x044;
const addr = block1Addr + 4 * numWord;
const registerValue = await loader.readReg(addr);
const flashCap = (registerValue >> 27) & 0x07;
return flashCap;
}
async getFlashVendor(loader) {
const numWord = 4;
const block1Addr = this.EFUSE_BASE + 0x044;
const addr = block1Addr + 4 * numWord;
const registerValue = await loader.readReg(addr);
const vendorId = (registerValue >> 0) & 0x07;
const vendorMap = {
1: "XMC",
2: "GD",
3: "FM",
4: "TT",
5: "ZBIT",
};
return vendorMap[vendorId] || "";
}
async getChipFeatures(loader) {
const features = ["Wi-Fi", "BLE"];
const flashMap = {
0: null,
1: "Embedded Flash 4MB",
2: "Embedded Flash 2MB",
3: "Embedded Flash 1MB",
4: "Embedded Flash 8MB",
};
const flashCap = await this.getFlashCap(loader);
const flashVendor = await this.getFlashVendor(loader);
const flash = flashMap[flashCap];
const flashDescription = flash !== undefined ? flash : "Unknown Embedded Flash";
if (flash !== null) {
features.push(`${flashDescription} (${flashVendor})`);
}
return features;
}
async getCrystalFreq(loader) {
return 40;
}
_d2h(d) {
const h = (+d).toString(16);
return h.length === 1 ? "0" + h : h;
}
async readMac(loader) {
let mac0 = await loader.readReg(this.MAC_EFUSE_REG);
mac0 = mac0 >>> 0;
let mac1 = await loader.readReg(this.MAC_EFUSE_REG + 4);
mac1 = (mac1 >>> 0) & 0x0000ffff;
const mac = new Uint8Array(6);
mac[0] = (mac1 >> 8) & 0xff;
mac[1] = mac1 & 0xff;
mac[2] = (mac0 >> 24) & 0xff;
mac[3] = (mac0 >> 16) & 0xff;
mac[4] = (mac0 >> 8) & 0xff;
mac[5] = mac0 & 0xff;
return (this._d2h(mac[0]) +
":" +
this._d2h(mac[1]) +
":" +
this._d2h(mac[2]) +
":" +
this._d2h(mac[3]) +
":" +
this._d2h(mac[4]) +
":" +
this._d2h(mac[5]));
}
getEraseSize(offset, size) {
return size;
}
}

70
node_modules/esptool-js/lib/targets/esp32c5.d.ts generated vendored Normal file
View File

@@ -0,0 +1,70 @@
import { ESPLoader } from "../esploader";
import { ESP32C6ROM } from "./esp32c6";
export declare class ESP32C5ROM extends ESP32C6ROM {
CHIP_NAME: string;
IMAGE_CHIP_ID: number;
BOOTLOADER_FLASH_OFFSET: number;
EFUSE_BASE: number;
EFUSE_BLOCK1_ADDR: number;
MAC_EFUSE_REG: number;
UART_CLKDIV_REG: number;
EFUSE_RD_REG_BASE: number;
EFUSE_PURPOSE_KEY0_REG: number;
EFUSE_PURPOSE_KEY0_SHIFT: number;
EFUSE_PURPOSE_KEY1_REG: number;
EFUSE_PURPOSE_KEY1_SHIFT: number;
EFUSE_PURPOSE_KEY2_REG: number;
EFUSE_PURPOSE_KEY2_SHIFT: number;
EFUSE_PURPOSE_KEY3_REG: number;
EFUSE_PURPOSE_KEY3_SHIFT: number;
EFUSE_PURPOSE_KEY4_REG: number;
EFUSE_PURPOSE_KEY4_SHIFT: number;
EFUSE_PURPOSE_KEY5_REG: number;
EFUSE_PURPOSE_KEY5_SHIFT: number;
EFUSE_DIS_DOWNLOAD_MANUAL_ENCRYPT_REG: number;
EFUSE_DIS_DOWNLOAD_MANUAL_ENCRYPT: number;
EFUSE_SPI_BOOT_CRYPT_CNT_REG: number;
EFUSE_SPI_BOOT_CRYPT_CNT_MASK: number;
EFUSE_SECURE_BOOT_EN_REG: number;
EFUSE_SECURE_BOOT_EN_MASK: number;
IROM_MAP_START: number;
IROM_MAP_END: number;
DROM_MAP_START: number;
DROM_MAP_END: number;
PCR_SYSCLK_CONF_REG: number;
PCR_SYSCLK_XTAL_FREQ_V: number;
PCR_SYSCLK_XTAL_FREQ_S: number;
XTAL_CLK_DIVIDER: number;
UARTDEV_BUF_NO: number;
CHIP_DETECT_MAGIC_VALUE: number[];
FLASH_FREQUENCY: {
"80m": number;
"40m": number;
"20m": number;
};
MEMORY_MAP: (string | number)[][];
UF2_FAMILY_ID: number;
EFUSE_MAX_KEY: number;
KEY_PURPOSES: {
0: string;
1: string;
2: string;
3: string;
4: string;
5: string;
6: string;
7: string;
8: string;
9: string;
10: string;
11: string;
12: string;
};
getPkgVersion(loader: ESPLoader): Promise<number>;
getMinorChipVersion(loader: ESPLoader): Promise<number>;
getMajorChipVersion(loader: ESPLoader): Promise<number>;
getChipDescription(loader: ESPLoader): Promise<string>;
getChipFeatures(loader: ESPLoader): Promise<string[]>;
getCrystalFreq(loader: ESPLoader): Promise<number>;
getCrystalFreqRomExpect(loader: ESPLoader): Promise<number>;
}

129
node_modules/esptool-js/lib/targets/esp32c5.js generated vendored Normal file
View File

@@ -0,0 +1,129 @@
import { ESP32C6ROM } from "./esp32c6";
export class ESP32C5ROM extends ESP32C6ROM {
constructor() {
super(...arguments);
this.CHIP_NAME = "ESP32-C5";
this.IMAGE_CHIP_ID = 23;
this.BOOTLOADER_FLASH_OFFSET = 0x2000;
this.EFUSE_BASE = 0x600b4800;
this.EFUSE_BLOCK1_ADDR = this.EFUSE_BASE + 0x044;
this.MAC_EFUSE_REG = this.EFUSE_BASE + 0x044;
this.UART_CLKDIV_REG = 0x60000014;
this.EFUSE_RD_REG_BASE = this.EFUSE_BASE + 0x030; // BLOCK0 read base address
this.EFUSE_PURPOSE_KEY0_REG = this.EFUSE_BASE + 0x34;
this.EFUSE_PURPOSE_KEY0_SHIFT = 24;
this.EFUSE_PURPOSE_KEY1_REG = this.EFUSE_BASE + 0x34;
this.EFUSE_PURPOSE_KEY1_SHIFT = 28;
this.EFUSE_PURPOSE_KEY2_REG = this.EFUSE_BASE + 0x38;
this.EFUSE_PURPOSE_KEY2_SHIFT = 0;
this.EFUSE_PURPOSE_KEY3_REG = this.EFUSE_BASE + 0x38;
this.EFUSE_PURPOSE_KEY3_SHIFT = 4;
this.EFUSE_PURPOSE_KEY4_REG = this.EFUSE_BASE + 0x38;
this.EFUSE_PURPOSE_KEY4_SHIFT = 8;
this.EFUSE_PURPOSE_KEY5_REG = this.EFUSE_BASE + 0x38;
this.EFUSE_PURPOSE_KEY5_SHIFT = 12;
this.EFUSE_DIS_DOWNLOAD_MANUAL_ENCRYPT_REG = this.EFUSE_RD_REG_BASE;
this.EFUSE_DIS_DOWNLOAD_MANUAL_ENCRYPT = 1 << 20;
this.EFUSE_SPI_BOOT_CRYPT_CNT_REG = this.EFUSE_BASE + 0x034;
this.EFUSE_SPI_BOOT_CRYPT_CNT_MASK = 0x7 << 18;
this.EFUSE_SECURE_BOOT_EN_REG = this.EFUSE_BASE + 0x038;
this.EFUSE_SECURE_BOOT_EN_MASK = 1 << 20;
this.IROM_MAP_START = 0x42000000;
this.IROM_MAP_END = 0x42800000;
this.DROM_MAP_START = 0x42800000;
this.DROM_MAP_END = 0x43000000;
this.PCR_SYSCLK_CONF_REG = 0x60096110;
this.PCR_SYSCLK_XTAL_FREQ_V = 0x7f << 24;
this.PCR_SYSCLK_XTAL_FREQ_S = 24;
this.XTAL_CLK_DIVIDER = 1;
this.UARTDEV_BUF_NO = 0x4085f51c; // Variable in ROM .bss which indicates the port in use
// Magic value for ESP32C5
this.CHIP_DETECT_MAGIC_VALUE = [0x1101406f, 0x63e1406f, 0x5fd1406f];
this.FLASH_FREQUENCY = {
"80m": 0xf,
"40m": 0x0,
"20m": 0x2,
};
this.MEMORY_MAP = [
[0x00000000, 0x00010000, "PADDING"],
[0x42800000, 0x43000000, "DROM"],
[0x40800000, 0x40860000, "DRAM"],
[0x40800000, 0x40860000, "BYTE_ACCESSIBLE"],
[0x4003a000, 0x40040000, "DROM_MASK"],
[0x40000000, 0x4003a000, "IROM_MASK"],
[0x42000000, 0x42800000, "IROM"],
[0x40800000, 0x40860000, "IRAM"],
[0x50000000, 0x50004000, "RTC_IRAM"],
[0x50000000, 0x50004000, "RTC_DRAM"],
[0x600fe000, 0x60100000, "MEM_INTERNAL2"],
];
this.UF2_FAMILY_ID = 0xf71c0343;
this.EFUSE_MAX_KEY = 5;
this.KEY_PURPOSES = {
0: "USER/EMPTY",
1: "ECDSA_KEY",
2: "XTS_AES_256_KEY_1",
3: "XTS_AES_256_KEY_2",
4: "XTS_AES_128_KEY",
5: "HMAC_DOWN_ALL",
6: "HMAC_DOWN_JTAG",
7: "HMAC_DOWN_DIGITAL_SIGNATURE",
8: "HMAC_UP",
9: "SECURE_BOOT_DIGEST0",
10: "SECURE_BOOT_DIGEST1",
11: "SECURE_BOOT_DIGEST2",
12: "KM_INIT_KEY",
};
}
async getPkgVersion(loader) {
const numWord = 2;
return ((await loader.readReg(this.EFUSE_BLOCK1_ADDR + 4 * numWord)) >> 26) & 0x07;
}
async getMinorChipVersion(loader) {
const numWord = 2;
return ((await loader.readReg(this.EFUSE_BLOCK1_ADDR + 4 * numWord)) >> 0) & 0x0f;
}
async getMajorChipVersion(loader) {
const numWord = 2;
return ((await loader.readReg(this.EFUSE_BLOCK1_ADDR + 4 * numWord)) >> 4) & 0x03;
}
async getChipDescription(loader) {
const pkgVer = await this.getPkgVersion(loader);
let desc;
if (pkgVer === 0) {
desc = "ESP32-C5";
}
else {
desc = "unknown ESP32-C5";
}
const majorRev = await this.getMajorChipVersion(loader);
const minorRev = await this.getMinorChipVersion(loader);
return `${desc} (revision v${majorRev}.${minorRev})`;
}
async getChipFeatures(loader) {
return ["Wi-Fi 6 (dual-band)", "BT 5 (LE)"];
}
async getCrystalFreq(loader) {
// The crystal detection algorithm of ESP32/ESP8266
// works for ESP32-C5 as well.
const uartDiv = (await loader.readReg(this.UART_CLKDIV_REG)) & this.UART_CLKDIV_MASK;
const etsXtal = (loader.transport.baudrate * uartDiv) / 1000000 / this.XTAL_CLK_DIVIDER;
let normXtal;
if (etsXtal > 45) {
normXtal = 48;
}
else if (etsXtal > 33) {
normXtal = 40;
}
else {
normXtal = 26;
}
if (Math.abs(normXtal - etsXtal) > 1) {
loader.info("WARNING: Unsupported crystal in use");
}
return normXtal;
}
async getCrystalFreqRomExpect(loader) {
return (((await loader.readReg(this.PCR_SYSCLK_CONF_REG)) & this.PCR_SYSCLK_XTAL_FREQ_V) >> this.PCR_SYSCLK_XTAL_FREQ_S);
}
}

36
node_modules/esptool-js/lib/targets/esp32c6.d.ts generated vendored Normal file
View File

@@ -0,0 +1,36 @@
import { ESPLoader } from "../esploader.js";
import { ROM } from "./rom.js";
export declare class ESP32C6ROM extends ROM {
CHIP_NAME: string;
IMAGE_CHIP_ID: number;
EFUSE_BASE: number;
EFUSE_BLOCK1_ADDR: number;
MAC_EFUSE_REG: number;
UART_CLKDIV_REG: number;
UART_CLKDIV_MASK: number;
UART_DATE_REG_ADDR: number;
FLASH_WRITE_SIZE: number;
BOOTLOADER_FLASH_OFFSET: number;
FLASH_SIZES: {
"1MB": number;
"2MB": number;
"4MB": number;
"8MB": number;
"16MB": number;
};
SPI_REG_BASE: number;
SPI_USR_OFFS: number;
SPI_USR1_OFFS: number;
SPI_USR2_OFFS: number;
SPI_MOSI_DLEN_OFFS: number;
SPI_MISO_DLEN_OFFS: number;
SPI_W0_OFFS: number;
getPkgVersion(loader: ESPLoader): Promise<number>;
getChipRevision(loader: ESPLoader): Promise<number>;
getChipDescription(loader: ESPLoader): Promise<string>;
getChipFeatures(loader: ESPLoader): Promise<string[]>;
getCrystalFreq(loader: ESPLoader): Promise<number>;
_d2h(d: number): string;
readMac(loader: ESPLoader): Promise<string>;
getEraseSize(offset: number, size: number): number;
}

96
node_modules/esptool-js/lib/targets/esp32c6.js generated vendored Normal file
View File

@@ -0,0 +1,96 @@
import { ROM } from "./rom.js";
export class ESP32C6ROM extends ROM {
constructor() {
super(...arguments);
this.CHIP_NAME = "ESP32-C6";
this.IMAGE_CHIP_ID = 13;
this.EFUSE_BASE = 0x600b0800;
this.EFUSE_BLOCK1_ADDR = this.EFUSE_BASE + 0x044;
this.MAC_EFUSE_REG = this.EFUSE_BASE + 0x044;
this.UART_CLKDIV_REG = 0x3ff40014;
this.UART_CLKDIV_MASK = 0xfffff;
this.UART_DATE_REG_ADDR = 0x6000007c;
this.FLASH_WRITE_SIZE = 0x400;
this.BOOTLOADER_FLASH_OFFSET = 0;
this.FLASH_SIZES = {
"1MB": 0x00,
"2MB": 0x10,
"4MB": 0x20,
"8MB": 0x30,
"16MB": 0x40,
};
this.SPI_REG_BASE = 0x60002000;
this.SPI_USR_OFFS = 0x18;
this.SPI_USR1_OFFS = 0x1c;
this.SPI_USR2_OFFS = 0x20;
this.SPI_MOSI_DLEN_OFFS = 0x24;
this.SPI_MISO_DLEN_OFFS = 0x28;
this.SPI_W0_OFFS = 0x58;
}
async getPkgVersion(loader) {
const numWord = 3;
const block1Addr = this.EFUSE_BASE + 0x044;
const addr = block1Addr + 4 * numWord;
const word3 = await loader.readReg(addr);
const pkgVersion = (word3 >> 21) & 0x07;
return pkgVersion;
}
async getChipRevision(loader) {
const block1Addr = this.EFUSE_BASE + 0x044;
const numWord = 3;
const pos = 18;
const addr = block1Addr + 4 * numWord;
const ret = ((await loader.readReg(addr)) & (0x7 << pos)) >> pos;
return ret;
}
async getChipDescription(loader) {
let desc;
const pkgVer = await this.getPkgVersion(loader);
if (pkgVer === 0) {
desc = "ESP32-C6";
}
else {
desc = "unknown ESP32-C6";
}
const chipRev = await this.getChipRevision(loader);
desc += " (revision " + chipRev + ")";
return desc;
}
async getChipFeatures(loader) {
return ["Wi-Fi 6", "BT 5", "IEEE802.15.4"];
}
async getCrystalFreq(loader) {
return 40;
}
_d2h(d) {
const h = (+d).toString(16);
return h.length === 1 ? "0" + h : h;
}
async readMac(loader) {
let mac0 = await loader.readReg(this.MAC_EFUSE_REG);
mac0 = mac0 >>> 0;
let mac1 = await loader.readReg(this.MAC_EFUSE_REG + 4);
mac1 = (mac1 >>> 0) & 0x0000ffff;
const mac = new Uint8Array(6);
mac[0] = (mac1 >> 8) & 0xff;
mac[1] = mac1 & 0xff;
mac[2] = (mac0 >> 24) & 0xff;
mac[3] = (mac0 >> 16) & 0xff;
mac[4] = (mac0 >> 8) & 0xff;
mac[5] = mac0 & 0xff;
return (this._d2h(mac[0]) +
":" +
this._d2h(mac[1]) +
":" +
this._d2h(mac[2]) +
":" +
this._d2h(mac[3]) +
":" +
this._d2h(mac[4]) +
":" +
this._d2h(mac[5]));
}
getEraseSize(offset, size) {
return size;
}
}

62
node_modules/esptool-js/lib/targets/esp32c61.d.ts generated vendored Normal file
View File

@@ -0,0 +1,62 @@
import { ESPLoader } from "../esploader";
import { ESP32C6ROM } from "./esp32c6";
export declare class ESP32C61ROM extends ESP32C6ROM {
CHIP_NAME: string;
IMAGE_CHIP_ID: number;
CHIP_DETECT_MAGIC_VALUE: number[];
UART_DATE_REG_ADDR: number;
EFUSE_BASE: number;
EFUSE_BLOCK1_ADDR: number;
MAC_EFUSE_REG: number;
EFUSE_RD_REG_BASE: number;
EFUSE_PURPOSE_KEY0_REG: number;
EFUSE_PURPOSE_KEY0_SHIFT: number;
EFUSE_PURPOSE_KEY1_REG: number;
EFUSE_PURPOSE_KEY1_SHIFT: number;
EFUSE_PURPOSE_KEY2_REG: number;
EFUSE_PURPOSE_KEY2_SHIFT: number;
EFUSE_PURPOSE_KEY3_REG: number;
EFUSE_PURPOSE_KEY3_SHIFT: number;
EFUSE_PURPOSE_KEY4_REG: number;
EFUSE_PURPOSE_KEY4_SHIFT: number;
EFUSE_PURPOSE_KEY5_REG: number;
EFUSE_PURPOSE_KEY5_SHIFT: number;
EFUSE_DIS_DOWNLOAD_MANUAL_ENCRYPT_REG: number;
EFUSE_DIS_DOWNLOAD_MANUAL_ENCRYPT: number;
EFUSE_SPI_BOOT_CRYPT_CNT_REG: number;
EFUSE_SPI_BOOT_CRYPT_CNT_MASK: number;
EFUSE_SECURE_BOOT_EN_REG: number;
EFUSE_SECURE_BOOT_EN_MASK: number;
FLASH_FREQUENCY: {
"80m": number;
"40m": number;
"20m": number;
};
MEMORY_MAP: (string | number)[][];
UF2_FAMILY_ID: number;
EFUSE_MAX_KEY: number;
KEY_PURPOSES: {
0: string;
1: string;
2: string;
3: string;
4: string;
5: string;
6: string;
7: string;
8: string;
9: string;
10: string;
11: string;
12: string;
13: string;
14: string;
15: string;
};
getPkgVersion(loader: ESPLoader): Promise<number>;
getMinorChipVersion(loader: ESPLoader): Promise<number>;
getMajorChipVersion(loader: ESPLoader): Promise<number>;
getChipDescription(loader: ESPLoader): Promise<string>;
getChipFeatures(loader: ESPLoader): Promise<string[]>;
readMac(loader: ESPLoader): Promise<string>;
}

122
node_modules/esptool-js/lib/targets/esp32c61.js generated vendored Normal file
View File

@@ -0,0 +1,122 @@
import { ESP32C6ROM } from "./esp32c6";
export class ESP32C61ROM extends ESP32C6ROM {
constructor() {
super(...arguments);
this.CHIP_NAME = "ESP32-C61";
this.IMAGE_CHIP_ID = 20;
this.CHIP_DETECT_MAGIC_VALUE = [0x33f0206f, 0x2421606f];
this.UART_DATE_REG_ADDR = 0x60000000 + 0x7c;
this.EFUSE_BASE = 0x600b4800;
this.EFUSE_BLOCK1_ADDR = this.EFUSE_BASE + 0x044;
this.MAC_EFUSE_REG = this.EFUSE_BASE + 0x044;
this.EFUSE_RD_REG_BASE = this.EFUSE_BASE + 0x030; // BLOCK0 read base address
this.EFUSE_PURPOSE_KEY0_REG = this.EFUSE_BASE + 0x34;
this.EFUSE_PURPOSE_KEY0_SHIFT = 0;
this.EFUSE_PURPOSE_KEY1_REG = this.EFUSE_BASE + 0x34;
this.EFUSE_PURPOSE_KEY1_SHIFT = 4;
this.EFUSE_PURPOSE_KEY2_REG = this.EFUSE_BASE + 0x34;
this.EFUSE_PURPOSE_KEY2_SHIFT = 8;
this.EFUSE_PURPOSE_KEY3_REG = this.EFUSE_BASE + 0x34;
this.EFUSE_PURPOSE_KEY3_SHIFT = 12;
this.EFUSE_PURPOSE_KEY4_REG = this.EFUSE_BASE + 0x34;
this.EFUSE_PURPOSE_KEY4_SHIFT = 16;
this.EFUSE_PURPOSE_KEY5_REG = this.EFUSE_BASE + 0x34;
this.EFUSE_PURPOSE_KEY5_SHIFT = 20;
this.EFUSE_DIS_DOWNLOAD_MANUAL_ENCRYPT_REG = this.EFUSE_RD_REG_BASE;
this.EFUSE_DIS_DOWNLOAD_MANUAL_ENCRYPT = 1 << 20;
this.EFUSE_SPI_BOOT_CRYPT_CNT_REG = this.EFUSE_BASE + 0x030;
this.EFUSE_SPI_BOOT_CRYPT_CNT_MASK = 0x7 << 23;
this.EFUSE_SECURE_BOOT_EN_REG = this.EFUSE_BASE + 0x034;
this.EFUSE_SECURE_BOOT_EN_MASK = 1 << 26;
this.FLASH_FREQUENCY = {
"80m": 0xf,
"40m": 0x0,
"20m": 0x2,
};
this.MEMORY_MAP = [
[0x00000000, 0x00010000, "PADDING"],
[0x41800000, 0x42000000, "DROM"],
[0x40800000, 0x40860000, "DRAM"],
[0x40800000, 0x40860000, "BYTE_ACCESSIBLE"],
[0x4004ac00, 0x40050000, "DROM_MASK"],
[0x40000000, 0x4004ac00, "IROM_MASK"],
[0x41000000, 0x41800000, "IROM"],
[0x40800000, 0x40860000, "IRAM"],
[0x50000000, 0x50004000, "RTC_IRAM"],
[0x50000000, 0x50004000, "RTC_DRAM"],
[0x600fe000, 0x60100000, "MEM_INTERNAL2"],
];
this.UF2_FAMILY_ID = 0x77d850c4;
this.EFUSE_MAX_KEY = 5;
this.KEY_PURPOSES = {
0: "USER/EMPTY",
1: "ECDSA_KEY",
2: "XTS_AES_256_KEY_1",
3: "XTS_AES_256_KEY_2",
4: "XTS_AES_128_KEY",
5: "HMAC_DOWN_ALL",
6: "HMAC_DOWN_JTAG",
7: "HMAC_DOWN_DIGITAL_SIGNATURE",
8: "HMAC_UP",
9: "SECURE_BOOT_DIGEST0",
10: "SECURE_BOOT_DIGEST1",
11: "SECURE_BOOT_DIGEST2",
12: "KM_INIT_KEY",
13: "XTS_AES_256_KEY_1_PSRAM",
14: "XTS_AES_256_KEY_2_PSRAM",
15: "XTS_AES_128_KEY_PSRAM",
};
}
async getPkgVersion(loader) {
const numWord = 2;
return ((await loader.readReg(this.EFUSE_BLOCK1_ADDR + 4 * numWord)) >> 26) & 0x07;
}
async getMinorChipVersion(loader) {
const numWord = 2;
return ((await loader.readReg(this.EFUSE_BLOCK1_ADDR + 4 * numWord)) >> 0) & 0x0f;
}
async getMajorChipVersion(loader) {
const numWord = 2;
return ((await loader.readReg(this.EFUSE_BLOCK1_ADDR + 4 * numWord)) >> 4) & 0x03;
}
async getChipDescription(loader) {
const pkgVer = await this.getPkgVersion(loader);
let desc;
if (pkgVer === 0) {
desc = "ESP32-C61";
}
else {
desc = "unknown ESP32-C61";
}
const majorRev = await this.getMajorChipVersion(loader);
const minorRev = await this.getMinorChipVersion(loader);
return `${desc} (revision v${majorRev}.${minorRev})`;
}
async getChipFeatures(loader) {
return ["WiFi 6", "BT 5"];
}
async readMac(loader) {
let mac0 = await loader.readReg(this.MAC_EFUSE_REG);
mac0 = mac0 >>> 0;
let mac1 = await loader.readReg(this.MAC_EFUSE_REG + 4);
mac1 = (mac1 >>> 0) & 0x0000ffff;
const mac = new Uint8Array(6);
mac[0] = (mac1 >> 8) & 0xff;
mac[1] = mac1 & 0xff;
mac[2] = (mac0 >> 24) & 0xff;
mac[3] = (mac0 >> 16) & 0xff;
mac[4] = (mac0 >> 8) & 0xff;
mac[5] = mac0 & 0xff;
return (this._d2h(mac[0]) +
":" +
this._d2h(mac[1]) +
":" +
this._d2h(mac[2]) +
":" +
this._d2h(mac[3]) +
":" +
this._d2h(mac[4]) +
":" +
this._d2h(mac[5]));
}
}

41
node_modules/esptool-js/lib/targets/esp32h2.d.ts generated vendored Normal file
View File

@@ -0,0 +1,41 @@
import { ESPLoader } from "../esploader.js";
import { ROM } from "./rom.js";
export declare class ESP32H2ROM extends ROM {
CHIP_NAME: string;
IMAGE_CHIP_ID: number;
EFUSE_BASE: number;
EFUSE_BLOCK1_ADDR: number;
MAC_EFUSE_REG: number;
UART_CLKDIV_REG: number;
UART_CLKDIV_MASK: number;
UART_DATE_REG_ADDR: number;
FLASH_WRITE_SIZE: number;
BOOTLOADER_FLASH_OFFSET: number;
FLASH_SIZES: {
"1MB": number;
"2MB": number;
"4MB": number;
"8MB": number;
"16MB": number;
};
SPI_REG_BASE: number;
SPI_USR_OFFS: number;
SPI_USR1_OFFS: number;
SPI_USR2_OFFS: number;
SPI_MOSI_DLEN_OFFS: number;
SPI_MISO_DLEN_OFFS: number;
SPI_W0_OFFS: number;
USB_RAM_BLOCK: number;
UARTDEV_BUF_NO_USB: number;
UARTDEV_BUF_NO: number;
getPkgVersion(loader: ESPLoader): Promise<number>;
getMinorChipVersion(loader: ESPLoader): Promise<number>;
getMajorChipVersion(loader: ESPLoader): Promise<number>;
getChipDescription(loader: ESPLoader): Promise<string>;
getChipFeatures(loader: ESPLoader): Promise<string[]>;
getCrystalFreq(loader: ESPLoader): Promise<number>;
_d2h(d: number): string;
postConnect(loader: ESPLoader): Promise<void>;
readMac(loader: ESPLoader): Promise<string>;
getEraseSize(offset: number, size: number): number;
}

103
node_modules/esptool-js/lib/targets/esp32h2.js generated vendored Normal file
View File

@@ -0,0 +1,103 @@
import { ROM } from "./rom.js";
export class ESP32H2ROM extends ROM {
constructor() {
super(...arguments);
this.CHIP_NAME = "ESP32-H2";
this.IMAGE_CHIP_ID = 16;
this.EFUSE_BASE = 0x600b0800;
this.EFUSE_BLOCK1_ADDR = this.EFUSE_BASE + 0x044;
this.MAC_EFUSE_REG = this.EFUSE_BASE + 0x044;
this.UART_CLKDIV_REG = 0x3ff40014;
this.UART_CLKDIV_MASK = 0xfffff;
this.UART_DATE_REG_ADDR = 0x6000007c;
this.FLASH_WRITE_SIZE = 0x400;
this.BOOTLOADER_FLASH_OFFSET = 0x0;
this.FLASH_SIZES = {
"1MB": 0x00,
"2MB": 0x10,
"4MB": 0x20,
"8MB": 0x30,
"16MB": 0x40,
};
this.SPI_REG_BASE = 0x60002000;
this.SPI_USR_OFFS = 0x18;
this.SPI_USR1_OFFS = 0x1c;
this.SPI_USR2_OFFS = 0x20;
this.SPI_MOSI_DLEN_OFFS = 0x24;
this.SPI_MISO_DLEN_OFFS = 0x28;
this.SPI_W0_OFFS = 0x58;
this.USB_RAM_BLOCK = 0x800;
this.UARTDEV_BUF_NO_USB = 3;
this.UARTDEV_BUF_NO = 0x3fcef14c;
}
async getPkgVersion(loader) {
const numWord = 4;
return ((await loader.readReg(this.EFUSE_BLOCK1_ADDR + 4 * numWord)) >> 0) & 0x07;
}
async getMinorChipVersion(loader) {
const numWord = 3;
return ((await loader.readReg(this.EFUSE_BLOCK1_ADDR + 4 * numWord)) >> 18) & 0x07;
}
async getMajorChipVersion(loader) {
const numWord = 3;
return ((await loader.readReg(this.EFUSE_BLOCK1_ADDR + 4 * numWord)) >> 21) & 0x03;
}
async getChipDescription(loader) {
const pkgVer = await this.getPkgVersion(loader);
let desc;
if (pkgVer === 0) {
desc = "ESP32-H2";
}
else {
desc = "unknown ESP32-H2";
}
const majorRev = await this.getMajorChipVersion(loader);
const minorRev = await this.getMinorChipVersion(loader);
return `${desc} (revision v${majorRev}.${minorRev})`;
}
async getChipFeatures(loader) {
return ["BT 5 (LE)", "IEEE802.15.4", "Single Core", "96MHz"];
}
async getCrystalFreq(loader) {
// ESP32H2 XTAL is fixed to 32MHz
return 32;
}
_d2h(d) {
const h = (+d).toString(16);
return h.length === 1 ? "0" + h : h;
}
async postConnect(loader) {
const bufNo = (await loader.readReg(this.UARTDEV_BUF_NO)) & 0xff;
loader.debug("In _post_connect " + bufNo);
if (bufNo == this.UARTDEV_BUF_NO_USB) {
loader.ESP_RAM_BLOCK = this.USB_RAM_BLOCK;
}
}
async readMac(loader) {
let mac0 = await loader.readReg(this.MAC_EFUSE_REG);
mac0 = mac0 >>> 0;
let mac1 = await loader.readReg(this.MAC_EFUSE_REG + 4);
mac1 = (mac1 >>> 0) & 0x0000ffff;
const mac = new Uint8Array(6);
mac[0] = (mac1 >> 8) & 0xff;
mac[1] = mac1 & 0xff;
mac[2] = (mac0 >> 24) & 0xff;
mac[3] = (mac0 >> 16) & 0xff;
mac[4] = (mac0 >> 8) & 0xff;
mac[5] = mac0 & 0xff;
return (this._d2h(mac[0]) +
":" +
this._d2h(mac[1]) +
":" +
this._d2h(mac[2]) +
":" +
this._d2h(mac[3]) +
":" +
this._d2h(mac[4]) +
":" +
this._d2h(mac[5]));
}
getEraseSize(offset, size) {
return size;
}
}

78
node_modules/esptool-js/lib/targets/esp32p4.d.ts generated vendored Normal file
View File

@@ -0,0 +1,78 @@
import { ESPLoader } from "../esploader.js";
import { ESP32ROM } from "./esp32.js";
export declare class ESP32P4ROM extends ESP32ROM {
CHIP_NAME: string;
IMAGE_CHIP_ID: number;
IROM_MAP_START: number;
IROM_MAP_END: number;
DROM_MAP_START: number;
DROM_MAP_END: number;
BOOTLOADER_FLASH_OFFSET: number;
CHIP_DETECT_MAGIC_VALUE: number[];
UART_DATE_REG_ADDR: number;
EFUSE_BASE: number;
EFUSE_BLOCK1_ADDR: number;
MAC_EFUSE_REG: number;
SPI_REG_BASE: number;
SPI_USR_OFFS: number;
SPI_USR1_OFFS: number;
SPI_USR2_OFFS: number;
SPI_MOSI_DLEN_OFFS: number;
SPI_MISO_DLEN_OFFS: number;
SPI_W0_OFFS: number;
EFUSE_RD_REG_BASE: number;
EFUSE_PURPOSE_KEY0_REG: number;
EFUSE_PURPOSE_KEY0_SHIFT: number;
EFUSE_PURPOSE_KEY1_REG: number;
EFUSE_PURPOSE_KEY1_SHIFT: number;
EFUSE_PURPOSE_KEY2_REG: number;
EFUSE_PURPOSE_KEY2_SHIFT: number;
EFUSE_PURPOSE_KEY3_REG: number;
EFUSE_PURPOSE_KEY3_SHIFT: number;
EFUSE_PURPOSE_KEY4_REG: number;
EFUSE_PURPOSE_KEY4_SHIFT: number;
EFUSE_PURPOSE_KEY5_REG: number;
EFUSE_PURPOSE_KEY5_SHIFT: number;
EFUSE_DIS_DOWNLOAD_MANUAL_ENCRYPT_REG: number;
EFUSE_DIS_DOWNLOAD_MANUAL_ENCRYPT: number;
EFUSE_SPI_BOOT_CRYPT_CNT_REG: number;
EFUSE_SPI_BOOT_CRYPT_CNT_MASK: number;
EFUSE_SECURE_BOOT_EN_REG: number;
EFUSE_SECURE_BOOT_EN_MASK: number;
PURPOSE_VAL_XTS_AES256_KEY_1: number;
PURPOSE_VAL_XTS_AES256_KEY_2: number;
PURPOSE_VAL_XTS_AES128_KEY: number;
SUPPORTS_ENCRYPTED_FLASH: boolean;
FLASH_ENCRYPTED_WRITE_ALIGN: number;
MEMORY_MAP: (string | number)[][];
UF2_FAMILY_ID: number;
EFUSE_MAX_KEY: number;
KEY_PURPOSES: {
0: string;
1: string;
2: string;
3: string;
4: string;
5: string;
6: string;
7: string;
8: string;
9: string;
10: string;
11: string;
12: string;
};
getPkgVersion(loader: ESPLoader): Promise<number>;
getMinorChipVersion(loader: ESPLoader): Promise<number>;
getMajorChipVersion(loader: ESPLoader): Promise<number>;
getChipDescription(loader: ESPLoader): Promise<string>;
getChipFeatures(loader: ESPLoader): Promise<string[]>;
getCrystalFreq(loader: ESPLoader): Promise<number>;
getFlashVoltage(loader: ESPLoader): Promise<void>;
overrideVddsdio(loader: ESPLoader): Promise<void>;
readMac(loader: ESPLoader): Promise<string>;
getFlashCryptConfig(loader: ESPLoader): Promise<void>;
getSecureBootEnabled(laoder: ESPLoader): Promise<number>;
getKeyBlockPurpose(loader: ESPLoader, keyBlock: number): Promise<number | undefined>;
isFlashEncryptionKeyValid(loader: ESPLoader): Promise<boolean>;
}

181
node_modules/esptool-js/lib/targets/esp32p4.js generated vendored Normal file
View File

@@ -0,0 +1,181 @@
import { ESP32ROM } from "./esp32.js";
export class ESP32P4ROM extends ESP32ROM {
constructor() {
super(...arguments);
this.CHIP_NAME = "ESP32-P4";
this.IMAGE_CHIP_ID = 18;
this.IROM_MAP_START = 0x40000000;
this.IROM_MAP_END = 0x4c000000;
this.DROM_MAP_START = 0x40000000;
this.DROM_MAP_END = 0x4c000000;
this.BOOTLOADER_FLASH_OFFSET = 0x2000; // First 2 sectors are reserved for FE purposes
this.CHIP_DETECT_MAGIC_VALUE = [0x0, 0x0addbad0];
this.UART_DATE_REG_ADDR = 0x500ca000 + 0x8c;
this.EFUSE_BASE = 0x5012d000;
this.EFUSE_BLOCK1_ADDR = this.EFUSE_BASE + 0x044;
this.MAC_EFUSE_REG = this.EFUSE_BASE + 0x044;
this.SPI_REG_BASE = 0x5008d000; // SPIMEM1
this.SPI_USR_OFFS = 0x18;
this.SPI_USR1_OFFS = 0x1c;
this.SPI_USR2_OFFS = 0x20;
this.SPI_MOSI_DLEN_OFFS = 0x24;
this.SPI_MISO_DLEN_OFFS = 0x28;
this.SPI_W0_OFFS = 0x58;
this.EFUSE_RD_REG_BASE = this.EFUSE_BASE + 0x030; // BLOCK0 read base address
this.EFUSE_PURPOSE_KEY0_REG = this.EFUSE_BASE + 0x34;
this.EFUSE_PURPOSE_KEY0_SHIFT = 24;
this.EFUSE_PURPOSE_KEY1_REG = this.EFUSE_BASE + 0x34;
this.EFUSE_PURPOSE_KEY1_SHIFT = 28;
this.EFUSE_PURPOSE_KEY2_REG = this.EFUSE_BASE + 0x38;
this.EFUSE_PURPOSE_KEY2_SHIFT = 0;
this.EFUSE_PURPOSE_KEY3_REG = this.EFUSE_BASE + 0x38;
this.EFUSE_PURPOSE_KEY3_SHIFT = 4;
this.EFUSE_PURPOSE_KEY4_REG = this.EFUSE_BASE + 0x38;
this.EFUSE_PURPOSE_KEY4_SHIFT = 8;
this.EFUSE_PURPOSE_KEY5_REG = this.EFUSE_BASE + 0x38;
this.EFUSE_PURPOSE_KEY5_SHIFT = 12;
this.EFUSE_DIS_DOWNLOAD_MANUAL_ENCRYPT_REG = this.EFUSE_RD_REG_BASE;
this.EFUSE_DIS_DOWNLOAD_MANUAL_ENCRYPT = 1 << 20;
this.EFUSE_SPI_BOOT_CRYPT_CNT_REG = this.EFUSE_BASE + 0x034;
this.EFUSE_SPI_BOOT_CRYPT_CNT_MASK = 0x7 << 18;
this.EFUSE_SECURE_BOOT_EN_REG = this.EFUSE_BASE + 0x038;
this.EFUSE_SECURE_BOOT_EN_MASK = 1 << 20;
this.PURPOSE_VAL_XTS_AES256_KEY_1 = 2;
this.PURPOSE_VAL_XTS_AES256_KEY_2 = 3;
this.PURPOSE_VAL_XTS_AES128_KEY = 4;
this.SUPPORTS_ENCRYPTED_FLASH = true;
this.FLASH_ENCRYPTED_WRITE_ALIGN = 16;
this.MEMORY_MAP = [
[0x00000000, 0x00010000, "PADDING"],
[0x40000000, 0x4c000000, "DROM"],
[0x4ff00000, 0x4ffa0000, "DRAM"],
[0x4ff00000, 0x4ffa0000, "BYTE_ACCESSIBLE"],
[0x4fc00000, 0x4fc20000, "DROM_MASK"],
[0x4fc00000, 0x4fc20000, "IROM_MASK"],
[0x40000000, 0x4c000000, "IROM"],
[0x4ff00000, 0x4ffa0000, "IRAM"],
[0x50108000, 0x50110000, "RTC_IRAM"],
[0x50108000, 0x50110000, "RTC_DRAM"],
[0x600fe000, 0x60100000, "MEM_INTERNAL2"],
];
this.UF2_FAMILY_ID = 0x3d308e94;
this.EFUSE_MAX_KEY = 5;
this.KEY_PURPOSES = {
0: "USER/EMPTY",
1: "ECDSA_KEY",
2: "XTS_AES_256_KEY_1",
3: "XTS_AES_256_KEY_2",
4: "XTS_AES_128_KEY",
5: "HMAC_DOWN_ALL",
6: "HMAC_DOWN_JTAG",
7: "HMAC_DOWN_DIGITAL_SIGNATURE",
8: "HMAC_UP",
9: "SECURE_BOOT_DIGEST0",
10: "SECURE_BOOT_DIGEST1",
11: "SECURE_BOOT_DIGEST2",
12: "KM_INIT_KEY",
};
}
async getPkgVersion(loader) {
const numWord = 2;
const addr = this.EFUSE_BLOCK1_ADDR + 4 * numWord;
const registerValue = await loader.readReg(addr);
return (registerValue >> 27) & 0x07;
}
async getMinorChipVersion(loader) {
const numWord = 2;
const addr = this.EFUSE_BLOCK1_ADDR + 4 * numWord;
const registerValue = await loader.readReg(addr);
return (registerValue >> 0) & 0x0f;
}
async getMajorChipVersion(loader) {
const numWord = 2;
const addr = this.EFUSE_BLOCK1_ADDR + 4 * numWord;
const registerValue = await loader.readReg(addr);
return (registerValue >> 4) & 0x03;
}
async getChipDescription(loader) {
const pkgVersion = await this.getPkgVersion(loader);
const chipName = pkgVersion === 0 ? "ESP32-P4" : "unknown ESP32-P4";
const majorRev = await this.getMajorChipVersion(loader);
const minorRev = await this.getMinorChipVersion(loader);
return `${chipName} (revision v${majorRev}.${minorRev})`;
}
async getChipFeatures(loader) {
return ["High-Performance MCU"];
}
async getCrystalFreq(loader) {
return 40; // ESP32P4 XTAL is fixed to 40MHz
}
async getFlashVoltage(loader) {
return;
}
async overrideVddsdio(loader) {
loader.debug("VDD_SDIO overrides are not supported for ESP32-P4");
}
async readMac(loader) {
let mac0 = await loader.readReg(this.MAC_EFUSE_REG);
mac0 = mac0 >>> 0;
let mac1 = await loader.readReg(this.MAC_EFUSE_REG + 4);
mac1 = (mac1 >>> 0) & 0x0000ffff;
const mac = new Uint8Array(6);
mac[0] = (mac1 >> 8) & 0xff;
mac[1] = mac1 & 0xff;
mac[2] = (mac0 >> 24) & 0xff;
mac[3] = (mac0 >> 16) & 0xff;
mac[4] = (mac0 >> 8) & 0xff;
mac[5] = mac0 & 0xff;
return (this._d2h(mac[0]) +
":" +
this._d2h(mac[1]) +
":" +
this._d2h(mac[2]) +
":" +
this._d2h(mac[3]) +
":" +
this._d2h(mac[4]) +
":" +
this._d2h(mac[5]));
}
async getFlashCryptConfig(loader) {
return; // doesn't exist on ESP32-P4
}
async getSecureBootEnabled(laoder) {
const registerValue = await laoder.readReg(this.EFUSE_SECURE_BOOT_EN_REG);
return registerValue & this.EFUSE_SECURE_BOOT_EN_MASK;
}
async getKeyBlockPurpose(loader, keyBlock) {
if (keyBlock < 0 || keyBlock > this.EFUSE_MAX_KEY) {
loader.debug(`Valid key block numbers must be in range 0-${this.EFUSE_MAX_KEY}`);
return;
}
const regShiftDictionary = [
[this.EFUSE_PURPOSE_KEY0_REG, this.EFUSE_PURPOSE_KEY0_SHIFT],
[this.EFUSE_PURPOSE_KEY1_REG, this.EFUSE_PURPOSE_KEY1_SHIFT],
[this.EFUSE_PURPOSE_KEY2_REG, this.EFUSE_PURPOSE_KEY2_SHIFT],
[this.EFUSE_PURPOSE_KEY3_REG, this.EFUSE_PURPOSE_KEY3_SHIFT],
[this.EFUSE_PURPOSE_KEY4_REG, this.EFUSE_PURPOSE_KEY4_SHIFT],
[this.EFUSE_PURPOSE_KEY5_REG, this.EFUSE_PURPOSE_KEY5_SHIFT],
];
const [reg, shift] = regShiftDictionary[keyBlock];
const registerValue = await loader.readReg(reg);
return (registerValue >> shift) & 0xf;
}
async isFlashEncryptionKeyValid(loader) {
const purposes = [];
for (let i = 0; i <= this.EFUSE_MAX_KEY; i++) {
const purpose = await this.getKeyBlockPurpose(loader, i);
purposes.push(purpose);
}
const isXtsAes128Key = purposes.find((p) => p === this.PURPOSE_VAL_XTS_AES128_KEY);
if (typeof isXtsAes128Key !== undefined) {
return true;
}
const isXtsAes256Key1 = purposes.find((p) => p === this.PURPOSE_VAL_XTS_AES256_KEY_1);
const isXtsAes256Key2 = purposes.find((p) => p === this.PURPOSE_VAL_XTS_AES256_KEY_2);
if (typeof isXtsAes256Key1 !== undefined && typeof isXtsAes256Key2 !== undefined) {
return true;
}
return false;
}
}

111
node_modules/esptool-js/lib/targets/esp32s2.d.ts generated vendored Normal file
View File

@@ -0,0 +1,111 @@
import { ESPLoader } from "../esploader.js";
import { ROM } from "./rom.js";
export declare class ESP32S2ROM extends ROM {
CHIP_NAME: string;
IMAGE_CHIP_ID: number;
IROM_MAP_START: number;
IROM_MAP_END: number;
DROM_MAP_START: number;
DROM_MAP_END: number;
CHIP_DETECT_MAGIC_VALUE: number[];
SPI_REG_BASE: number;
SPI_USR_OFFS: number;
SPI_USR1_OFFS: number;
SPI_USR2_OFFS: number;
SPI_MOSI_DLEN_OFFS: number;
SPI_MISO_DLEN_OFFS: number;
SPI_W0_OFFS: number;
SPI_ADDR_REG_MSB: boolean;
MAC_EFUSE_REG: number;
UART_CLKDIV_REG: number;
SUPPORTS_ENCRYPTED_FLASH: boolean;
FLASH_ENCRYPTED_WRITE_ALIGN: number;
EFUSE_BASE: number;
EFUSE_RD_REG_BASE: number;
EFUSE_BLOCK1_ADDR: number;
EFUSE_BLOCK2_ADDR: number;
EFUSE_PURPOSE_KEY0_REG: number;
EFUSE_PURPOSE_KEY0_SHIFT: number;
EFUSE_PURPOSE_KEY1_REG: number;
EFUSE_PURPOSE_KEY1_SHIFT: number;
EFUSE_PURPOSE_KEY2_REG: number;
EFUSE_PURPOSE_KEY2_SHIFT: number;
EFUSE_PURPOSE_KEY3_REG: number;
EFUSE_PURPOSE_KEY3_SHIFT: number;
EFUSE_PURPOSE_KEY4_REG: number;
EFUSE_PURPOSE_KEY4_SHIFT: number;
EFUSE_PURPOSE_KEY5_REG: number;
EFUSE_PURPOSE_KEY5_SHIFT: number;
EFUSE_DIS_DOWNLOAD_MANUAL_ENCRYPT_REG: number;
EFUSE_DIS_DOWNLOAD_MANUAL_ENCRYPT: number;
EFUSE_SPI_BOOT_CRYPT_CNT_REG: number;
EFUSE_SPI_BOOT_CRYPT_CNT_MASK: number;
EFUSE_SECURE_BOOT_EN_REG: number;
EFUSE_SECURE_BOOT_EN_MASK: number;
EFUSE_RD_REPEAT_DATA3_REG: number;
EFUSE_RD_REPEAT_DATA3_REG_FLASH_TYPE_MASK: number;
PURPOSE_VAL_XTS_AES256_KEY_1: number;
PURPOSE_VAL_XTS_AES256_KEY_2: number;
PURPOSE_VAL_XTS_AES128_KEY: number;
UARTDEV_BUF_NO: number;
UARTDEV_BUF_NO_USB_OTG: number;
USB_RAM_BLOCK: number;
GPIO_STRAP_REG: number;
GPIO_STRAP_SPI_BOOT_MASK: number;
GPIO_STRAP_VDDSPI_MASK: number;
RTC_CNTL_OPTION1_REG: number;
RTC_CNTL_FORCE_DOWNLOAD_BOOT_MASK: number;
RTCCNTL_BASE_REG: number;
RTC_CNTL_WDTCONFIG0_REG: number;
RTC_CNTL_WDTCONFIG1_REG: number;
RTC_CNTL_WDTWPROTECT_REG: number;
RTC_CNTL_WDT_WKEY: number;
MEMORY_MAP: (string | number)[][];
EFUSE_VDD_SPI_REG: number;
VDD_SPI_XPD: number;
VDD_SPI_TIEH: number;
VDD_SPI_FORCE: number;
UF2_FAMILY_ID: number;
EFUSE_MAX_KEY: number;
KEY_PURPOSES: {
0: string;
1: string;
2: string;
3: string;
4: string;
5: string;
6: string;
7: string;
8: string;
9: string;
10: string;
11: string;
};
UART_CLKDIV_MASK: number;
UART_DATE_REG_ADDR: number;
FLASH_WRITE_SIZE: number;
BOOTLOADER_FLASH_OFFSET: number;
FLASH_SIZES: {
"1MB": number;
"2MB": number;
"4MB": number;
"8MB": number;
"16MB": number;
};
getPkgVersion(loader: ESPLoader): Promise<number>;
getMinorChipVersion(loader: ESPLoader): Promise<number>;
getMajorChipVersion(loader: ESPLoader): Promise<number>;
getFlashVersion(loader: ESPLoader): Promise<number>;
getChipDescription(loader: ESPLoader): Promise<string>;
getFlashCap(loader: ESPLoader): Promise<number>;
getPsramVersion(loader: ESPLoader): Promise<number>;
getPsramCap(loader: ESPLoader): Promise<number>;
getBlock2Version(loader: ESPLoader): Promise<number>;
getChipFeatures(loader: ESPLoader): Promise<string[]>;
getCrystalFreq(loader: ESPLoader): Promise<number>;
_d2h(d: number): string;
readMac(loader: ESPLoader): Promise<string>;
getEraseSize(offset: number, size: number): number;
usingUsbOtg(loader: ESPLoader): Promise<boolean>;
postConnect(loader: ESPLoader): Promise<void>;
}

239
node_modules/esptool-js/lib/targets/esp32s2.js generated vendored Normal file
View File

@@ -0,0 +1,239 @@
import { ROM } from "./rom.js";
export class ESP32S2ROM extends ROM {
constructor() {
super(...arguments);
this.CHIP_NAME = "ESP32-S2";
this.IMAGE_CHIP_ID = 2;
this.IROM_MAP_START = 0x40080000;
this.IROM_MAP_END = 0x40b80000;
this.DROM_MAP_START = 0x3f000000;
this.DROM_MAP_END = 0x3f3f0000;
this.CHIP_DETECT_MAGIC_VALUE = [0x000007c6];
this.SPI_REG_BASE = 0x3f402000;
this.SPI_USR_OFFS = 0x18;
this.SPI_USR1_OFFS = 0x1c;
this.SPI_USR2_OFFS = 0x20;
this.SPI_MOSI_DLEN_OFFS = 0x24;
this.SPI_MISO_DLEN_OFFS = 0x28;
this.SPI_W0_OFFS = 0x58;
this.SPI_ADDR_REG_MSB = false;
this.MAC_EFUSE_REG = 0x3f41a044; // ESP32-S2 has special block for MAC efuses
this.UART_CLKDIV_REG = 0x3f400014;
this.SUPPORTS_ENCRYPTED_FLASH = true;
this.FLASH_ENCRYPTED_WRITE_ALIGN = 16;
// todo: use espefuse APIs to get this info
this.EFUSE_BASE = 0x3f41a000;
this.EFUSE_RD_REG_BASE = this.EFUSE_BASE + 0x030; // BLOCK0 read base address
this.EFUSE_BLOCK1_ADDR = this.EFUSE_BASE + 0x044;
this.EFUSE_BLOCK2_ADDR = this.EFUSE_BASE + 0x05c;
this.EFUSE_PURPOSE_KEY0_REG = this.EFUSE_BASE + 0x34;
this.EFUSE_PURPOSE_KEY0_SHIFT = 24;
this.EFUSE_PURPOSE_KEY1_REG = this.EFUSE_BASE + 0x34;
this.EFUSE_PURPOSE_KEY1_SHIFT = 28;
this.EFUSE_PURPOSE_KEY2_REG = this.EFUSE_BASE + 0x38;
this.EFUSE_PURPOSE_KEY2_SHIFT = 0;
this.EFUSE_PURPOSE_KEY3_REG = this.EFUSE_BASE + 0x38;
this.EFUSE_PURPOSE_KEY3_SHIFT = 4;
this.EFUSE_PURPOSE_KEY4_REG = this.EFUSE_BASE + 0x38;
this.EFUSE_PURPOSE_KEY4_SHIFT = 8;
this.EFUSE_PURPOSE_KEY5_REG = this.EFUSE_BASE + 0x38;
this.EFUSE_PURPOSE_KEY5_SHIFT = 12;
this.EFUSE_DIS_DOWNLOAD_MANUAL_ENCRYPT_REG = this.EFUSE_RD_REG_BASE;
this.EFUSE_DIS_DOWNLOAD_MANUAL_ENCRYPT = 1 << 19;
this.EFUSE_SPI_BOOT_CRYPT_CNT_REG = this.EFUSE_BASE + 0x034;
this.EFUSE_SPI_BOOT_CRYPT_CNT_MASK = 0x7 << 18;
this.EFUSE_SECURE_BOOT_EN_REG = this.EFUSE_BASE + 0x038;
this.EFUSE_SECURE_BOOT_EN_MASK = 1 << 20;
this.EFUSE_RD_REPEAT_DATA3_REG = this.EFUSE_BASE + 0x3c;
this.EFUSE_RD_REPEAT_DATA3_REG_FLASH_TYPE_MASK = 1 << 9;
this.PURPOSE_VAL_XTS_AES256_KEY_1 = 2;
this.PURPOSE_VAL_XTS_AES256_KEY_2 = 3;
this.PURPOSE_VAL_XTS_AES128_KEY = 4;
this.UARTDEV_BUF_NO = 0x3ffffd14; // Variable in ROM .bss which indicates the port in use
this.UARTDEV_BUF_NO_USB_OTG = 2; // Value of the above indicating that USB-OTG is in use
this.USB_RAM_BLOCK = 0x800; // Max block size USB-OTG is used
this.GPIO_STRAP_REG = 0x3f404038;
this.GPIO_STRAP_SPI_BOOT_MASK = 1 << 3; // Not download mode
this.GPIO_STRAP_VDDSPI_MASK = 1 << 4;
this.RTC_CNTL_OPTION1_REG = 0x3f408128;
this.RTC_CNTL_FORCE_DOWNLOAD_BOOT_MASK = 0x1; // Is download mode forced over USB?
this.RTCCNTL_BASE_REG = 0x3f408000;
this.RTC_CNTL_WDTCONFIG0_REG = this.RTCCNTL_BASE_REG + 0x0094;
this.RTC_CNTL_WDTCONFIG1_REG = this.RTCCNTL_BASE_REG + 0x0098;
this.RTC_CNTL_WDTWPROTECT_REG = this.RTCCNTL_BASE_REG + 0x00ac;
this.RTC_CNTL_WDT_WKEY = 0x50d83aa1;
this.MEMORY_MAP = [
[0x00000000, 0x00010000, "PADDING"],
[0x3f000000, 0x3ff80000, "DROM"],
[0x3f500000, 0x3ff80000, "EXTRAM_DATA"],
[0x3ff9e000, 0x3ffa0000, "RTC_DRAM"],
[0x3ff9e000, 0x40000000, "BYTE_ACCESSIBLE"],
[0x3ff9e000, 0x40072000, "MEM_INTERNAL"],
[0x3ffb0000, 0x40000000, "DRAM"],
[0x40000000, 0x4001a100, "IROM_MASK"],
[0x40020000, 0x40070000, "IRAM"],
[0x40070000, 0x40072000, "RTC_IRAM"],
[0x40080000, 0x40800000, "IROM"],
[0x50000000, 0x50002000, "RTC_DATA"],
];
this.EFUSE_VDD_SPI_REG = this.EFUSE_BASE + 0x34;
this.VDD_SPI_XPD = 1 << 4;
this.VDD_SPI_TIEH = 1 << 5;
this.VDD_SPI_FORCE = 1 << 6;
this.UF2_FAMILY_ID = 0xbfdd4eee;
this.EFUSE_MAX_KEY = 5;
this.KEY_PURPOSES = {
0: "USER/EMPTY",
1: "RESERVED",
2: "XTS_AES_256_KEY_1",
3: "XTS_AES_256_KEY_2",
4: "XTS_AES_128_KEY",
5: "HMAC_DOWN_ALL",
6: "HMAC_DOWN_JTAG",
7: "HMAC_DOWN_DIGITAL_SIGNATURE",
8: "HMAC_UP",
9: "SECURE_BOOT_DIGEST0",
10: "SECURE_BOOT_DIGEST1",
11: "SECURE_BOOT_DIGEST2",
};
this.UART_CLKDIV_MASK = 0xfffff;
this.UART_DATE_REG_ADDR = 0x60000078;
this.FLASH_WRITE_SIZE = 0x400;
this.BOOTLOADER_FLASH_OFFSET = 0x1000;
this.FLASH_SIZES = {
"1MB": 0x00,
"2MB": 0x10,
"4MB": 0x20,
"8MB": 0x30,
"16MB": 0x40,
};
}
async getPkgVersion(loader) {
const numWord = 4;
const addr = this.EFUSE_BLOCK1_ADDR + 4 * numWord;
const word = await loader.readReg(addr);
const pkgVersion = (word >> 0) & 0x0f;
return pkgVersion;
}
async getMinorChipVersion(loader) {
const hiNumWord = 3;
const hi = ((await loader.readReg(this.EFUSE_BLOCK1_ADDR + 4 * hiNumWord)) >> 20) & 0x01;
const lowNumWord = 4;
const low = ((await loader.readReg(this.EFUSE_BLOCK1_ADDR + 4 * lowNumWord)) >> 4) & 0x07;
return (hi << 3) + low;
}
async getMajorChipVersion(loader) {
const numWord = 3;
return ((await loader.readReg(this.EFUSE_BLOCK1_ADDR + 4 * numWord)) >> 18) & 0x03;
}
async getFlashVersion(loader) {
const numWord = 3;
return ((await loader.readReg(this.EFUSE_BLOCK1_ADDR + 4 * numWord)) >> 21) & 0x0f;
}
async getChipDescription(loader) {
const chipDesc = {
0: "ESP32-S2",
1: "ESP32-S2FH2",
2: "ESP32-S2FH4",
102: "ESP32-S2FNR2",
100: "ESP32-S2R2",
};
const chipIndex = (await this.getFlashCap(loader)) + (await this.getPsramCap(loader)) * 100;
const majorRev = await this.getMajorChipVersion(loader);
const minorRev = await this.getMinorChipVersion(loader);
return `${chipDesc[chipIndex] || "unknown ESP32-S2"} (revision v${majorRev}.${minorRev})`;
}
async getFlashCap(loader) {
return await this.getFlashVersion(loader);
}
async getPsramVersion(loader) {
const numWord = 3;
const addr = this.EFUSE_BLOCK1_ADDR + 4 * numWord;
const registerValue = await loader.readReg(addr);
const psramCap = (registerValue >> 28) & 0x0f;
return psramCap;
}
async getPsramCap(loader) {
return await this.getPsramVersion(loader);
}
async getBlock2Version(loader) {
const numWord = 4;
const addr = this.EFUSE_BLOCK2_ADDR + 4 * numWord;
const registerValue = await loader.readReg(addr);
const block2Ver = (registerValue >> 4) & 0x07;
return block2Ver;
}
async getChipFeatures(loader) {
const features = ["Wi-Fi"];
const flashMap = {
0: "No Embedded Flash",
1: "Embedded Flash 2MB",
2: "Embedded Flash 4MB",
};
const flashCap = await this.getFlashCap(loader);
const flashDescription = flashMap[flashCap] || "Unknown Embedded Flash";
features.push(flashDescription);
const psramMap = {
0: "No Embedded Flash",
1: "Embedded PSRAM 2MB",
2: "Embedded PSRAM 4MB",
};
const psramCap = await this.getPsramCap(loader);
const psramDescription = psramMap[psramCap] || "Unknown Embedded PSRAM";
features.push(psramDescription);
const block2VersionMap = {
0: "No calibration in BLK2 of efuse",
1: "ADC and temperature sensor calibration in BLK2 of efuse V1",
2: "ADC and temperature sensor calibration in BLK2 of efuse V2",
};
const block2Ver = await this.getBlock2Version(loader);
const block2VersionDescription = block2VersionMap[block2Ver] || "Unknown Calibration in BLK2";
features.push(block2VersionDescription);
return features;
}
async getCrystalFreq(loader) {
return 40;
}
_d2h(d) {
const h = (+d).toString(16);
return h.length === 1 ? "0" + h : h;
}
async readMac(loader) {
let mac0 = await loader.readReg(this.MAC_EFUSE_REG);
mac0 = mac0 >>> 0;
let mac1 = await loader.readReg(this.MAC_EFUSE_REG + 4);
mac1 = (mac1 >>> 0) & 0x0000ffff;
const mac = new Uint8Array(6);
mac[0] = (mac1 >> 8) & 0xff;
mac[1] = mac1 & 0xff;
mac[2] = (mac0 >> 24) & 0xff;
mac[3] = (mac0 >> 16) & 0xff;
mac[4] = (mac0 >> 8) & 0xff;
mac[5] = mac0 & 0xff;
return (this._d2h(mac[0]) +
":" +
this._d2h(mac[1]) +
":" +
this._d2h(mac[2]) +
":" +
this._d2h(mac[3]) +
":" +
this._d2h(mac[4]) +
":" +
this._d2h(mac[5]));
}
getEraseSize(offset, size) {
return size;
}
async usingUsbOtg(loader) {
const uartNo = (await loader.readReg(this.UARTDEV_BUF_NO)) & 0xff;
return uartNo === this.UARTDEV_BUF_NO_USB_OTG;
}
async postConnect(loader) {
const usingUsbOtg = await this.usingUsbOtg(loader);
loader.debug("In _post_connect using USB OTG ?" + usingUsbOtg);
if (usingUsbOtg) {
loader.ESP_RAM_BLOCK = this.USB_RAM_BLOCK;
}
}
}

51
node_modules/esptool-js/lib/targets/esp32s3.d.ts generated vendored Normal file
View File

@@ -0,0 +1,51 @@
import { ESPLoader } from "../esploader.js";
import { ROM } from "./rom.js";
export declare class ESP32S3ROM extends ROM {
CHIP_NAME: string;
IMAGE_CHIP_ID: number;
EFUSE_BASE: number;
MAC_EFUSE_REG: number;
EFUSE_BLOCK1_ADDR: number;
EFUSE_BLOCK2_ADDR: number;
UART_CLKDIV_REG: number;
UART_CLKDIV_MASK: number;
UART_DATE_REG_ADDR: number;
FLASH_WRITE_SIZE: number;
BOOTLOADER_FLASH_OFFSET: number;
FLASH_SIZES: {
"1MB": number;
"2MB": number;
"4MB": number;
"8MB": number;
"16MB": number;
};
SPI_REG_BASE: number;
SPI_USR_OFFS: number;
SPI_USR1_OFFS: number;
SPI_USR2_OFFS: number;
SPI_MOSI_DLEN_OFFS: number;
SPI_MISO_DLEN_OFFS: number;
SPI_W0_OFFS: number;
USB_RAM_BLOCK: number;
UARTDEV_BUF_NO_USB: number;
UARTDEV_BUF_NO: number;
getChipDescription(loader: ESPLoader): Promise<string>;
getPkgVersion(loader: ESPLoader): Promise<number>;
getRawMinorChipVersion(loader: ESPLoader): Promise<number>;
getMinorChipVersion(loader: ESPLoader): Promise<number>;
getRawMajorChipVersion(loader: ESPLoader): Promise<number>;
getMajorChipVersion(loader: ESPLoader): Promise<number>;
getBlkVersionMajor(loader: ESPLoader): Promise<number>;
getBlkVersionMinor(loader: ESPLoader): Promise<number>;
isEco0(loader: ESPLoader, minorRaw: number): Promise<boolean>;
getFlashCap(loader: ESPLoader): Promise<number>;
getFlashVendor(loader: ESPLoader): Promise<string>;
getPsramCap(loader: ESPLoader): Promise<number>;
getPsramVendor(loader: ESPLoader): Promise<string>;
getChipFeatures(loader: ESPLoader): Promise<string[]>;
getCrystalFreq(loader: ESPLoader): Promise<number>;
_d2h(d: number): string;
postConnect(loader: ESPLoader): Promise<void>;
readMac(loader: ESPLoader): Promise<string>;
getEraseSize(offset: number, size: number): number;
}

201
node_modules/esptool-js/lib/targets/esp32s3.js generated vendored Normal file
View File

@@ -0,0 +1,201 @@
import { ROM } from "./rom.js";
export class ESP32S3ROM extends ROM {
constructor() {
super(...arguments);
this.CHIP_NAME = "ESP32-S3";
this.IMAGE_CHIP_ID = 9;
this.EFUSE_BASE = 0x60007000;
this.MAC_EFUSE_REG = this.EFUSE_BASE + 0x044;
this.EFUSE_BLOCK1_ADDR = this.EFUSE_BASE + 0x44;
this.EFUSE_BLOCK2_ADDR = this.EFUSE_BASE + 0x5c;
this.UART_CLKDIV_REG = 0x60000014;
this.UART_CLKDIV_MASK = 0xfffff;
this.UART_DATE_REG_ADDR = 0x60000080;
this.FLASH_WRITE_SIZE = 0x400;
this.BOOTLOADER_FLASH_OFFSET = 0x0;
this.FLASH_SIZES = {
"1MB": 0x00,
"2MB": 0x10,
"4MB": 0x20,
"8MB": 0x30,
"16MB": 0x40,
};
this.SPI_REG_BASE = 0x60002000;
this.SPI_USR_OFFS = 0x18;
this.SPI_USR1_OFFS = 0x1c;
this.SPI_USR2_OFFS = 0x20;
this.SPI_MOSI_DLEN_OFFS = 0x24;
this.SPI_MISO_DLEN_OFFS = 0x28;
this.SPI_W0_OFFS = 0x58;
this.USB_RAM_BLOCK = 0x800;
this.UARTDEV_BUF_NO_USB = 3;
this.UARTDEV_BUF_NO = 0x3fcef14c;
}
async getChipDescription(loader) {
const majorRev = await this.getMajorChipVersion(loader);
const minorRev = await this.getMinorChipVersion(loader);
const pkgVersion = await this.getPkgVersion(loader);
const chipName = {
0: "ESP32-S3 (QFN56)",
1: "ESP32-S3-PICO-1 (LGA56)",
};
return `${chipName[pkgVersion] || "unknown ESP32-S3"} (revision v${majorRev}.${minorRev})`;
}
async getPkgVersion(loader) {
const numWord = 3;
return ((await loader.readReg(this.EFUSE_BLOCK1_ADDR + 4 * numWord)) >> 21) & 0x07;
}
async getRawMinorChipVersion(loader) {
const hiNumWord = 5;
const hi = ((await loader.readReg(this.EFUSE_BLOCK1_ADDR + 4 * hiNumWord)) >> 23) & 0x01;
const lowNumWord = 3;
const low = ((await loader.readReg(this.EFUSE_BLOCK1_ADDR + 4 * lowNumWord)) >> 18) & 0x07;
return (hi << 3) + low;
}
async getMinorChipVersion(loader) {
const minorRaw = await this.getRawMinorChipVersion(loader);
if (await this.isEco0(loader, minorRaw)) {
return 0;
}
return this.getRawMinorChipVersion(loader);
}
async getRawMajorChipVersion(loader) {
const numWord = 5;
return ((await loader.readReg(this.EFUSE_BLOCK1_ADDR + 4 * numWord)) >> 24) & 0x03;
}
async getMajorChipVersion(loader) {
const minorRaw = await this.getRawMinorChipVersion(loader);
if (await this.isEco0(loader, minorRaw)) {
return 0;
}
return this.getRawMajorChipVersion(loader);
}
async getBlkVersionMajor(loader) {
const numWord = 4;
return ((await loader.readReg(this.EFUSE_BLOCK2_ADDR + 4 * numWord)) >> 0) & 0x03;
}
async getBlkVersionMinor(loader) {
const numWord = 3;
return ((await loader.readReg(this.EFUSE_BLOCK1_ADDR + 4 * numWord)) >> 24) & 0x07;
}
async isEco0(loader, minorRaw) {
// Workaround: The major version field was allocated to other purposes
// when block version is v1.1.
// Luckily only chip v0.0 have this kind of block version and efuse usage.
return ((minorRaw & 0x7) === 0 &&
(await this.getBlkVersionMajor(loader)) === 1 &&
(await this.getBlkVersionMinor(loader)) === 1);
}
async getFlashCap(loader) {
const numWord = 3;
const block1Addr = this.EFUSE_BASE + 0x044;
const addr = block1Addr + 4 * numWord;
const registerValue = await loader.readReg(addr);
const flashCap = (registerValue >> 27) & 0x07;
return flashCap;
}
async getFlashVendor(loader) {
const numWord = 4;
const block1Addr = this.EFUSE_BASE + 0x044;
const addr = block1Addr + 4 * numWord;
const registerValue = await loader.readReg(addr);
const vendorId = (registerValue >> 0) & 0x07;
const vendorMap = {
1: "XMC",
2: "GD",
3: "FM",
4: "TT",
5: "BY",
};
return vendorMap[vendorId] || "";
}
async getPsramCap(loader) {
const numWord = 4;
const block1Addr = this.EFUSE_BASE + 0x044;
const addr = block1Addr + 4 * numWord;
const registerValue = await loader.readReg(addr);
const psramCap = (registerValue >> 3) & 0x03;
return psramCap;
}
async getPsramVendor(loader) {
const numWord = 4;
const block1Addr = this.EFUSE_BASE + 0x044;
const addr = block1Addr + 4 * numWord;
const registerValue = await loader.readReg(addr);
const vendorId = (registerValue >> 7) & 0x03;
const vendorMap = {
1: "AP_3v3",
2: "AP_1v8",
};
return vendorMap[vendorId] || "";
}
async getChipFeatures(loader) {
const features = ["Wi-Fi", "BLE"];
const flashMap = {
0: null,
1: "Embedded Flash 8MB",
2: "Embedded Flash 4MB",
};
const flashCap = await this.getFlashCap(loader);
const flashVendor = await this.getFlashVendor(loader);
const flash = flashMap[flashCap];
const flashDescription = flash !== undefined ? flash : "Unknown Embedded Flash";
if (flash !== null) {
features.push(`${flashDescription} (${flashVendor})`);
}
const psramMap = {
0: null,
1: "Embedded PSRAM 8MB",
2: "Embedded PSRAM 2MB",
};
const psramCap = await this.getPsramCap(loader);
const psramVendor = await this.getPsramVendor(loader);
const psram = psramMap[psramCap];
const psramDescription = psram !== undefined ? psram : "Unknown Embedded PSRAM";
if (psram !== null) {
features.push(`${psramDescription} (${psramVendor})`);
}
return features;
}
async getCrystalFreq(loader) {
return 40;
}
_d2h(d) {
const h = (+d).toString(16);
return h.length === 1 ? "0" + h : h;
}
async postConnect(loader) {
const bufNo = (await loader.readReg(this.UARTDEV_BUF_NO)) & 0xff;
loader.debug("In _post_connect " + bufNo);
if (bufNo == this.UARTDEV_BUF_NO_USB) {
loader.ESP_RAM_BLOCK = this.USB_RAM_BLOCK;
}
}
async readMac(loader) {
let mac0 = await loader.readReg(this.MAC_EFUSE_REG);
mac0 = mac0 >>> 0;
let mac1 = await loader.readReg(this.MAC_EFUSE_REG + 4);
mac1 = (mac1 >>> 0) & 0x0000ffff;
const mac = new Uint8Array(6);
mac[0] = (mac1 >> 8) & 0xff;
mac[1] = mac1 & 0xff;
mac[2] = (mac0 >> 24) & 0xff;
mac[3] = (mac0 >> 16) & 0xff;
mac[4] = (mac0 >> 8) & 0xff;
mac[5] = mac0 & 0xff;
return (this._d2h(mac[0]) +
":" +
this._d2h(mac[1]) +
":" +
this._d2h(mac[2]) +
":" +
this._d2h(mac[3]) +
":" +
this._d2h(mac[4]) +
":" +
this._d2h(mac[5]));
}
getEraseSize(offset, size) {
return size;
}
}

38
node_modules/esptool-js/lib/targets/esp8266.d.ts generated vendored Normal file
View File

@@ -0,0 +1,38 @@
import { ESPLoader } from "../esploader.js";
import { ROM } from "./rom.js";
export declare class ESP8266ROM extends ROM {
CHIP_NAME: string;
CHIP_DETECT_MAGIC_VALUE: number[];
EFUSE_RD_REG_BASE: number;
UART_CLKDIV_REG: number;
UART_CLKDIV_MASK: number;
XTAL_CLK_DIVIDER: number;
FLASH_WRITE_SIZE: number;
BOOTLOADER_FLASH_OFFSET: number;
UART_DATE_REG_ADDR: number;
FLASH_SIZES: {
"512KB": number;
"256KB": number;
"1MB": number;
"2MB": number;
"4MB": number;
"2MB-c1": number;
"4MB-c1": number;
"8MB": number;
"16MB": number;
};
SPI_REG_BASE: number;
SPI_USR_OFFS: number;
SPI_USR1_OFFS: number;
SPI_USR2_OFFS: number;
SPI_MOSI_DLEN_OFFS: number;
SPI_MISO_DLEN_OFFS: number;
SPI_W0_OFFS: number;
readEfuse(loader: ESPLoader, offset: number): Promise<number>;
getChipDescription(loader: ESPLoader): Promise<"ESP8285" | "ESP8266EX">;
getChipFeatures: (loader: ESPLoader) => Promise<string[]>;
getCrystalFreq(loader: ESPLoader): Promise<number>;
_d2h(d: number): string;
readMac(loader: ESPLoader): Promise<string>;
getEraseSize(offset: number, size: number): number;
}

118
node_modules/esptool-js/lib/targets/esp8266.js generated vendored Normal file
View File

@@ -0,0 +1,118 @@
import { ROM } from "./rom.js";
export class ESP8266ROM extends ROM {
constructor() {
super(...arguments);
this.CHIP_NAME = "ESP8266";
this.CHIP_DETECT_MAGIC_VALUE = [0xfff0c101];
this.EFUSE_RD_REG_BASE = 0x3ff00050;
this.UART_CLKDIV_REG = 0x60000014;
this.UART_CLKDIV_MASK = 0xfffff;
this.XTAL_CLK_DIVIDER = 2;
this.FLASH_WRITE_SIZE = 0x4000;
// NOT IMPLEMENTED, SETTING EMPTY VALUE
this.BOOTLOADER_FLASH_OFFSET = 0;
this.UART_DATE_REG_ADDR = 0;
this.FLASH_SIZES = {
"512KB": 0x00,
"256KB": 0x10,
"1MB": 0x20,
"2MB": 0x30,
"4MB": 0x40,
"2MB-c1": 0x50,
"4MB-c1": 0x60,
"8MB": 0x80,
"16MB": 0x90,
};
this.SPI_REG_BASE = 0x60000200;
this.SPI_USR_OFFS = 0x1c;
this.SPI_USR1_OFFS = 0x20;
this.SPI_USR2_OFFS = 0x24;
this.SPI_MOSI_DLEN_OFFS = 0; // not in esp8266
this.SPI_MISO_DLEN_OFFS = 0; // not in esp8266
this.SPI_W0_OFFS = 0x40;
this.getChipFeatures = async (loader) => {
const features = ["WiFi"];
if ((await this.getChipDescription(loader)) == "ESP8285")
features.push("Embedded Flash");
return features;
};
}
async readEfuse(loader, offset) {
const addr = this.EFUSE_RD_REG_BASE + 4 * offset;
loader.debug("Read efuse " + addr);
return await loader.readReg(addr);
}
async getChipDescription(loader) {
const efuse3 = await this.readEfuse(loader, 2);
const efuse0 = await this.readEfuse(loader, 0);
const is8285 = ((efuse0 & (1 << 4)) | (efuse3 & (1 << 16))) != 0; // One or the other efuse bit is set for ESP8285
return is8285 ? "ESP8285" : "ESP8266EX";
}
async getCrystalFreq(loader) {
const uartDiv = (await loader.readReg(this.UART_CLKDIV_REG)) & this.UART_CLKDIV_MASK;
const etsXtal = (loader.transport.baudrate * uartDiv) / 1000000 / this.XTAL_CLK_DIVIDER;
let normXtal;
if (etsXtal > 33) {
normXtal = 40;
}
else {
normXtal = 26;
}
if (Math.abs(normXtal - etsXtal) > 1) {
loader.info("WARNING: Detected crystal freq " +
etsXtal +
"MHz is quite different to normalized freq " +
normXtal +
"MHz. Unsupported crystal in use?");
}
return normXtal;
}
_d2h(d) {
const h = (+d).toString(16);
return h.length === 1 ? "0" + h : h;
}
async readMac(loader) {
let mac0 = await this.readEfuse(loader, 0);
mac0 = mac0 >>> 0;
let mac1 = await this.readEfuse(loader, 1);
mac1 = mac1 >>> 0;
let mac3 = await this.readEfuse(loader, 3);
mac3 = mac3 >>> 0;
const mac = new Uint8Array(6);
if (mac3 != 0) {
mac[0] = (mac3 >> 16) & 0xff;
mac[1] = (mac3 >> 8) & 0xff;
mac[2] = mac3 & 0xff;
}
else if (((mac1 >> 16) & 0xff) == 0) {
mac[0] = 0x18;
mac[1] = 0xfe;
mac[2] = 0x34;
}
else if (((mac1 >> 16) & 0xff) == 1) {
mac[0] = 0xac;
mac[1] = 0xd0;
mac[2] = 0x74;
}
else {
loader.error("Unknown OUI");
}
mac[3] = (mac1 >> 8) & 0xff;
mac[4] = mac1 & 0xff;
mac[5] = (mac0 >> 24) & 0xff;
return (this._d2h(mac[0]) +
":" +
this._d2h(mac[1]) +
":" +
this._d2h(mac[2]) +
":" +
this._d2h(mac[3]) +
":" +
this._d2h(mac[4]) +
":" +
this._d2h(mac[5]));
}
getEraseSize(offset, size) {
return size;
}
}

83
node_modules/esptool-js/lib/targets/rom.d.ts generated vendored Normal file
View File

@@ -0,0 +1,83 @@
import { ESPLoader } from "../esploader.js";
/**
* Represents a chip ROM with basic registers field and abstract functions.
*/
export declare abstract class ROM {
/**
* Read ESP32 eFuse.
* @param {ESPLoader} loader - Loader class to communicate with chip.
* @param {number} offset - Offset to start erase.
* @returns {number} The eFuse number.
*/
protected readEfuse?(loader: ESPLoader, offset: number): Promise<number>;
/**
* Get the package version number.
* @param {ESPLoader} loader - Loader class to communicate with chip.
* @returns {number} The package version number.
*/
protected getPkgVersion?(loader: ESPLoader): Promise<number>;
/**
* Get the chip revision number.
* @param {ESPLoader} loader - Loader class to communicate with chip.
* @returns {number} The chip revision number.
*/
protected getChipRevision?(loader: ESPLoader): Promise<number>;
/**
* Get the chip description.
* @param {ESPLoader} loader - Loader class to communicate with chip.
* @returns {string} The chip description as string.
*/
abstract getChipDescription(loader: ESPLoader): Promise<string>;
/**
* Get the chip features.
* @param {ESPLoader} loader - Loader class to communicate with chip.
* @returns {string} The chip features as string.
*/
abstract getChipFeatures(loader: ESPLoader): Promise<string[]>;
/**
* Get the crystal frequency for the chip.
* @param {ESPLoader} loader - Loader class to communicate with chip.
* @returns {string} The crystal frequency as number.
*/
abstract getCrystalFreq(loader: ESPLoader): Promise<number>;
/**
* Convert a number to hex string.
* @param {number} d - Number to convert to hex string.
* @returns {string} The hex string.
*/
abstract _d2h(d: number): string;
/**
* Get the chip mac address.
* @param {ESPLoader} loader - Loader class to communicate with chip.
* @returns {string} The mac address string.
*/
abstract readMac(loader: ESPLoader): Promise<string>;
/**
* Function to be executed after chip connection
* @param {ESPLoader} loader - Loader class to communicate with chip.
*/
postConnect?(loader: ESPLoader): Promise<void>;
/**
* Get the chip erase size.
* @param {number} offset - Offset to start erase.
* @param {number} size - Size to erase.
* @returns {number} The erase size of the chip as number.
*/
getEraseSize(offset: number, size: number): number;
abstract FLASH_SIZES: {
[key: string]: number;
};
abstract BOOTLOADER_FLASH_OFFSET: number;
abstract CHIP_NAME: string;
abstract FLASH_WRITE_SIZE: number;
abstract SPI_MOSI_DLEN_OFFS: number;
abstract SPI_MISO_DLEN_OFFS: number;
abstract SPI_REG_BASE: number;
abstract SPI_USR_OFFS: number;
abstract SPI_USR1_OFFS: number;
abstract SPI_USR2_OFFS: number;
abstract SPI_W0_OFFS: number;
abstract UART_CLKDIV_MASK: number;
abstract UART_CLKDIV_REG: number;
abstract UART_DATE_REG_ADDR: number;
}

14
node_modules/esptool-js/lib/targets/rom.js generated vendored Normal file
View File

@@ -0,0 +1,14 @@
/**
* Represents a chip ROM with basic registers field and abstract functions.
*/
export class ROM {
/**
* Get the chip erase size.
* @param {number} offset - Offset to start erase.
* @param {number} size - Size to erase.
* @returns {number} The erase size of the chip as number.
*/
getEraseSize(offset, size) {
return size;
}
}

View File

@@ -0,0 +1,8 @@
{
"entry": 1074521580,
"text": "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",
"text_start": 1074520064,
"data": "DMD8P+znC0B/6AtAZ+0LQAbpC0Cf6AtABukLQGXpC0CC6gtA9OoLQJ3qC0CV5wtAGuoLQHTqC0CI6QtAGOsLQLDpC0AY6wtAbegLQMroC0AG6QtAZekLQIXoC0DI6wtAKe0LQLjmC0BL7QtAuOYLQLjmC0C45gtAuOYLQLjmC0C45gtAuOYLQLjmC0Bv6wtAuOYLQEnsC0Ap7QtA",
"data_start": 1073605544,
"bss_start": 1073528832
}

View File

@@ -0,0 +1,8 @@
{
"entry": 1077413304,
"text": "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",
"text_start": 1077411840,
"data": "DEDKP+AIOEAsCThAhAk4QFIKOEC+CjhAbAo4QKgHOEAOCjhATgo4QJgJOEBYBzhAzAk4QFgHOEC6CDhA/gg4QCwJOECECThAzAg4QBIIOEBCCDhAyAg4QBYNOEAsCThA1gs4QMoMOECkBjhA9Aw4QKQGOECkBjhApAY4QKQGOECkBjhApAY4QKQGOECkBjhAcgs4QKQGOEDyCzhAygw4QA==",
"data_start": 1070295976,
"bss_start": 1070219264
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,8 @@
{
"entry": 1341195918,
"text": "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",
"text_start": 1341194240,
"data": "EAD1TwYK8U9WCvFPrgrxT4QL8U/wC/FPngvxT9QI8U9AC/FPgAvxT8IK8U+ECPFP9grxT4QI8U/gCfFPJgrxT1YK8U+uCvFP8gnxTzgJ8U9oCfFP7gnxT0AO8U9WCvFPCA3xTwAO8U/EB/FPJA7xT8QH8U/EB/FPxAfxT8QH8U/EB/FPxAfxT8QH8U/EB/FPpAzxT8QH8U8mDfFPAA7xTw==",
"data_start": 1341533100,
"bss_start": 1341456384
}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long