tasmota-webserial-esptool 6.0.2 → 6.1.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/.devcontainer/devcontainer.json +13 -13
- package/.github/workflows/build_upload.yml +4 -4
- package/README.md +1 -1
- package/css/dark.css +6 -4
- package/css/light.css +5 -2
- package/dist/const.d.ts +35 -1
- package/dist/const.js +80 -1
- package/dist/esp_loader.js +15 -3
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/dist/stubs/esp32.json +7 -1
- package/dist/stubs/esp32c2.json +7 -0
- package/dist/stubs/esp32c3.json +7 -1
- package/dist/stubs/esp32c6.json +7 -0
- package/dist/stubs/esp32h2.json +7 -0
- package/dist/stubs/esp32s2.json +7 -1
- package/dist/stubs/esp32s3.json +7 -1
- package/dist/stubs/index.js +10 -1
- package/dist/web/esp32-d51f885c.js +1 -0
- package/dist/web/esp32c2-f0222390.js +1 -0
- package/dist/web/esp32c3-9f5fd05b.js +1 -0
- package/dist/web/esp32c6-e911f438.js +1 -0
- package/dist/web/esp32h2-19e099dc.js +1 -0
- package/dist/web/esp32s2-da1a4fa1.js +1 -0
- package/dist/web/esp32s3-d79eec99.js +1 -0
- package/dist/web/index.js +1 -1
- package/js/esptool.js +599 -495
- package/js/modules/esp32-d51f885c.js +1 -0
- package/js/modules/esp32c2-f0222390.js +1 -0
- package/js/modules/esp32c3-9f5fd05b.js +1 -0
- package/js/modules/esp32c6-e911f438.js +1 -0
- package/js/modules/esp32h2-19e099dc.js +1 -0
- package/js/modules/esp32s2-da1a4fa1.js +1 -0
- package/js/modules/esp32s3-d79eec99.js +1 -0
- package/js/modules/esptool.js +1 -1
- package/js/script.js +1 -1
- package/js/utilities.js +132 -98
- package/license.md +0 -1
- package/package.json +2 -2
- package/script/build +5 -0
- package/src/const.ts +84 -1
- package/src/esp_loader.ts +17 -2
- package/src/index.ts +1 -0
- package/src/stubs/esp32.json +7 -1
- package/src/stubs/esp32c2.json +7 -1
- package/src/stubs/esp32c3.json +7 -1
- package/src/stubs/esp32c6.json +7 -0
- package/src/stubs/esp32h2.json +7 -1
- package/src/stubs/esp32s2.json +7 -1
- package/src/stubs/esp32s3.json +7 -1
- package/src/stubs/index.ts +10 -1
- package/stubs/esp32.json +5 -5
- package/stubs/esp32c2.json +7 -1
- package/stubs/esp32c3.json +5 -5
- package/stubs/esp32c6.json +5 -5
- package/stubs/esp32h2.json +7 -1
- package/stubs/esp32s2.json +5 -5
- package/stubs/esp32s3.json +5 -5
- package/stubs/esp8266.json +5 -5
- package/dist/web/esp32-a2dcbc2e.js +0 -1
- package/dist/web/esp32c3-18e9678b.js +0 -1
- package/dist/web/esp32s2-3109ccc6.js +0 -1
- package/dist/web/esp32s3-c1dbd867.js +0 -1
- package/js/modules/esp32-a2dcbc2e.js +0 -1
- package/js/modules/esp32c3-18e9678b.js +0 -1
- package/js/modules/esp32s2-3109ccc6.js +0 -1
- package/js/modules/esp32s3-c1dbd867.js +0 -1
package/js/utilities.js
CHANGED
|
@@ -6,7 +6,7 @@ function toByteArray(str) {
|
|
|
6
6
|
let byteArray = [];
|
|
7
7
|
for (let i = 0; i < str.length; i++) {
|
|
8
8
|
let charcode = str.charCodeAt(i);
|
|
9
|
-
if (charcode <=
|
|
9
|
+
if (charcode <= 0xff) {
|
|
10
10
|
byteArray.push(charcode);
|
|
11
11
|
}
|
|
12
12
|
}
|
|
@@ -17,132 +17,166 @@ function fromByteArray(byteArray) {
|
|
|
17
17
|
return String.fromCharCode.apply(String, byteArray);
|
|
18
18
|
}
|
|
19
19
|
|
|
20
|
-
function crc32(data, value=0) {
|
|
20
|
+
function crc32(data, value = 0) {
|
|
21
21
|
if (data instanceof Array) {
|
|
22
22
|
data = fromByteArray(data);
|
|
23
23
|
}
|
|
24
24
|
let table = [];
|
|
25
|
-
for(let entry, c = 0; c < 256; c++) {
|
|
25
|
+
for (let entry, c = 0; c < 256; c++) {
|
|
26
26
|
entry = c;
|
|
27
|
-
for(let k = 0; k < 8; k++) {
|
|
28
|
-
entry = 1 & entry ? 3988292384^entry >>> 1 : entry >>> 1;
|
|
27
|
+
for (let k = 0; k < 8; k++) {
|
|
28
|
+
entry = 1 & entry ? 3988292384 ^ (entry >>> 1) : entry >>> 1;
|
|
29
29
|
}
|
|
30
30
|
table[c] = entry;
|
|
31
31
|
}
|
|
32
32
|
let n = -1 - value;
|
|
33
|
-
for(let t = 0; t < data.length; t++) {
|
|
34
|
-
n = n >>> 8^table[255 & (n^data.charCodeAt(t))];
|
|
33
|
+
for (let t = 0; t < data.length; t++) {
|
|
34
|
+
n = (n >>> 8) ^ table[255 & (n ^ data.charCodeAt(t))];
|
|
35
35
|
}
|
|
36
36
|
return (-1 ^ n) >>> 0;
|
|
37
37
|
}
|
|
38
38
|
|
|
39
39
|
function zipLongest() {
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
40
|
+
var args = [].slice.call(arguments);
|
|
41
|
+
var longest = args.reduce(function (a, b) {
|
|
42
|
+
return a.length > b.length ? a : b;
|
|
43
|
+
}, []);
|
|
44
44
|
|
|
45
|
-
|
|
46
|
-
|
|
45
|
+
return longest.map(function (_, i) {
|
|
46
|
+
return args.map(function (array) {
|
|
47
|
+
return array[i];
|
|
47
48
|
});
|
|
49
|
+
});
|
|
48
50
|
}
|
|
49
51
|
|
|
50
52
|
class struct {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
53
|
+
static lut = {
|
|
54
|
+
b: {
|
|
55
|
+
u: DataView.prototype.getInt8,
|
|
56
|
+
p: DataView.prototype.setInt8,
|
|
57
|
+
bytes: 1,
|
|
58
|
+
},
|
|
59
|
+
B: {
|
|
60
|
+
u: DataView.prototype.getUint8,
|
|
61
|
+
p: DataView.prototype.setUint8,
|
|
62
|
+
bytes: 1,
|
|
63
|
+
},
|
|
64
|
+
h: {
|
|
65
|
+
u: DataView.prototype.getInt16,
|
|
66
|
+
p: DataView.prototype.setInt16,
|
|
67
|
+
bytes: 2,
|
|
68
|
+
},
|
|
69
|
+
H: {
|
|
70
|
+
u: DataView.prototype.getUint16,
|
|
71
|
+
p: DataView.prototype.setUint16,
|
|
72
|
+
bytes: 2,
|
|
73
|
+
},
|
|
74
|
+
i: {
|
|
75
|
+
u: DataView.prototype.getInt32,
|
|
76
|
+
p: DataView.prototype.setInt32,
|
|
77
|
+
bytes: 4,
|
|
78
|
+
},
|
|
79
|
+
I: {
|
|
80
|
+
u: DataView.prototype.getUint32,
|
|
81
|
+
p: DataView.prototype.setUint32,
|
|
82
|
+
bytes: 4,
|
|
83
|
+
},
|
|
84
|
+
q: {
|
|
85
|
+
u: DataView.prototype.getInt64,
|
|
86
|
+
p: DataView.prototype.setInt64,
|
|
87
|
+
bytes: 8,
|
|
88
|
+
},
|
|
89
|
+
Q: {
|
|
90
|
+
u: DataView.prototype.getUint64,
|
|
91
|
+
p: DataView.prototype.setUint64,
|
|
92
|
+
bytes: 8,
|
|
93
|
+
},
|
|
94
|
+
};
|
|
82
95
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
96
|
+
static pack(...args) {
|
|
97
|
+
let format = args[0];
|
|
98
|
+
let pointer = 0;
|
|
99
|
+
let data = args.slice(1);
|
|
100
|
+
if (format.replace(/[<>]/, "").length != data.length) {
|
|
101
|
+
throw "Pack format to Argument count mismatch";
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
let bytes = [];
|
|
105
|
+
let littleEndian = true;
|
|
106
|
+
for (let i = 0; i < format.length; i++) {
|
|
107
|
+
if (format[i] == "<") {
|
|
108
|
+
littleEndian = true;
|
|
109
|
+
} else if (format[i] == ">") {
|
|
110
|
+
littleEndian = false;
|
|
111
|
+
} else {
|
|
112
|
+
pushBytes(format[i], data[pointer]);
|
|
113
|
+
pointer++;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
95
116
|
|
|
96
|
-
|
|
97
|
-
|
|
117
|
+
function pushBytes(formatChar, value) {
|
|
118
|
+
if (!(formatChar in struct.lut)) {
|
|
119
|
+
throw "Unhandled character '" + formatChar + "' in pack format";
|
|
120
|
+
}
|
|
121
|
+
let dataSize = struct.lut[formatChar].bytes;
|
|
122
|
+
let view = new DataView(new ArrayBuffer(dataSize));
|
|
123
|
+
let dataViewFn = struct.lut[formatChar].p.bind(view);
|
|
124
|
+
dataViewFn(0, value, littleEndian);
|
|
125
|
+
for (let i = 0; i < dataSize; i++) {
|
|
126
|
+
bytes.push(view.getUint8(i));
|
|
127
|
+
}
|
|
128
|
+
}
|
|
98
129
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
let data = [];
|
|
102
|
-
let littleEndian = true;
|
|
130
|
+
return bytes;
|
|
131
|
+
}
|
|
103
132
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
littleEndian = false;
|
|
109
|
-
} else {
|
|
110
|
-
pushData(c);
|
|
111
|
-
}
|
|
112
|
-
}
|
|
133
|
+
static unpack(format, bytes) {
|
|
134
|
+
let pointer = 0;
|
|
135
|
+
let data = [];
|
|
136
|
+
let littleEndian = true;
|
|
113
137
|
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
let dataViewFn = struct.lut[formatChar].u.bind(view);
|
|
124
|
-
data.push(dataViewFn(0, littleEndian));
|
|
125
|
-
pointer += dataSize;
|
|
126
|
-
}
|
|
138
|
+
for (let c of format) {
|
|
139
|
+
if (c == "<") {
|
|
140
|
+
littleEndian = true;
|
|
141
|
+
} else if (c == ">") {
|
|
142
|
+
littleEndian = false;
|
|
143
|
+
} else {
|
|
144
|
+
pushData(c);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
127
147
|
|
|
128
|
-
|
|
129
|
-
|
|
148
|
+
function pushData(formatChar) {
|
|
149
|
+
if (!(formatChar in struct.lut)) {
|
|
150
|
+
throw "Unhandled character '" + formatChar + "' in unpack format";
|
|
151
|
+
}
|
|
152
|
+
let dataSize = struct.lut[formatChar].bytes;
|
|
153
|
+
let view = new DataView(new ArrayBuffer(dataSize));
|
|
154
|
+
for (let i = 0; i < dataSize; i++) {
|
|
155
|
+
view.setUint8(i, bytes[pointer + i] & 0xff);
|
|
156
|
+
}
|
|
157
|
+
let dataViewFn = struct.lut[formatChar].u.bind(view);
|
|
158
|
+
data.push(dataViewFn(0, littleEndian));
|
|
159
|
+
pointer += dataSize;
|
|
160
|
+
}
|
|
130
161
|
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
for (let i = 0; i < format.length; i++) {
|
|
134
|
-
if (format[i] != "<" && format[i] != ">") {
|
|
135
|
-
size += struct.lut[format[i]].bytes;
|
|
136
|
-
}
|
|
137
|
-
}
|
|
162
|
+
return data;
|
|
163
|
+
}
|
|
138
164
|
|
|
139
|
-
|
|
165
|
+
static calcsize(format) {
|
|
166
|
+
let size = 0;
|
|
167
|
+
for (let i = 0; i < format.length; i++) {
|
|
168
|
+
if (format[i] != "<" && format[i] != ">") {
|
|
169
|
+
size += struct.lut[format[i]].bytes;
|
|
170
|
+
}
|
|
140
171
|
}
|
|
172
|
+
|
|
173
|
+
return size;
|
|
174
|
+
}
|
|
141
175
|
}
|
|
142
176
|
|
|
143
177
|
function* makeFileIterator(content) {
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
178
|
+
for (let line of content.split(/\r?\n/)) {
|
|
179
|
+
yield line.trim();
|
|
180
|
+
}
|
|
181
|
+
return "";
|
|
148
182
|
}
|
package/license.md
CHANGED
|
@@ -9,4 +9,3 @@ Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
|
9
9
|
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
10
10
|
|
|
11
11
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
12
|
-
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tasmota-webserial-esptool",
|
|
3
|
-
"version": "6.0
|
|
3
|
+
"version": "6.1.0",
|
|
4
4
|
"description": "Flash ESP devices using WebSerial",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"repository": {
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
"@rollup/plugin-typescript": "^11.1.1",
|
|
24
24
|
"@types/pako": "^2.0.0",
|
|
25
25
|
"@types/w3c-web-serial": "^1.0.3",
|
|
26
|
-
"prettier": "
|
|
26
|
+
"prettier": "2.8.8",
|
|
27
27
|
"rollup": "^3.23.0",
|
|
28
28
|
"serve": "^14.2.0",
|
|
29
29
|
"typescript": "^5.0.4"
|
package/script/build
CHANGED
|
@@ -4,5 +4,10 @@ set -e
|
|
|
4
4
|
cd "$(dirname "$0")/.."
|
|
5
5
|
|
|
6
6
|
rm -rf dist
|
|
7
|
+
rm -rf dist
|
|
8
|
+
rm -rf js/modules
|
|
9
|
+
mkdir js/modules
|
|
7
10
|
NODE_ENV=production npm exec -- tsc
|
|
8
11
|
NODE_ENV=production npm exec -- rollup -c
|
|
12
|
+
cp dist/web/*.js js/modules/
|
|
13
|
+
mv js/modules/index.js js/modules/esptool.js
|
package/src/const.ts
CHANGED
|
@@ -102,6 +102,18 @@ export const ESP32S3_SPI_W0_OFFS = 0x58;
|
|
|
102
102
|
export const ESP32S3_UART_DATE_REG_ADDR = 0x60000080;
|
|
103
103
|
export const ESP32S3_BOOTLOADER_FLASH_OFFSET = 0x0;
|
|
104
104
|
|
|
105
|
+
export const ESP32C2_SPI_REG_BASE = 0x60002000;
|
|
106
|
+
export const ESP32C2_BASEFUSEADDR = 0x60008800;
|
|
107
|
+
export const ESP32C2_MACFUSEADDR = 0x60008800 + 0x044;
|
|
108
|
+
export const ESP32C2_SPI_USR_OFFS = 0x18;
|
|
109
|
+
export const ESP32C2_SPI_USR1_OFFS = 0x1c;
|
|
110
|
+
export const ESP32C2_SPI_USR2_OFFS = 0x20;
|
|
111
|
+
export const ESP32C2_SPI_MOSI_DLEN_OFFS = 0x24;
|
|
112
|
+
export const ESP32C2_SPI_MISO_DLEN_OFFS = 0x28;
|
|
113
|
+
export const ESP32C2_SPI_W0_OFFS = 0x58;
|
|
114
|
+
export const ESP32C2_UART_DATE_REG_ADDR = 0x6000007c;
|
|
115
|
+
export const ESP32C2_BOOTLOADER_FLASH_OFFSET = 0x0;
|
|
116
|
+
|
|
105
117
|
export const ESP32C3_SPI_REG_BASE = 0x60002000;
|
|
106
118
|
export const ESP32C3_BASEFUSEADDR = 0x60008800;
|
|
107
119
|
export const ESP32C3_MACFUSEADDR = 0x60008800 + 0x044;
|
|
@@ -114,6 +126,30 @@ export const ESP32C3_SPI_W0_OFFS = 0x58;
|
|
|
114
126
|
export const ESP32C3_UART_DATE_REG_ADDR = 0x6000007c;
|
|
115
127
|
export const ESP32C3_BOOTLOADER_FLASH_OFFSET = 0x0;
|
|
116
128
|
|
|
129
|
+
export const ESP32C6_SPI_REG_BASE = 0x60003000;
|
|
130
|
+
export const ESP32C6_BASEFUSEADDR = 0x600b0800;
|
|
131
|
+
export const ESP32C6_MACFUSEADDR = 0x600b0800 + 0x044;
|
|
132
|
+
export const ESP32C6_SPI_USR_OFFS = 0x18;
|
|
133
|
+
export const ESP32C6_SPI_USR1_OFFS = 0x1c;
|
|
134
|
+
export const ESP32C6_SPI_USR2_OFFS = 0x20;
|
|
135
|
+
export const ESP32C6_SPI_MOSI_DLEN_OFFS = 0x24;
|
|
136
|
+
export const ESP32C6_SPI_MISO_DLEN_OFFS = 0x28;
|
|
137
|
+
export const ESP32C6_SPI_W0_OFFS = 0x58;
|
|
138
|
+
export const ESP32C6_UART_DATE_REG_ADDR = 0x6000007c;
|
|
139
|
+
export const ESP32C6_BOOTLOADER_FLASH_OFFSET = 0x0;
|
|
140
|
+
|
|
141
|
+
export const ESP32H2_SPI_REG_BASE = 0x60002000;
|
|
142
|
+
export const ESP32H2_BASEFUSEADDR = 0x6001a000;
|
|
143
|
+
export const ESP32H2_MACFUSEADDR = 0x6001a000 + 0x044;
|
|
144
|
+
export const ESP32H2_SPI_USR_OFFS = 0x18;
|
|
145
|
+
export const ESP32H2_SPI_USR1_OFFS = 0x1c;
|
|
146
|
+
export const ESP32H2_SPI_USR2_OFFS = 0x20;
|
|
147
|
+
export const ESP32H2_SPI_MOSI_DLEN_OFFS = 0x24;
|
|
148
|
+
export const ESP32H2_SPI_MISO_DLEN_OFFS = 0x28;
|
|
149
|
+
export const ESP32H2_SPI_W0_OFFS = 0x58;
|
|
150
|
+
export const ESP32H2_UART_DATE_REG_ADDR = 0x6000007c;
|
|
151
|
+
export const ESP32H2_BOOTLOADER_FLASH_OFFSET = 0x0;
|
|
152
|
+
|
|
117
153
|
export interface SpiFlashAddresses {
|
|
118
154
|
regBase: number;
|
|
119
155
|
baseFuse: number;
|
|
@@ -137,6 +173,7 @@ export const CHIP_FAMILY_ESP8266 = 0x8266;
|
|
|
137
173
|
export const CHIP_FAMILY_ESP32 = 0x32;
|
|
138
174
|
export const CHIP_FAMILY_ESP32S2 = 0x3252;
|
|
139
175
|
export const CHIP_FAMILY_ESP32S3 = 0x3253;
|
|
176
|
+
export const CHIP_FAMILY_ESP32C2 = 0x32c2;
|
|
140
177
|
export const CHIP_FAMILY_ESP32C3 = 0x32c3;
|
|
141
178
|
export const CHIP_FAMILY_ESP32C6 = 0x32c6;
|
|
142
179
|
export const CHIP_FAMILY_ESP32H2 = 0x3272;
|
|
@@ -145,6 +182,7 @@ export type ChipFamily =
|
|
|
145
182
|
| typeof CHIP_FAMILY_ESP32
|
|
146
183
|
| typeof CHIP_FAMILY_ESP32S2
|
|
147
184
|
| typeof CHIP_FAMILY_ESP32S3
|
|
185
|
+
| typeof CHIP_FAMILY_ESP32C2
|
|
148
186
|
| typeof CHIP_FAMILY_ESP32C3
|
|
149
187
|
| typeof CHIP_FAMILY_ESP32C6
|
|
150
188
|
| typeof CHIP_FAMILY_ESP32H2;
|
|
@@ -162,10 +200,13 @@ export const CHIP_DETECT_MAGIC_VALUES: ChipInfo = {
|
|
|
162
200
|
0x000007c6: { name: "ESP32-S2", family: CHIP_FAMILY_ESP32S2 },
|
|
163
201
|
0x9: { name: "ESP32-S3", family: CHIP_FAMILY_ESP32S3 },
|
|
164
202
|
0xeb004136: { name: "ESP32-S3(beta2)", family: CHIP_FAMILY_ESP32S3 },
|
|
203
|
+
0x6f51306f: { name: "ESP32-C2", family: CHIP_FAMILY_ESP32C2 },
|
|
204
|
+
0x7c41a06f: { name: "ESP32-C2", family: CHIP_FAMILY_ESP32C2 },
|
|
165
205
|
0x6921506f: { name: "ESP32-C3", family: CHIP_FAMILY_ESP32C3 },
|
|
166
206
|
0x1b31506f: { name: "ESP32-C3", family: CHIP_FAMILY_ESP32C3 },
|
|
167
|
-
|
|
207
|
+
0xd7b73e80: { name: "ESP32-H2", family: CHIP_FAMILY_ESP32H2 },
|
|
168
208
|
0x0da1806f: { name: "ESP32-C6(beta)", family: CHIP_FAMILY_ESP32C6 },
|
|
209
|
+
0x2ce0806f: { name: "ESP32-C6", family: CHIP_FAMILY_ESP32C6 },
|
|
169
210
|
};
|
|
170
211
|
|
|
171
212
|
// Commands supported by ESP8266 ROM bootloader
|
|
@@ -276,6 +317,20 @@ export const getSpiFlashAddresses = (
|
|
|
276
317
|
uartDateReg: ESP8266_UART_DATE_REG_ADDR,
|
|
277
318
|
flashOffs: ESP8266_BOOTLOADER_FLASH_OFFSET,
|
|
278
319
|
};
|
|
320
|
+
case CHIP_FAMILY_ESP32C2:
|
|
321
|
+
return {
|
|
322
|
+
regBase: ESP32C2_SPI_REG_BASE,
|
|
323
|
+
baseFuse: ESP32C2_BASEFUSEADDR,
|
|
324
|
+
macFuse: ESP32C2_MACFUSEADDR,
|
|
325
|
+
usrOffs: ESP32C2_SPI_USR_OFFS,
|
|
326
|
+
usr1Offs: ESP32C2_SPI_USR1_OFFS,
|
|
327
|
+
usr2Offs: ESP32C2_SPI_USR2_OFFS,
|
|
328
|
+
mosiDlenOffs: ESP32C2_SPI_MOSI_DLEN_OFFS,
|
|
329
|
+
misoDlenOffs: ESP32C2_SPI_MISO_DLEN_OFFS,
|
|
330
|
+
w0Offs: ESP32C2_SPI_W0_OFFS,
|
|
331
|
+
uartDateReg: ESP32C2_UART_DATE_REG_ADDR,
|
|
332
|
+
flashOffs: ESP32C2_BOOTLOADER_FLASH_OFFSET,
|
|
333
|
+
};
|
|
279
334
|
case CHIP_FAMILY_ESP32C3:
|
|
280
335
|
return {
|
|
281
336
|
regBase: ESP32C3_SPI_REG_BASE,
|
|
@@ -290,6 +345,34 @@ export const getSpiFlashAddresses = (
|
|
|
290
345
|
uartDateReg: ESP32C3_UART_DATE_REG_ADDR,
|
|
291
346
|
flashOffs: ESP32C3_BOOTLOADER_FLASH_OFFSET,
|
|
292
347
|
};
|
|
348
|
+
case CHIP_FAMILY_ESP32C6:
|
|
349
|
+
return {
|
|
350
|
+
regBase: ESP32C6_SPI_REG_BASE,
|
|
351
|
+
baseFuse: ESP32C6_BASEFUSEADDR,
|
|
352
|
+
macFuse: ESP32C6_MACFUSEADDR,
|
|
353
|
+
usrOffs: ESP32C6_SPI_USR_OFFS,
|
|
354
|
+
usr1Offs: ESP32C6_SPI_USR1_OFFS,
|
|
355
|
+
usr2Offs: ESP32C6_SPI_USR2_OFFS,
|
|
356
|
+
mosiDlenOffs: ESP32C6_SPI_MOSI_DLEN_OFFS,
|
|
357
|
+
misoDlenOffs: ESP32C6_SPI_MISO_DLEN_OFFS,
|
|
358
|
+
w0Offs: ESP32C6_SPI_W0_OFFS,
|
|
359
|
+
uartDateReg: ESP32C6_UART_DATE_REG_ADDR,
|
|
360
|
+
flashOffs: ESP32C6_BOOTLOADER_FLASH_OFFSET,
|
|
361
|
+
};
|
|
362
|
+
case CHIP_FAMILY_ESP32H2:
|
|
363
|
+
return {
|
|
364
|
+
regBase: ESP32H2_SPI_REG_BASE,
|
|
365
|
+
baseFuse: ESP32H2_BASEFUSEADDR,
|
|
366
|
+
macFuse: ESP32H2_MACFUSEADDR,
|
|
367
|
+
usrOffs: ESP32H2_SPI_USR_OFFS,
|
|
368
|
+
usr1Offs: ESP32H2_SPI_USR1_OFFS,
|
|
369
|
+
usr2Offs: ESP32H2_SPI_USR2_OFFS,
|
|
370
|
+
mosiDlenOffs: ESP32H2_SPI_MOSI_DLEN_OFFS,
|
|
371
|
+
misoDlenOffs: ESP32H2_SPI_MISO_DLEN_OFFS,
|
|
372
|
+
w0Offs: ESP32H2_SPI_W0_OFFS,
|
|
373
|
+
uartDateReg: ESP32H2_UART_DATE_REG_ADDR,
|
|
374
|
+
flashOffs: ESP32H2_BOOTLOADER_FLASH_OFFSET,
|
|
375
|
+
};
|
|
293
376
|
default:
|
|
294
377
|
return {
|
|
295
378
|
regBase: -1,
|
package/src/esp_loader.ts
CHANGED
|
@@ -2,7 +2,10 @@ import {
|
|
|
2
2
|
CHIP_FAMILY_ESP32,
|
|
3
3
|
CHIP_FAMILY_ESP32S2,
|
|
4
4
|
CHIP_FAMILY_ESP32S3,
|
|
5
|
+
CHIP_FAMILY_ESP32C2,
|
|
5
6
|
CHIP_FAMILY_ESP32C3,
|
|
7
|
+
CHIP_FAMILY_ESP32C6,
|
|
8
|
+
CHIP_FAMILY_ESP32H2,
|
|
6
9
|
CHIP_FAMILY_ESP8266,
|
|
7
10
|
MAX_TIMEOUT,
|
|
8
11
|
Logger,
|
|
@@ -242,7 +245,10 @@ export class ESPLoader extends EventTarget {
|
|
|
242
245
|
} else if (
|
|
243
246
|
this.chipFamily == CHIP_FAMILY_ESP32S2 ||
|
|
244
247
|
this.chipFamily == CHIP_FAMILY_ESP32S3 ||
|
|
245
|
-
this.chipFamily ==
|
|
248
|
+
this.chipFamily == CHIP_FAMILY_ESP32C2 ||
|
|
249
|
+
this.chipFamily == CHIP_FAMILY_ESP32C3 ||
|
|
250
|
+
this.chipFamily == CHIP_FAMILY_ESP32C6 ||
|
|
251
|
+
this.chipFamily == CHIP_FAMILY_ESP32H2
|
|
246
252
|
) {
|
|
247
253
|
macAddr[0] = (mac1 >> 8) & 0xff;
|
|
248
254
|
macAddr[1] = mac1 & 0xff;
|
|
@@ -295,7 +301,10 @@ export class ESPLoader extends EventTarget {
|
|
|
295
301
|
CHIP_FAMILY_ESP32,
|
|
296
302
|
CHIP_FAMILY_ESP32S2,
|
|
297
303
|
CHIP_FAMILY_ESP32S3,
|
|
304
|
+
CHIP_FAMILY_ESP32C2,
|
|
298
305
|
CHIP_FAMILY_ESP32C3,
|
|
306
|
+
CHIP_FAMILY_ESP32C6,
|
|
307
|
+
CHIP_FAMILY_ESP32H2,
|
|
299
308
|
].includes(this.chipFamily)
|
|
300
309
|
) {
|
|
301
310
|
statusLen = 4;
|
|
@@ -726,7 +735,10 @@ export class ESPLoader extends EventTarget {
|
|
|
726
735
|
CHIP_FAMILY_ESP32,
|
|
727
736
|
CHIP_FAMILY_ESP32S2,
|
|
728
737
|
CHIP_FAMILY_ESP32S3,
|
|
738
|
+
CHIP_FAMILY_ESP32C2,
|
|
729
739
|
CHIP_FAMILY_ESP32C3,
|
|
740
|
+
CHIP_FAMILY_ESP32C6,
|
|
741
|
+
CHIP_FAMILY_ESP32H2,
|
|
730
742
|
].includes(this.chipFamily)
|
|
731
743
|
) {
|
|
732
744
|
await this.checkCommand(ESP_SPI_ATTACH, new Array(8).fill(0));
|
|
@@ -751,7 +763,10 @@ export class ESPLoader extends EventTarget {
|
|
|
751
763
|
this.chipFamily == CHIP_FAMILY_ESP32 ||
|
|
752
764
|
this.chipFamily == CHIP_FAMILY_ESP32S2 ||
|
|
753
765
|
this.chipFamily == CHIP_FAMILY_ESP32S3 ||
|
|
754
|
-
this.chipFamily ==
|
|
766
|
+
this.chipFamily == CHIP_FAMILY_ESP32C2 ||
|
|
767
|
+
this.chipFamily == CHIP_FAMILY_ESP32C3 ||
|
|
768
|
+
this.chipFamily == CHIP_FAMILY_ESP32C6 ||
|
|
769
|
+
this.chipFamily == CHIP_FAMILY_ESP32H2
|
|
755
770
|
) {
|
|
756
771
|
buffer = buffer.concat(pack("<I", encrypted ? 1 : 0));
|
|
757
772
|
}
|
package/src/index.ts
CHANGED
package/src/stubs/esp32.json
CHANGED
|
@@ -1 +1,7 @@
|
|
|
1
|
-
{
|
|
1
|
+
{
|
|
2
|
+
"entry": 1074521560,
|
|
3
|
+
"text": "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",
|
|
4
|
+
"text_start": 1074520064,
|
|
5
|
+
"data": "GOv8P9jnC0Bx6AtA8+wLQO3oC0CP6AtA7egLQEnpC0AG6gtAeOoLQCHqC0CB5wtAo+kLQPjpC0Bn6QtAmuoLQI7pC0Ca6gtAXegLQLPoC0Dt6AtASekLQHfoC0BM6wtAs+wLQKXmC0DX7AtApeYLQKXmC0Cl5gtApeYLQKXmC0Cl5gtApeYLQKXmC0Dz6gtApeYLQM3rC0Cz7AtA",
|
|
6
|
+
"data_start": 1073605544
|
|
7
|
+
}
|
package/src/stubs/esp32c2.json
CHANGED
|
@@ -1 +1,7 @@
|
|
|
1
|
-
{
|
|
1
|
+
{
|
|
2
|
+
"entry": 1077413304,
|
|
3
|
+
"text": "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",
|
|
4
|
+
"text_start": 1077411840,
|
|
5
|
+
"data": "GGvKP+AIOEAsCThAhAk4QCgKOECUCjhAQgo4QKgHOEDkCThAJAo4QJgJOEBYBzhAzAk4QFgHOEC6CDhA/gg4QCwJOECECThAzAg4QBIIOEBCCDhAyAg4QOYMOEAsCThArAs4QJoMOECkBjhAxAw4QKQGOECkBjhApAY4QKQGOECkBjhApAY4QKQGOECkBjhASAs4QKQGOEDICzhAmgw4QA==",
|
|
6
|
+
"data_start": 1070295976
|
|
7
|
+
}
|
package/src/stubs/esp32c3.json
CHANGED
|
@@ -1 +1,7 @@
|
|
|
1
|
-
{
|
|
1
|
+
{
|
|
2
|
+
"entry": 1077413532,
|
|
3
|
+
"text": "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",
|
|
4
|
+
"text_start": 1077411840,
|
|
5
|
+
"data": "IGvIP3YKOEDGCjhAHgs4QMILOEAuDDhA3As4QEIJOEB+CzhAvgs4QDILOEDyCDhAZgs4QPIIOEBQCjhAlgo4QMYKOEAeCzhAYgo4QKYJOEDWCThAXgo4QIAOOEDGCjhARg04QDgOOEAyCDhAYA44QDIIOEAyCDhAMgg4QDIIOEAyCDhAMgg4QDIIOEAyCDhA4gw4QDIIOEBkDThAOA44QA==",
|
|
6
|
+
"data_start": 1070164912
|
|
7
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"entry": 1082132112,
|
|
3
|
+
"text": "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",
|
|
4
|
+
"text_start": 1082130432,
|
|
5
|
+
"data": "HCuEQEIKgECSCoBA6gqAQI4LgED6C4BAqAuAQA4JgEBKC4BAiguAQP4KgEC+CIBAMguAQL4IgEAcCoBAYgqAQJIKgEDqCoBALgqAQHIJgECiCYBAKgqAQEwOgECSCoBAEg2AQAQOgED+B4BALA6AQP4HgED+B4BA/geAQP4HgED+B4BA/geAQP4HgED+B4BArgyAQP4HgEAwDYBABA6AQA==",
|
|
6
|
+
"data_start": 1082469292
|
|
7
|
+
}
|