esp32tool 1.6.7 → 1.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/apple-touch-icon.png +0 -0
- package/dist/const.d.ts +6 -1
- package/dist/const.js +9 -3
- package/dist/esp_loader.js +35 -22
- package/dist/flash_jedec.js +5 -0
- package/dist/stubs/esp32.json +5 -5
- package/dist/stubs/esp32c2.json +4 -4
- package/dist/stubs/esp32c3.json +4 -4
- package/dist/stubs/esp32c5.json +4 -4
- package/dist/stubs/esp32c6.json +4 -4
- package/dist/stubs/esp32c61.json +4 -4
- package/dist/stubs/esp32h2.json +4 -4
- package/dist/stubs/esp32p4.json +4 -4
- package/dist/stubs/esp32p4r3.json +4 -4
- package/dist/stubs/esp32s2.json +4 -4
- package/dist/stubs/esp32s3.json +27 -5
- package/dist/stubs/esp32s31.json +8 -0
- package/dist/stubs/esp8266.json +5 -5
- package/dist/stubs/index.js +4 -2
- package/dist/web/esp32-n1hWo9nn.js +1 -0
- package/dist/web/esp32c2-CPnHdueO.js +1 -0
- package/dist/web/esp32c3-ea1mvbdS.js +1 -0
- package/dist/web/esp32c5-Dzn4lVbd.js +1 -0
- package/dist/web/esp32c6-DL8Ekn6h.js +1 -0
- package/dist/web/esp32c61-DDIvCrFA.js +1 -0
- package/dist/web/esp32h2-Dnu87P5q.js +1 -0
- package/dist/web/esp32p4-HGPqzQsU.js +1 -0
- package/dist/web/esp32p4r3-DounZFQB.js +1 -0
- package/dist/web/esp32s2-gzKRBlZl.js +1 -0
- package/dist/web/esp32s3-BzPgJvNE.js +1 -0
- package/dist/web/esp32s31-Ck4fXdho.js +1 -0
- package/dist/web/esp8266-KToZdvHe.js +1 -0
- package/dist/web/index.js +1 -1
- package/icons/icon-128.png +0 -0
- package/icons/icon-144.png +0 -0
- package/icons/icon-152.png +0 -0
- package/icons/icon-192.png +0 -0
- package/icons/icon-384.png +0 -0
- package/icons/icon-512.png +0 -0
- package/icons/icon-72.png +0 -0
- package/icons/icon-96.png +0 -0
- package/js/modules/esp32-n1hWo9nn.js +1 -0
- package/js/modules/esp32c2-CPnHdueO.js +1 -0
- package/js/modules/esp32c3-ea1mvbdS.js +1 -0
- package/js/modules/esp32c5-Dzn4lVbd.js +1 -0
- package/js/modules/esp32c6-DL8Ekn6h.js +1 -0
- package/js/modules/esp32c61-DDIvCrFA.js +1 -0
- package/js/modules/esp32h2-Dnu87P5q.js +1 -0
- package/js/modules/esp32p4-HGPqzQsU.js +1 -0
- package/js/modules/esp32p4r3-DounZFQB.js +1 -0
- package/js/modules/esp32s2-gzKRBlZl.js +1 -0
- package/js/modules/esp32s3-BzPgJvNE.js +1 -0
- package/js/modules/esp32s31-Ck4fXdho.js +1 -0
- package/js/modules/esp8266-KToZdvHe.js +1 -0
- package/js/modules/esptool.js +1 -1
- package/js/nvs-editor.js +177 -0
- package/package.cli.json +1 -1
- package/package.json +12 -2
- package/screenshots/desktop.png +0 -0
- package/screenshots/mobile.png +0 -0
- package/src/const.ts +12 -3
- package/src/esp_loader.ts +41 -24
- package/src/flash_jedec.ts +5 -0
- package/src/stubs/README.md +3 -1
- package/src/stubs/esp32.json +5 -5
- package/src/stubs/esp32c2.json +4 -4
- package/src/stubs/esp32c3.json +4 -4
- package/src/stubs/esp32c5.json +4 -4
- package/src/stubs/esp32c6.json +4 -4
- package/src/stubs/esp32c61.json +4 -4
- package/src/stubs/esp32h2.json +4 -4
- package/src/stubs/esp32h4.json +8 -0
- package/src/stubs/esp32p4.json +4 -4
- package/src/stubs/esp32p4r3.json +4 -4
- package/src/stubs/esp32s2.json +4 -4
- package/src/stubs/esp32s3.json +27 -5
- package/src/stubs/esp32s31.json +8 -0
- package/src/stubs/esp8266.json +5 -5
- package/src/stubs/index.ts +3 -2
- package/sw.js +1 -1
- package/dist/web/esp32-BRKoi17y.js +0 -1
- package/dist/web/esp32c2-Btgr_lwh.js +0 -1
- package/dist/web/esp32c3-CHKfoI8W.js +0 -1
- package/dist/web/esp32c5-BDW4KtLo.js +0 -1
- package/dist/web/esp32c6-il8tTxAG.js +0 -1
- package/dist/web/esp32c61-thKzxBGf.js +0 -1
- package/dist/web/esp32h2-CxoUHv_P.js +0 -1
- package/dist/web/esp32p4-D3jLP-jY.js +0 -1
- package/dist/web/esp32p4r3-CqI71ojR.js +0 -1
- package/dist/web/esp32s2-iX3WoDbg.js +0 -1
- package/dist/web/esp32s3-DGwDVIgz.js +0 -1
- package/dist/web/esp8266-CUwxJpGa.js +0 -1
- package/js/modules/esp32-BRKoi17y.js +0 -1
- package/js/modules/esp32c2-Btgr_lwh.js +0 -1
- package/js/modules/esp32c3-CHKfoI8W.js +0 -1
- package/js/modules/esp32c5-BDW4KtLo.js +0 -1
- package/js/modules/esp32c6-il8tTxAG.js +0 -1
- package/js/modules/esp32c61-thKzxBGf.js +0 -1
- package/js/modules/esp32h2-CxoUHv_P.js +0 -1
- package/js/modules/esp32p4-D3jLP-jY.js +0 -1
- package/js/modules/esp32p4r3-CqI71ojR.js +0 -1
- package/js/modules/esp32s2-iX3WoDbg.js +0 -1
- package/js/modules/esp32s3-DGwDVIgz.js +0 -1
- package/js/modules/esp8266-CUwxJpGa.js +0 -1
package/js/nvs-editor.js
CHANGED
|
@@ -1641,6 +1641,7 @@ export class NVSEditor {
|
|
|
1641
1641
|
<div><strong>Status:</strong> <span class="${status === "OK" ? "nvs-ok" : "nvs-warn"}">${status}</span></div>
|
|
1642
1642
|
<button class="nvs-blob-dump" data-key="${this._esc(id)}" title="Show hex dump">📄 Hex Dump</button>
|
|
1643
1643
|
<button class="nvs-blob-download" data-key="${this._esc(id)}" title="Download blob">⬇️ Download</button>
|
|
1644
|
+
<button class="nvs-blob-upload" data-key="${this._esc(id)}" title="Upload / replace blob from file">⬆️ Upload</button>
|
|
1644
1645
|
</div>`;
|
|
1645
1646
|
}
|
|
1646
1647
|
} else {
|
|
@@ -1735,5 +1736,181 @@ export class NVSEditor {
|
|
|
1735
1736
|
}, 0);
|
|
1736
1737
|
});
|
|
1737
1738
|
});
|
|
1739
|
+
|
|
1740
|
+
// Blob upload buttons — replace blob payload from a local file
|
|
1741
|
+
dialogContainer.querySelectorAll(".nvs-blob-upload").forEach((btn) => {
|
|
1742
|
+
btn.addEventListener("click", () => {
|
|
1743
|
+
const id = btn.dataset.key;
|
|
1744
|
+
const blob = blobs.get(id);
|
|
1745
|
+
if (!blob) return;
|
|
1746
|
+
|
|
1747
|
+
const input = document.createElement("input");
|
|
1748
|
+
input.type = "file";
|
|
1749
|
+
input.style.display = "none";
|
|
1750
|
+
document.body.appendChild(input);
|
|
1751
|
+
|
|
1752
|
+
input.addEventListener("change", async () => {
|
|
1753
|
+
const file = input.files && input.files[0];
|
|
1754
|
+
input.remove();
|
|
1755
|
+
if (!file) return;
|
|
1756
|
+
|
|
1757
|
+
try {
|
|
1758
|
+
const buf = await file.arrayBuffer();
|
|
1759
|
+
const bytes = new Uint8Array(buf);
|
|
1760
|
+
|
|
1761
|
+
if (
|
|
1762
|
+
!confirm(
|
|
1763
|
+
`Replace blob "${blob.namespace}::${blob.key}" ` +
|
|
1764
|
+
`(current ${blob.totalSize} bytes) with ${bytes.length} bytes ` +
|
|
1765
|
+
`from "${file.name}"?`,
|
|
1766
|
+
)
|
|
1767
|
+
)
|
|
1768
|
+
return;
|
|
1769
|
+
|
|
1770
|
+
this._uploadBlobToNVS(blob, bytes);
|
|
1771
|
+
|
|
1772
|
+
// Re-render the dialog to reflect the new blob state
|
|
1773
|
+
dialogContainer.remove();
|
|
1774
|
+
this._showBlobs();
|
|
1775
|
+
} catch (e) {
|
|
1776
|
+
alert("Upload failed: " + (e && e.message ? e.message : e));
|
|
1777
|
+
}
|
|
1778
|
+
});
|
|
1779
|
+
|
|
1780
|
+
input.click();
|
|
1781
|
+
});
|
|
1782
|
+
});
|
|
1783
|
+
}
|
|
1784
|
+
|
|
1785
|
+
/**
|
|
1786
|
+
* Replace the data of an existing blob in the NVS partition with `fileBytes`.
|
|
1787
|
+
* Distributes bytes across the existing data-chunk slots (0x42 entries),
|
|
1788
|
+
* updates each entry's size + data-CRC + header-CRC, and refreshes the
|
|
1789
|
+
* blob_index totalSize (0x48) when present. Will not allocate new chunks
|
|
1790
|
+
* or extend the partition; the new payload must fit in the existing slots.
|
|
1791
|
+
*/
|
|
1792
|
+
_uploadBlobToNVS(blob, fileBytes) {
|
|
1793
|
+
// Refuse 0-byte uploads outright — replacing all chunks with an empty
|
|
1794
|
+
// payload would leave the blob_index as an orphan (totalSize=0,
|
|
1795
|
+
// chunkCount=0) which ESP-IDF NVS does not surface as a valid blob.
|
|
1796
|
+
// Users who want to remove a blob should use the per-entry delete UI.
|
|
1797
|
+
if (fileBytes.length === 0) {
|
|
1798
|
+
throw new Error("Cannot upload an empty file as blob replacement.");
|
|
1799
|
+
}
|
|
1800
|
+
|
|
1801
|
+
// Resolve the parsed data-chunk items (in chunk-index order) so we know
|
|
1802
|
+
// each slot's offset/span and can size-check before mutating anything.
|
|
1803
|
+
const sortedChunks = [...blob.chunks].sort((a, b) => a.index - b.index);
|
|
1804
|
+
if (sortedChunks.length === 0) {
|
|
1805
|
+
throw new Error("No data chunks found for this blob.");
|
|
1806
|
+
}
|
|
1807
|
+
|
|
1808
|
+
const dataEntries = [];
|
|
1809
|
+
for (const chunk of sortedChunks) {
|
|
1810
|
+
// chunk.offset points to the payload; the entry header is the 32 bytes before.
|
|
1811
|
+
const entryOff = chunk.offset - 32;
|
|
1812
|
+
const item = this._findItem(entryOff);
|
|
1813
|
+
if (!item || item.datatype !== 0x42) {
|
|
1814
|
+
throw new Error(
|
|
1815
|
+
`Could not locate data entry at 0x${entryOff.toString(16)}.`,
|
|
1816
|
+
);
|
|
1817
|
+
}
|
|
1818
|
+
// span 1 = inline (no payload extension); capacity is (span-1)*32 bytes.
|
|
1819
|
+
const maxSize = (item.span - 1) * 32;
|
|
1820
|
+
dataEntries.push({ item, maxSize });
|
|
1821
|
+
}
|
|
1822
|
+
|
|
1823
|
+
const totalCapacity = dataEntries.reduce((s, e) => s + e.maxSize, 0);
|
|
1824
|
+
if (fileBytes.length > totalCapacity) {
|
|
1825
|
+
throw new Error(
|
|
1826
|
+
`File too large: ${fileBytes.length} bytes, but only ${totalCapacity} bytes ` +
|
|
1827
|
+
`available across ${dataEntries.length} chunk slot(s). ` +
|
|
1828
|
+
`Adding new chunks is not supported.`,
|
|
1829
|
+
);
|
|
1830
|
+
}
|
|
1831
|
+
|
|
1832
|
+
// Distribute payload across chunks sequentially. Track how many slots
|
|
1833
|
+
// we actually populate so we can erase trailing unused chunks and keep
|
|
1834
|
+
// blob_index.chunkCount in sync with reality.
|
|
1835
|
+
let writeOffset = 0;
|
|
1836
|
+
let populatedChunks = 0;
|
|
1837
|
+
for (const { item, maxSize } of dataEntries) {
|
|
1838
|
+
const off = item.offset;
|
|
1839
|
+
const dataOff = off + 32;
|
|
1840
|
+
const remaining = fileBytes.length - writeOffset;
|
|
1841
|
+
const writeLen = Math.min(remaining, maxSize);
|
|
1842
|
+
|
|
1843
|
+
// Trailing unused chunk: fully erase the slot (payload + header) and
|
|
1844
|
+
// clear its bitmap flag, exactly like _deleteEntry does for a manual
|
|
1845
|
+
// delete. This avoids leaving zero-sized orphan chunks behind.
|
|
1846
|
+
if (writeLen === 0) {
|
|
1847
|
+
this._deleteEntry(item);
|
|
1848
|
+
continue;
|
|
1849
|
+
}
|
|
1850
|
+
|
|
1851
|
+
populatedChunks++;
|
|
1852
|
+
|
|
1853
|
+
// Wipe the old payload area, then write the new segment.
|
|
1854
|
+
this.data.fill(0xff, dataOff, dataOff + maxSize);
|
|
1855
|
+
this.data.set(
|
|
1856
|
+
fileBytes.subarray(writeOffset, writeOffset + writeLen),
|
|
1857
|
+
dataOff,
|
|
1858
|
+
);
|
|
1859
|
+
|
|
1860
|
+
// Update size field at +24 (u16) — the high two bytes are unused (0xFF).
|
|
1861
|
+
this.data[off + 24] = writeLen & 0xff;
|
|
1862
|
+
this.data[off + 25] = (writeLen >> 8) & 0xff;
|
|
1863
|
+
this.data[off + 26] = 0xff;
|
|
1864
|
+
this.data[off + 27] = 0xff;
|
|
1865
|
+
|
|
1866
|
+
// Update data CRC at +28 (u32 little-endian).
|
|
1867
|
+
const segData = this.data.subarray(dataOff, dataOff + writeLen);
|
|
1868
|
+
const dataCrc = NVSEditor.crc32(segData, 0, writeLen);
|
|
1869
|
+
const dv = new DataView(
|
|
1870
|
+
this.data.buffer,
|
|
1871
|
+
this.data.byteOffset + off + 28,
|
|
1872
|
+
4,
|
|
1873
|
+
);
|
|
1874
|
+
dv.setUint32(0, dataCrc >>> 0, true);
|
|
1875
|
+
|
|
1876
|
+
// Recalculate header CRC at +4.
|
|
1877
|
+
const hcrc = NVSEditor.crc32Header(this.data, off);
|
|
1878
|
+
const hdv = new DataView(
|
|
1879
|
+
this.data.buffer,
|
|
1880
|
+
this.data.byteOffset + off + 4,
|
|
1881
|
+
4,
|
|
1882
|
+
);
|
|
1883
|
+
hdv.setUint32(0, hcrc >>> 0, true);
|
|
1884
|
+
|
|
1885
|
+
writeOffset += writeLen;
|
|
1886
|
+
}
|
|
1887
|
+
|
|
1888
|
+
// If a blob_index (0x48) entry exists, sync its totalSize at +24 (u32)
|
|
1889
|
+
// AND chunkCount at +28 (u8) with the number of slots actually populated,
|
|
1890
|
+
// then recalc its header CRC so the index entry and bitmap stay
|
|
1891
|
+
// consistent with the surviving data chunks.
|
|
1892
|
+
if (blob.indexEntry && blob.indexEntry.datatype === 0x48) {
|
|
1893
|
+
const idxOff = blob.indexEntry.offset;
|
|
1894
|
+
const dv = new DataView(
|
|
1895
|
+
this.data.buffer,
|
|
1896
|
+
this.data.byteOffset + idxOff + 24,
|
|
1897
|
+
4,
|
|
1898
|
+
);
|
|
1899
|
+
dv.setUint32(0, fileBytes.length >>> 0, true);
|
|
1900
|
+
// chunkCount is a single byte; chunkStart at +29 and the rest stay intact.
|
|
1901
|
+
this.data[idxOff + 28] = populatedChunks & 0xff;
|
|
1902
|
+
const hcrc = NVSEditor.crc32Header(this.data, idxOff);
|
|
1903
|
+
const hdv = new DataView(
|
|
1904
|
+
this.data.buffer,
|
|
1905
|
+
this.data.byteOffset + idxOff + 4,
|
|
1906
|
+
4,
|
|
1907
|
+
);
|
|
1908
|
+
hdv.setUint32(0, hcrc >>> 0, true);
|
|
1909
|
+
}
|
|
1910
|
+
|
|
1911
|
+
this.modified = true;
|
|
1912
|
+
this.pages = this._parse();
|
|
1913
|
+
this._renderContent();
|
|
1914
|
+
this._updateWriteButton();
|
|
1738
1915
|
}
|
|
1739
1916
|
}
|
package/package.cli.json
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "esp32tool",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.7.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Flash & Read ESP devices using WebSerial, Electron, and also Android mobile via WebUSB",
|
|
6
6
|
"main": "electron/main.cjs",
|
|
@@ -87,6 +87,16 @@
|
|
|
87
87
|
"serialize-javascript": "^7.0.3",
|
|
88
88
|
"@tootallnate/once": "^3.0.1",
|
|
89
89
|
"http-proxy-agent": "^7.0.2",
|
|
90
|
-
"make-fetch-happen": "^13.0.1"
|
|
90
|
+
"make-fetch-happen": "^13.0.1",
|
|
91
|
+
"node-addon-api": "8.3.0",
|
|
92
|
+
"@electron/rebuild": {
|
|
93
|
+
"@electron/node-gyp": "^10.2.0-electron.2"
|
|
94
|
+
}
|
|
95
|
+
},
|
|
96
|
+
"allowScripts": {
|
|
97
|
+
"macos-alias@0.2.12": true,
|
|
98
|
+
"fs-xattr@0.3.1": true,
|
|
99
|
+
"usb@2.18.0": true,
|
|
100
|
+
"electron-winstaller@5.4.4": true
|
|
91
101
|
}
|
|
92
102
|
}
|
package/screenshots/desktop.png
CHANGED
|
Binary file
|
package/screenshots/mobile.png
CHANGED
|
Binary file
|
package/src/const.ts
CHANGED
|
@@ -419,10 +419,10 @@ export const ESP32P4_PMU_0P1A_TARGET0_0 = 0xff << 23;
|
|
|
419
419
|
export const ESP32P4_PMU_0P1A_FORCE_TIEH_SEL_0 = 1 << 7;
|
|
420
420
|
export const ESP32P4_PMU_DATE_REG = ESP32P4_DR_REG_PMU_BASE + 0x3fc;
|
|
421
421
|
|
|
422
|
-
export const ESP32S31_SPI_REG_BASE =
|
|
422
|
+
export const ESP32S31_SPI_REG_BASE = 0x20501000;
|
|
423
423
|
export const ESP32S31_BASEFUSEADDR = 0x20715000;
|
|
424
|
-
export const ESP32S31_EFUSE_BLOCK1_ADDR = ESP32S31_BASEFUSEADDR +
|
|
425
|
-
export const ESP32S31_MACFUSEADDR =
|
|
424
|
+
export const ESP32S31_EFUSE_BLOCK1_ADDR = ESP32S31_BASEFUSEADDR + 0x050;
|
|
425
|
+
export const ESP32S31_MACFUSEADDR = ESP32S31_BASEFUSEADDR + 0x050;
|
|
426
426
|
export const ESP32S31_SPI_USR_OFFS = 0x18;
|
|
427
427
|
export const ESP32S31_SPI_USR1_OFFS = 0x1c;
|
|
428
428
|
export const ESP32S31_SPI_USR2_OFFS = 0x20;
|
|
@@ -431,6 +431,15 @@ export const ESP32S31_SPI_MISO_DLEN_OFFS = 0x28;
|
|
|
431
431
|
export const ESP32S31_SPI_W0_OFFS = 0x58;
|
|
432
432
|
export const ESP32S31_UART_DATE_REG_ADDR = 0x2038a000 + 0x8c;
|
|
433
433
|
export const ESP32S31_BOOTLOADER_FLASH_OFFSET = 0x2000;
|
|
434
|
+
// ESP32-S31 RTC Watchdog Timer registers (LP_WDT)
|
|
435
|
+
export const ESP32S31_DR_REG_LP_WDT_BASE = 0x20801000;
|
|
436
|
+
export const ESP32S31_RTC_CNTL_WDTCONFIG0_REG =
|
|
437
|
+
ESP32S31_DR_REG_LP_WDT_BASE + 0x0000; // LP_WDT_RWDT_CONFIG0_REG
|
|
438
|
+
export const ESP32S31_RTC_CNTL_WDTCONFIG1_REG =
|
|
439
|
+
ESP32S31_DR_REG_LP_WDT_BASE + 0x0004; // LP_WDT_RWDT_CONFIG1_REG
|
|
440
|
+
export const ESP32S31_RTC_CNTL_WDTWPROTECT_REG =
|
|
441
|
+
ESP32S31_DR_REG_LP_WDT_BASE + 0x0018; // LP_WDT_RWDT_WPROTECT_REG
|
|
442
|
+
export const ESP32S31_RTC_CNTL_WDT_WKEY = 0x50d83aa1;
|
|
434
443
|
|
|
435
444
|
export interface SpiFlashAddresses {
|
|
436
445
|
regBase: number;
|
package/src/esp_loader.ts
CHANGED
|
@@ -69,6 +69,10 @@ import {
|
|
|
69
69
|
ESP32H2_EFUSE_BLOCK1_ADDR,
|
|
70
70
|
ESP32P4_EFUSE_BLOCK1_ADDR,
|
|
71
71
|
ESP32S31_EFUSE_BLOCK1_ADDR,
|
|
72
|
+
ESP32S31_RTC_CNTL_WDTWPROTECT_REG,
|
|
73
|
+
ESP32S31_RTC_CNTL_WDTCONFIG0_REG,
|
|
74
|
+
ESP32S31_RTC_CNTL_WDTCONFIG1_REG,
|
|
75
|
+
ESP32S31_RTC_CNTL_WDT_WKEY,
|
|
72
76
|
SlipReadError,
|
|
73
77
|
ESP32S2_RTC_CNTL_WDTWPROTECT_REG,
|
|
74
78
|
ESP32S2_RTC_CNTL_WDTCONFIG0_REG,
|
|
@@ -1640,6 +1644,12 @@ export class ESPLoader extends EventTarget {
|
|
|
1640
1644
|
WDTCONFIG0_REG = ESP32P4_RTC_CNTL_WDTCONFIG0_REG;
|
|
1641
1645
|
WDTCONFIG1_REG = ESP32P4_RTC_CNTL_WDTCONFIG1_REG;
|
|
1642
1646
|
WDT_WKEY = ESP32P4_RTC_CNTL_WDT_WKEY;
|
|
1647
|
+
} else if (this.chipFamily === CHIP_FAMILY_ESP32S31) {
|
|
1648
|
+
// S31 uses LP_WDT (Low Power Watchdog Timer)
|
|
1649
|
+
WDTWPROTECT_REG = ESP32S31_RTC_CNTL_WDTWPROTECT_REG;
|
|
1650
|
+
WDTCONFIG0_REG = ESP32S31_RTC_CNTL_WDTCONFIG0_REG;
|
|
1651
|
+
WDTCONFIG1_REG = ESP32S31_RTC_CNTL_WDTCONFIG1_REG;
|
|
1652
|
+
WDT_WKEY = ESP32S31_RTC_CNTL_WDT_WKEY;
|
|
1643
1653
|
} else {
|
|
1644
1654
|
throw new Error(
|
|
1645
1655
|
`rtcWdtResetChipSpecific() is not supported for ${this.chipFamily}`,
|
|
@@ -1700,12 +1710,13 @@ export class ESPLoader extends EventTarget {
|
|
|
1700
1710
|
|
|
1701
1711
|
// Check if chip supports WDT reset
|
|
1702
1712
|
// WDT reset is not needed for ESP32-C3
|
|
1703
|
-
// WDT reset is supported by: ESP32-S2, ESP32-S3, ESP32-P4
|
|
1713
|
+
// WDT reset is supported by: ESP32-S2, ESP32-S3, ESP32-P4, ESP32-S31
|
|
1704
1714
|
// WDT reset is NOT supported by: ESP32-C5, ESP32-C6, ESP32-C61, ESP32-H2
|
|
1705
1715
|
const supportsWdtReset =
|
|
1706
1716
|
this.chipFamily === CHIP_FAMILY_ESP32S2 ||
|
|
1707
1717
|
this.chipFamily === CHIP_FAMILY_ESP32S3 ||
|
|
1708
|
-
this.chipFamily === CHIP_FAMILY_ESP32P4
|
|
1718
|
+
this.chipFamily === CHIP_FAMILY_ESP32P4 ||
|
|
1719
|
+
this.chipFamily === CHIP_FAMILY_ESP32S31;
|
|
1709
1720
|
|
|
1710
1721
|
if (!supportsWdtReset) {
|
|
1711
1722
|
this.logger.debug(
|
|
@@ -4394,7 +4405,6 @@ export class ESPLoader extends EventTarget {
|
|
|
4394
4405
|
// Retry loop for this chunk
|
|
4395
4406
|
while (!chunkSuccess && retryCount <= MAX_RETRIES) {
|
|
4396
4407
|
let resp = new Uint8Array(0);
|
|
4397
|
-
let lastAckedLength = 0; // Track last acknowledged length
|
|
4398
4408
|
|
|
4399
4409
|
try {
|
|
4400
4410
|
// Only log on first attempt or retries
|
|
@@ -4436,12 +4446,19 @@ export class ESPLoader extends EventTarget {
|
|
|
4436
4446
|
maxInFlight = base * 130; // 63 * 130 = 8190 (close to blockSize * 2)
|
|
4437
4447
|
}
|
|
4438
4448
|
|
|
4449
|
+
// The stub (legacy approach) interprets the 4th READ_FLASH parameter as
|
|
4450
|
+
// max_unacked_packets (a packet count), not bytes. Convert accordingly.
|
|
4451
|
+
const maxUnackedPackets = Math.max(
|
|
4452
|
+
1,
|
|
4453
|
+
Math.ceil(maxInFlight / blockSize),
|
|
4454
|
+
);
|
|
4455
|
+
|
|
4439
4456
|
const pkt = pack(
|
|
4440
4457
|
"<IIII",
|
|
4441
4458
|
currentAddr,
|
|
4442
4459
|
chunkSize,
|
|
4443
4460
|
blockSize,
|
|
4444
|
-
|
|
4461
|
+
maxUnackedPackets,
|
|
4445
4462
|
);
|
|
4446
4463
|
|
|
4447
4464
|
const chunkStartTime = Date.now();
|
|
@@ -4463,11 +4480,12 @@ export class ESPLoader extends EventTarget {
|
|
|
4463
4480
|
`${err.message} at byte 0x${resp.length.toString(16)}`,
|
|
4464
4481
|
);
|
|
4465
4482
|
|
|
4466
|
-
// Send
|
|
4467
|
-
// The stub
|
|
4483
|
+
// Send a 1-byte SLIP frame to abort the stub's read operation.
|
|
4484
|
+
// The stub checks ack_size == 4; a differently-sized frame
|
|
4485
|
+
// causes it to break out of its send loop.
|
|
4486
|
+
// (Empty frames 0xC0 0xC0 are silently ignored by the stub.)
|
|
4468
4487
|
try {
|
|
4469
|
-
|
|
4470
|
-
const abortFrame = [this.SLIP_END, this.SLIP_END]; // Empty SLIP frame
|
|
4488
|
+
const abortFrame = [this.SLIP_END, 0x00, this.SLIP_END];
|
|
4471
4489
|
await this.writeToStream(abortFrame);
|
|
4472
4490
|
this.logger.debug(`Sent abort frame to stub`);
|
|
4473
4491
|
|
|
@@ -4497,25 +4515,24 @@ export class ESPLoader extends EventTarget {
|
|
|
4497
4515
|
newResp.set(packetData, resp.length);
|
|
4498
4516
|
resp = newResp;
|
|
4499
4517
|
|
|
4500
|
-
// Send
|
|
4501
|
-
// The stub
|
|
4502
|
-
//
|
|
4503
|
-
|
|
4504
|
-
|
|
4505
|
-
|
|
4506
|
-
|
|
4507
|
-
if (shouldAck) {
|
|
4508
|
-
const ackData = pack("<I", resp.length);
|
|
4509
|
-
const slipEncodedAck = slipEncode(ackData);
|
|
4510
|
-
await this.writeToStream(slipEncodedAck);
|
|
4511
|
-
|
|
4512
|
-
// Update lastAckedLength to current response length
|
|
4513
|
-
// This ensures next ACK is sent at the right time
|
|
4514
|
-
lastAckedLength = resp.length;
|
|
4515
|
-
}
|
|
4518
|
+
// Send ACK after every packet (mirrors Python esptool behaviour).
|
|
4519
|
+
// The stub (legacy approach) uses ACK count for flow-control; sending
|
|
4520
|
+
// after each packet keeps the pipeline flowing without overwhelming
|
|
4521
|
+
// the USB buffer.
|
|
4522
|
+
const ackData = pack("<I", resp.length);
|
|
4523
|
+
const slipEncodedAck = slipEncode(ackData);
|
|
4524
|
+
await this.writeToStream(slipEncodedAck);
|
|
4516
4525
|
}
|
|
4517
4526
|
}
|
|
4518
4527
|
|
|
4528
|
+
// The stub sends a 16-byte MD5 hash after every chunk.
|
|
4529
|
+
// Read and discard it so it doesn't corrupt the next command response.
|
|
4530
|
+
try {
|
|
4531
|
+
await this.readPacket(FLASH_READ_TIMEOUT);
|
|
4532
|
+
} catch {
|
|
4533
|
+
// Ignore timeout — stub may not have sent MD5 yet if something failed
|
|
4534
|
+
}
|
|
4535
|
+
|
|
4519
4536
|
// Chunk read successfully - append to all data
|
|
4520
4537
|
const newAllData = new Uint8Array(allData.length + resp.length);
|
|
4521
4538
|
newAllData.set(allData);
|
package/src/flash_jedec.ts
CHANGED
|
@@ -12,6 +12,7 @@ export const FLASH_MANUFACTURERS: Record<number, string> = {
|
|
|
12
12
|
0x5e: "Zbit",
|
|
13
13
|
0x37: "AMIC",
|
|
14
14
|
0xe0: "Berg Micro",
|
|
15
|
+
0x46: "XTX Technology",
|
|
15
16
|
};
|
|
16
17
|
|
|
17
18
|
export const FLASH_DEVICES: Record<number, string> = {
|
|
@@ -111,4 +112,8 @@ export const FLASH_DEVICES: Record<number, string> = {
|
|
|
111
112
|
0xef6011: "W25Q10EW (1Mbit)",
|
|
112
113
|
0xef6012: "W25Q20EW (2Mbit)",
|
|
113
114
|
0xef6013: "W25Q40EW (4Mbit)",
|
|
115
|
+
0x464015: "XT25F16B (16Mbit)",
|
|
116
|
+
0x464016: "XT25F32B (32Mbit)",
|
|
117
|
+
0x464017: "XT25F64B (64Mbit)",
|
|
118
|
+
0x464018: "XT25F128B (128Mbit)",
|
|
114
119
|
};
|
package/src/stubs/README.md
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
# Licensing
|
|
2
2
|
|
|
3
|
-
The binaries in JSON format distributed in this directory are released as Free Software under GNU General Public License Version 2 or later.
|
|
3
|
+
The binaries in JSON format distributed in this directory are released as Free Software under GNU General Public License Version 2 or later.
|
|
4
|
+
|
|
5
|
+
The stub payloads are generated from the flasher-stub sources and may be replaced with newer upstream artifacts from https://github.com/Jason2866/esp-flasher-stub/ or the corresponding Espressif upstream project. The legacy esptool stub repository is retained only for historical reference.
|
package/src/stubs/esp32.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
|
-
"entry":
|
|
3
|
-
"text": "
|
|
4
|
-
"text_start":
|
|
5
|
-
"data": "
|
|
6
|
-
"data_start":
|
|
2
|
+
"entry": 1074434260,
|
|
3
|
+
"text": "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",
|
|
4
|
+
"text_start": 1074429952,
|
|
5
|
+
"data": "AMD8P2iHCkBPSEFJAAAAAOWUCkDqlApAVZUKQGCVCkATlgpAopUKQK2UCkBRlgpAzJYKQEWXCkBJmQpA9pYKQEmZCkCqlwpAzpcKQOCXCkBVlQpAPZgKQFOYCkAwhQpALIIKQCCDCkDAggpArIIKQKyECkCshApArIQKQKyECkCshApArIQKQKyECkCshApArIQKQKyECkCshApArIQKQKyECkCshApArIQKQKyECkCshApArIQKQKyECkCshApArIQKQKyECkCshApArIQKQKyECkCshApArIQKQA==",
|
|
6
|
+
"data_start": 1073605996,
|
|
7
7
|
"bss_start": 1073528832
|
|
8
8
|
}
|
package/src/stubs/esp32c2.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
|
-
"entry":
|
|
3
|
-
"text": "
|
|
2
|
+
"entry": 1077415930,
|
|
3
|
+
"text": "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",
|
|
4
4
|
"text_start": 1077411840,
|
|
5
|
-
"data": "
|
|
6
|
-
"data_start":
|
|
5
|
+
"data": "FgY4QDxAyj/IEjhA1BI4QCQTOEA2EzhAMBQ4QK4TOECgEjhAchQ4QPgUOEBQFThAVhI4QAwVOEBWEjhAyhU4QNoVOEDeFThAJBM4QCwWOEBGFjhAwgM4QFQBOEAkAjhArAE4QJwBOEBUAzhAVAM4QFQDOEBUAzhAVAM4QFQDOEBUAzhAVAM4QFQDOEBUAzhAVAM4QFQDOEBUAzhAVAM4QFQDOEBUAzhAVAM4QFQDOEBUAzhAVAM4QFQDOEBUAzhAVAM4QFQDOEBUAzhAVAM4QFQDOEA=",
|
|
6
|
+
"data_start": 1070296428,
|
|
7
7
|
"bss_start": 1070219264
|
|
8
8
|
}
|
package/src/stubs/esp32c3.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
|
-
"entry":
|
|
3
|
-
"text": "
|
|
2
|
+
"entry": 1077415682,
|
|
3
|
+
"text": "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",
|
|
4
4
|
"text_start": 1077411840,
|
|
5
|
-
"data": "
|
|
6
|
-
"data_start":
|
|
5
|
+
"data": "3gY4QDhAyD/uEjhA+BI4QEgTOEBaEzhAVBQ4QNITOEDGEjhAlhQ4QBwVOEB0FThAfBI4QDAVOEB8EjhA7hU4QP4VOEACFjhASBM4QFAWOEBqFjhA7AM4QFABOEAgAjhAqAE4QJgBOEBQAzhAUAM4QFADOEBQAzhAUAM4QFADOEBQAzhAUAM4QFADOEBQAzhAUAM4QFADOEBQAzhAUAM4QFADOEBQAzhAUAM4QFADOEBQAzhAUAM4QFADOEBQAzhAUAM4QFADOEBQAzhAUAM4QFADOEA=",
|
|
6
|
+
"data_start": 1070165352,
|
|
7
7
|
"bss_start": 1070088192
|
|
8
8
|
}
|
package/src/stubs/esp32c5.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
|
-
"entry":
|
|
3
|
-
"text": "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",
|
|
2
|
+
"entry": 1082136122,
|
|
3
|
+
"text": "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",
|
|
4
4
|
"text_start": 1082130432,
|
|
5
|
-
"data": "
|
|
6
|
-
"data_start":
|
|
5
|
+
"data": "8AeAQNwBhEBEG4BAUBuAQKIbgEC2G4BAxhyAQDocgEAcG4BACh2AQJIdgEDqHYBAxhqAQKYdgEDGGoBAZh6AQHYegEB6HoBAohuAQMoegEDmHoBAKgWAQFABgEA4CYBAdAqAQAAAgEDsA4BAUAGAQCACgECoAYBAmAGAQFADgEBQA4BAUAOAQFADgEBQA4BAUAOAQFADgEBQA4BAUAOAQFADgEBQA4BAUAOAQFADgEBQA4BAUAOAQFADgEBQA4BAUAOAQFADgEBQA4BAUAOAQFADgEBQA4BAUAOAQFADgEBQA4BAUAOAQA==",
|
|
6
|
+
"data_start": 1082470156,
|
|
7
7
|
"bss_start": 1082392576
|
|
8
8
|
}
|