mirror of
https://github.com/alexandrebobkov/ESP-Nodes.git
synced 2025-10-03 05:57:50 +00:00
vs-code server
This commit is contained in:
32
node_modules/esptool-js/lib/targets/esp32.d.ts
generated
vendored
Normal file
32
node_modules/esptool-js/lib/targets/esp32.d.ts
generated
vendored
Normal 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
185
node_modules/esptool-js/lib/targets/esp32.js
generated
vendored
Normal 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
37
node_modules/esptool-js/lib/targets/esp32c2.d.ts
generated
vendored
Normal 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
114
node_modules/esptool-js/lib/targets/esp32c2.js
generated
vendored
Normal 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
37
node_modules/esptool-js/lib/targets/esp32c3.d.ts
generated
vendored
Normal 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
133
node_modules/esptool-js/lib/targets/esp32c3.js
generated
vendored
Normal 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
70
node_modules/esptool-js/lib/targets/esp32c5.d.ts
generated
vendored
Normal 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
129
node_modules/esptool-js/lib/targets/esp32c5.js
generated
vendored
Normal 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
36
node_modules/esptool-js/lib/targets/esp32c6.d.ts
generated
vendored
Normal 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
96
node_modules/esptool-js/lib/targets/esp32c6.js
generated
vendored
Normal 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
62
node_modules/esptool-js/lib/targets/esp32c61.d.ts
generated
vendored
Normal 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
122
node_modules/esptool-js/lib/targets/esp32c61.js
generated
vendored
Normal 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
41
node_modules/esptool-js/lib/targets/esp32h2.d.ts
generated
vendored
Normal 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
103
node_modules/esptool-js/lib/targets/esp32h2.js
generated
vendored
Normal 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
78
node_modules/esptool-js/lib/targets/esp32p4.d.ts
generated
vendored
Normal 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
181
node_modules/esptool-js/lib/targets/esp32p4.js
generated
vendored
Normal 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
111
node_modules/esptool-js/lib/targets/esp32s2.d.ts
generated
vendored
Normal 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
239
node_modules/esptool-js/lib/targets/esp32s2.js
generated
vendored
Normal 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
51
node_modules/esptool-js/lib/targets/esp32s3.d.ts
generated
vendored
Normal 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
201
node_modules/esptool-js/lib/targets/esp32s3.js
generated
vendored
Normal 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
38
node_modules/esptool-js/lib/targets/esp8266.d.ts
generated
vendored
Normal 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
118
node_modules/esptool-js/lib/targets/esp8266.js
generated
vendored
Normal 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
83
node_modules/esptool-js/lib/targets/rom.d.ts
generated
vendored
Normal 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
14
node_modules/esptool-js/lib/targets/rom.js
generated
vendored
Normal 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;
|
||||
}
|
||||
}
|
8
node_modules/esptool-js/lib/targets/stub_flasher/stub_flasher_32.json
generated
vendored
Normal file
8
node_modules/esptool-js/lib/targets/stub_flasher/stub_flasher_32.json
generated
vendored
Normal 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
|
||||
}
|
8
node_modules/esptool-js/lib/targets/stub_flasher/stub_flasher_32c2.json
generated
vendored
Normal file
8
node_modules/esptool-js/lib/targets/stub_flasher/stub_flasher_32c2.json
generated
vendored
Normal 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
|
||||
}
|
8
node_modules/esptool-js/lib/targets/stub_flasher/stub_flasher_32c3.json
generated
vendored
Normal file
8
node_modules/esptool-js/lib/targets/stub_flasher/stub_flasher_32c3.json
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
8
node_modules/esptool-js/lib/targets/stub_flasher/stub_flasher_32c5.json
generated
vendored
Normal file
8
node_modules/esptool-js/lib/targets/stub_flasher/stub_flasher_32c5.json
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
8
node_modules/esptool-js/lib/targets/stub_flasher/stub_flasher_32c6.json
generated
vendored
Normal file
8
node_modules/esptool-js/lib/targets/stub_flasher/stub_flasher_32c6.json
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
8
node_modules/esptool-js/lib/targets/stub_flasher/stub_flasher_32c61.json
generated
vendored
Normal file
8
node_modules/esptool-js/lib/targets/stub_flasher/stub_flasher_32c61.json
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
8
node_modules/esptool-js/lib/targets/stub_flasher/stub_flasher_32h2.json
generated
vendored
Normal file
8
node_modules/esptool-js/lib/targets/stub_flasher/stub_flasher_32h2.json
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
8
node_modules/esptool-js/lib/targets/stub_flasher/stub_flasher_32p4.json
generated
vendored
Normal file
8
node_modules/esptool-js/lib/targets/stub_flasher/stub_flasher_32p4.json
generated
vendored
Normal 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
|
||||
}
|
8
node_modules/esptool-js/lib/targets/stub_flasher/stub_flasher_32s2.json
generated
vendored
Normal file
8
node_modules/esptool-js/lib/targets/stub_flasher/stub_flasher_32s2.json
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
8
node_modules/esptool-js/lib/targets/stub_flasher/stub_flasher_32s3.json
generated
vendored
Normal file
8
node_modules/esptool-js/lib/targets/stub_flasher/stub_flasher_32s3.json
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
8
node_modules/esptool-js/lib/targets/stub_flasher/stub_flasher_8266.json
generated
vendored
Normal file
8
node_modules/esptool-js/lib/targets/stub_flasher/stub_flasher_8266.json
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user