webserial-flasher 1.0.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/LICENSE +21 -0
- package/README.md +97 -0
- package/dist/autoDetect.d.ts +24 -0
- package/dist/autoDetect.d.ts.map +1 -0
- package/dist/autoDetect.js +66 -0
- package/dist/autoDetect.js.map +1 -0
- package/dist/boards/database.d.ts +17 -0
- package/dist/boards/database.d.ts.map +1 -0
- package/dist/boards/database.js +957 -0
- package/dist/boards/database.js.map +1 -0
- package/dist/core/constants.d.ts +44 -0
- package/dist/core/constants.d.ts.map +1 -0
- package/dist/core/constants.js +56 -0
- package/dist/core/constants.js.map +1 -0
- package/dist/core/errors.d.ts +45 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +92 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/types.d.ts +138 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +3 -0
- package/dist/core/types.js.map +1 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +25 -0
- package/dist/index.js.map +1 -0
- package/dist/protocol/avr109/programmer.d.ts +78 -0
- package/dist/protocol/avr109/programmer.d.ts.map +1 -0
- package/dist/protocol/avr109/programmer.js +324 -0
- package/dist/protocol/avr109/programmer.js.map +1 -0
- package/dist/protocol/hexParser.d.ts +12 -0
- package/dist/protocol/hexParser.d.ts.map +1 -0
- package/dist/protocol/hexParser.js +133 -0
- package/dist/protocol/hexParser.js.map +1 -0
- package/dist/protocol/picoboot/constants.d.ts +65 -0
- package/dist/protocol/picoboot/constants.d.ts.map +1 -0
- package/dist/protocol/picoboot/constants.js +80 -0
- package/dist/protocol/picoboot/constants.js.map +1 -0
- package/dist/protocol/picoboot/programmer.d.ts +73 -0
- package/dist/protocol/picoboot/programmer.d.ts.map +1 -0
- package/dist/protocol/picoboot/programmer.js +278 -0
- package/dist/protocol/picoboot/programmer.js.map +1 -0
- package/dist/protocol/picoboot/uf2.d.ts +51 -0
- package/dist/protocol/picoboot/uf2.d.ts.map +1 -0
- package/dist/protocol/picoboot/uf2.js +119 -0
- package/dist/protocol/picoboot/uf2.js.map +1 -0
- package/dist/protocol/receiveData.d.ts +3 -0
- package/dist/protocol/receiveData.d.ts.map +1 -0
- package/dist/protocol/receiveData.js +72 -0
- package/dist/protocol/receiveData.js.map +1 -0
- package/dist/protocol/sendCommand.d.ts +14 -0
- package/dist/protocol/sendCommand.d.ts.map +1 -0
- package/dist/protocol/sendCommand.js +48 -0
- package/dist/protocol/sendCommand.js.map +1 -0
- package/dist/protocol/stk500v2/constants.d.ts +57 -0
- package/dist/protocol/stk500v2/constants.d.ts.map +1 -0
- package/dist/protocol/stk500v2/constants.js +62 -0
- package/dist/protocol/stk500v2/constants.js.map +1 -0
- package/dist/protocol/stk500v2/frame.d.ts +14 -0
- package/dist/protocol/stk500v2/frame.d.ts.map +1 -0
- package/dist/protocol/stk500v2/frame.js +116 -0
- package/dist/protocol/stk500v2/frame.js.map +1 -0
- package/dist/protocol/stk500v2/programmer.d.ts +92 -0
- package/dist/protocol/stk500v2/programmer.d.ts.map +1 -0
- package/dist/protocol/stk500v2/programmer.js +482 -0
- package/dist/protocol/stk500v2/programmer.js.map +1 -0
- package/dist/protocol/updi/constants.d.ts +107 -0
- package/dist/protocol/updi/constants.d.ts.map +1 -0
- package/dist/protocol/updi/constants.js +130 -0
- package/dist/protocol/updi/constants.js.map +1 -0
- package/dist/protocol/updi/link.d.ts +82 -0
- package/dist/protocol/updi/link.d.ts.map +1 -0
- package/dist/protocol/updi/link.js +241 -0
- package/dist/protocol/updi/link.js.map +1 -0
- package/dist/protocol/updi/programmer.d.ts +89 -0
- package/dist/protocol/updi/programmer.d.ts.map +1 -0
- package/dist/protocol/updi/programmer.js +359 -0
- package/dist/protocol/updi/programmer.js.map +1 -0
- package/dist/stk500.d.ts +101 -0
- package/dist/stk500.d.ts.map +1 -0
- package/dist/stk500.js +426 -0
- package/dist/stk500.js.map +1 -0
- package/dist/transport/IPicobootTransport.d.ts +25 -0
- package/dist/transport/IPicobootTransport.d.ts.map +1 -0
- package/dist/transport/IPicobootTransport.js +10 -0
- package/dist/transport/IPicobootTransport.js.map +1 -0
- package/dist/transport/ITransport.d.ts +33 -0
- package/dist/transport/ITransport.d.ts.map +1 -0
- package/dist/transport/ITransport.js +4 -0
- package/dist/transport/ITransport.js.map +1 -0
- package/dist/transport/NodeSerialTransport.d.ts +35 -0
- package/dist/transport/NodeSerialTransport.d.ts.map +1 -0
- package/dist/transport/NodeSerialTransport.js +102 -0
- package/dist/transport/NodeSerialTransport.js.map +1 -0
- package/dist/transport/NodeUSBTransport.d.ts +24 -0
- package/dist/transport/NodeUSBTransport.d.ts.map +1 -0
- package/dist/transport/NodeUSBTransport.js +146 -0
- package/dist/transport/NodeUSBTransport.js.map +1 -0
- package/dist/transport/WebSerialTransport.d.ts +63 -0
- package/dist/transport/WebSerialTransport.d.ts.map +1 -0
- package/dist/transport/WebSerialTransport.js +159 -0
- package/dist/transport/WebSerialTransport.js.map +1 -0
- package/package.json +79 -0
|
@@ -0,0 +1,957 @@
|
|
|
1
|
+
// Built-in board database — Arduino / AVR board configurations.
|
|
2
|
+
// Includes official Arduino boards, popular clones, and standalone AVR chips.
|
|
3
|
+
//
|
|
4
|
+
// Fields:
|
|
5
|
+
// protocol — which bootloader protocol to use (default: 'stk500v1')
|
|
6
|
+
// signature — 3-byte chip signature (read back to confirm board type)
|
|
7
|
+
// pageSize — flash page size for the bootloader
|
|
8
|
+
// baudRate — bootloader baud rate (CRITICAL: must match exactly)
|
|
9
|
+
// flashSize — total flash in bytes (including bootloader section)
|
|
10
|
+
export const BOARDS = {
|
|
11
|
+
// ══════════════════════════════════════════════════════════════════════════
|
|
12
|
+
// ATmega328P — 32KB flash, 128-byte pages, STK500v1 @ 115200 / 57600
|
|
13
|
+
// ══════════════════════════════════════════════════════════════════════════
|
|
14
|
+
'arduino-uno': {
|
|
15
|
+
name: 'Arduino Uno (ATmega328P)',
|
|
16
|
+
protocol: 'stk500v1',
|
|
17
|
+
baudRate: 115200,
|
|
18
|
+
signature: new Uint8Array([0x1e, 0x95, 0x0f]),
|
|
19
|
+
pageSize: 128,
|
|
20
|
+
timeout: 10000,
|
|
21
|
+
flashSize: 32768,
|
|
22
|
+
eepromSize: 1024,
|
|
23
|
+
resetMethod: 'dtr',
|
|
24
|
+
resetDelayMs: 200,
|
|
25
|
+
deviceCode: 0x86,
|
|
26
|
+
progType: 0,
|
|
27
|
+
parMode: 1,
|
|
28
|
+
polling: 1,
|
|
29
|
+
selfTimed: 1,
|
|
30
|
+
lockBytes: 1,
|
|
31
|
+
fuseBytes: 3,
|
|
32
|
+
flashPollVal1: 0xff,
|
|
33
|
+
flashPollVal2: 0xff,
|
|
34
|
+
eepromPollVal1: 0xff,
|
|
35
|
+
eepromPollVal2: 0xff,
|
|
36
|
+
},
|
|
37
|
+
'arduino-uno-r3': {
|
|
38
|
+
name: 'Arduino Uno R3 (ATmega328P)',
|
|
39
|
+
protocol: 'stk500v1',
|
|
40
|
+
baudRate: 115200,
|
|
41
|
+
signature: new Uint8Array([0x1e, 0x95, 0x0f]),
|
|
42
|
+
pageSize: 128,
|
|
43
|
+
timeout: 10000,
|
|
44
|
+
flashSize: 32768,
|
|
45
|
+
eepromSize: 1024,
|
|
46
|
+
resetMethod: 'dtr',
|
|
47
|
+
resetDelayMs: 200,
|
|
48
|
+
},
|
|
49
|
+
'arduino-nano': {
|
|
50
|
+
name: 'Arduino Nano (ATmega328P, new bootloader)',
|
|
51
|
+
protocol: 'stk500v1',
|
|
52
|
+
baudRate: 115200,
|
|
53
|
+
signature: new Uint8Array([0x1e, 0x95, 0x0f]),
|
|
54
|
+
pageSize: 128,
|
|
55
|
+
timeout: 10000,
|
|
56
|
+
flashSize: 32768,
|
|
57
|
+
eepromSize: 1024,
|
|
58
|
+
resetMethod: 'dtr',
|
|
59
|
+
resetDelayMs: 200,
|
|
60
|
+
},
|
|
61
|
+
'arduino-nano-old': {
|
|
62
|
+
name: 'Arduino Nano (ATmega328P, old bootloader 57600)',
|
|
63
|
+
protocol: 'stk500v1',
|
|
64
|
+
baudRate: 57600, // ← old bootloader uses 57600, NOT 115200
|
|
65
|
+
signature: new Uint8Array([0x1e, 0x95, 0x0f]),
|
|
66
|
+
pageSize: 128,
|
|
67
|
+
timeout: 10000,
|
|
68
|
+
flashSize: 32768,
|
|
69
|
+
eepromSize: 1024,
|
|
70
|
+
resetMethod: 'dtr',
|
|
71
|
+
resetDelayMs: 200,
|
|
72
|
+
},
|
|
73
|
+
'arduino-pro-mini-5v': {
|
|
74
|
+
name: 'Arduino Pro Mini 5V (ATmega328P, 16 MHz)',
|
|
75
|
+
protocol: 'stk500v1',
|
|
76
|
+
baudRate: 115200,
|
|
77
|
+
signature: new Uint8Array([0x1e, 0x95, 0x0f]),
|
|
78
|
+
pageSize: 128,
|
|
79
|
+
timeout: 10000,
|
|
80
|
+
flashSize: 32768,
|
|
81
|
+
eepromSize: 1024,
|
|
82
|
+
resetMethod: 'dtr',
|
|
83
|
+
resetDelayMs: 200,
|
|
84
|
+
},
|
|
85
|
+
'arduino-pro-mini-3v3': {
|
|
86
|
+
name: 'Arduino Pro Mini 3.3V (ATmega328P, 8 MHz)',
|
|
87
|
+
protocol: 'stk500v1',
|
|
88
|
+
baudRate: 57600,
|
|
89
|
+
signature: new Uint8Array([0x1e, 0x95, 0x0f]),
|
|
90
|
+
pageSize: 128,
|
|
91
|
+
timeout: 10000,
|
|
92
|
+
flashSize: 32768,
|
|
93
|
+
eepromSize: 1024,
|
|
94
|
+
resetMethod: 'dtr',
|
|
95
|
+
resetDelayMs: 200,
|
|
96
|
+
},
|
|
97
|
+
'arduino-duemilanove-328': {
|
|
98
|
+
name: 'Arduino Duemilanove (ATmega328P)',
|
|
99
|
+
protocol: 'stk500v1',
|
|
100
|
+
baudRate: 57600,
|
|
101
|
+
signature: new Uint8Array([0x1e, 0x95, 0x0f]),
|
|
102
|
+
pageSize: 128,
|
|
103
|
+
timeout: 10000,
|
|
104
|
+
flashSize: 32768,
|
|
105
|
+
eepromSize: 1024,
|
|
106
|
+
resetMethod: 'dtr',
|
|
107
|
+
resetDelayMs: 200,
|
|
108
|
+
},
|
|
109
|
+
'arduino-lilypad': {
|
|
110
|
+
name: 'Arduino LilyPad (ATmega328P, 8 MHz)',
|
|
111
|
+
protocol: 'stk500v1',
|
|
112
|
+
baudRate: 57600,
|
|
113
|
+
signature: new Uint8Array([0x1e, 0x95, 0x0f]),
|
|
114
|
+
pageSize: 128,
|
|
115
|
+
timeout: 10000,
|
|
116
|
+
flashSize: 32768,
|
|
117
|
+
eepromSize: 1024,
|
|
118
|
+
resetMethod: 'dtr',
|
|
119
|
+
resetDelayMs: 200,
|
|
120
|
+
},
|
|
121
|
+
'sparkfun-redboard': {
|
|
122
|
+
name: 'SparkFun RedBoard (ATmega328P)',
|
|
123
|
+
protocol: 'stk500v1',
|
|
124
|
+
baudRate: 115200,
|
|
125
|
+
signature: new Uint8Array([0x1e, 0x95, 0x0f]),
|
|
126
|
+
pageSize: 128,
|
|
127
|
+
timeout: 10000,
|
|
128
|
+
flashSize: 32768,
|
|
129
|
+
eepromSize: 1024,
|
|
130
|
+
resetMethod: 'dtr',
|
|
131
|
+
resetDelayMs: 200,
|
|
132
|
+
},
|
|
133
|
+
'arduino-uno-mini': {
|
|
134
|
+
name: 'Arduino Uno Mini (ATmega328P)',
|
|
135
|
+
protocol: 'stk500v1',
|
|
136
|
+
baudRate: 115200,
|
|
137
|
+
signature: new Uint8Array([0x1e, 0x95, 0x0f]),
|
|
138
|
+
pageSize: 128,
|
|
139
|
+
timeout: 10000,
|
|
140
|
+
flashSize: 32768,
|
|
141
|
+
eepromSize: 1024,
|
|
142
|
+
resetMethod: 'dtr',
|
|
143
|
+
resetDelayMs: 200,
|
|
144
|
+
},
|
|
145
|
+
'lgt8f328p': {
|
|
146
|
+
name: 'LGT8F328P (Arduino Uno clone)',
|
|
147
|
+
protocol: 'stk500v1',
|
|
148
|
+
baudRate: 57600,
|
|
149
|
+
signature: new Uint8Array([0x1e, 0x95, 0x0f]),
|
|
150
|
+
pageSize: 128,
|
|
151
|
+
timeout: 10000,
|
|
152
|
+
flashSize: 32768,
|
|
153
|
+
eepromSize: 1024,
|
|
154
|
+
resetMethod: 'dtr',
|
|
155
|
+
resetDelayMs: 200,
|
|
156
|
+
},
|
|
157
|
+
'lgt8f328d': {
|
|
158
|
+
name: 'LGT8F328D (clone, 32KB, 57600)',
|
|
159
|
+
protocol: 'stk500v1',
|
|
160
|
+
baudRate: 57600,
|
|
161
|
+
signature: new Uint8Array([0x1e, 0x95, 0x0f]),
|
|
162
|
+
pageSize: 128,
|
|
163
|
+
timeout: 10000,
|
|
164
|
+
flashSize: 32768,
|
|
165
|
+
eepromSize: 1024,
|
|
166
|
+
resetMethod: 'dtr',
|
|
167
|
+
resetDelayMs: 200,
|
|
168
|
+
},
|
|
169
|
+
// ══════════════════════════════════════════════════════════════════════════
|
|
170
|
+
// ATmega168 — 16KB flash, STK500v1 @ 19200
|
|
171
|
+
// ══════════════════════════════════════════════════════════════════════════
|
|
172
|
+
'arduino-duemilanove-168': {
|
|
173
|
+
name: 'Arduino Duemilanove (ATmega168)',
|
|
174
|
+
protocol: 'stk500v1',
|
|
175
|
+
baudRate: 19200,
|
|
176
|
+
signature: new Uint8Array([0x1e, 0x94, 0x06]),
|
|
177
|
+
pageSize: 128,
|
|
178
|
+
timeout: 10000,
|
|
179
|
+
flashSize: 16384,
|
|
180
|
+
eepromSize: 512,
|
|
181
|
+
resetMethod: 'dtr',
|
|
182
|
+
resetDelayMs: 200,
|
|
183
|
+
},
|
|
184
|
+
'arduino-diecimila': {
|
|
185
|
+
name: 'Arduino Diecimila (ATmega168)',
|
|
186
|
+
protocol: 'stk500v1',
|
|
187
|
+
baudRate: 19200,
|
|
188
|
+
signature: new Uint8Array([0x1e, 0x94, 0x06]),
|
|
189
|
+
pageSize: 128,
|
|
190
|
+
timeout: 10000,
|
|
191
|
+
flashSize: 16384,
|
|
192
|
+
eepromSize: 512,
|
|
193
|
+
resetMethod: 'dtr',
|
|
194
|
+
resetDelayMs: 200,
|
|
195
|
+
},
|
|
196
|
+
// ══════════════════════════════════════════════════════════════════════════
|
|
197
|
+
// ATmega8 — 8KB flash, STK500v1 @ 19200
|
|
198
|
+
// ══════════════════════════════════════════════════════════════════════════
|
|
199
|
+
'atmega8': {
|
|
200
|
+
name: 'ATmega8 (standalone)',
|
|
201
|
+
protocol: 'stk500v1',
|
|
202
|
+
baudRate: 19200,
|
|
203
|
+
signature: new Uint8Array([0x1e, 0x93, 0x07]),
|
|
204
|
+
pageSize: 64,
|
|
205
|
+
timeout: 10000,
|
|
206
|
+
flashSize: 8192,
|
|
207
|
+
eepromSize: 512,
|
|
208
|
+
resetMethod: 'dtr',
|
|
209
|
+
resetDelayMs: 200,
|
|
210
|
+
},
|
|
211
|
+
// ══════════════════════════════════════════════════════════════════════════
|
|
212
|
+
// ATmega2560 — 256KB flash, 256-byte pages, STK500v2 @ 115200
|
|
213
|
+
// ══════════════════════════════════════════════════════════════════════════
|
|
214
|
+
'arduino-mega2560': {
|
|
215
|
+
name: 'Arduino Mega 2560 (ATmega2560)',
|
|
216
|
+
protocol: 'stk500v2', // ← wiring bootloader uses STK500v2
|
|
217
|
+
baudRate: 115200,
|
|
218
|
+
signature: new Uint8Array([0x1e, 0x98, 0x01]),
|
|
219
|
+
pageSize: 256,
|
|
220
|
+
timeout: 10000,
|
|
221
|
+
flashSize: 262144,
|
|
222
|
+
eepromSize: 4096,
|
|
223
|
+
eepromPageSize: 8,
|
|
224
|
+
bootAddress: 0x1F800, // word address of 4KB boot section
|
|
225
|
+
upperBootSize: 0x0800, // 2048 words = 4KB
|
|
226
|
+
resetMethod: 'dtr',
|
|
227
|
+
resetDelayMs: 200,
|
|
228
|
+
ispParams: {
|
|
229
|
+
timeout: 200,
|
|
230
|
+
stabDelay: 100,
|
|
231
|
+
cmdexeDelay: 25,
|
|
232
|
+
synchLoops: 32,
|
|
233
|
+
byteDelay: 0,
|
|
234
|
+
pollValue: 0x53,
|
|
235
|
+
pollIndex: 3,
|
|
236
|
+
eraseDelay: 55,
|
|
237
|
+
flashMode: 0xC1,
|
|
238
|
+
flashDelay: 6,
|
|
239
|
+
},
|
|
240
|
+
},
|
|
241
|
+
'arduino-mega1280': {
|
|
242
|
+
name: 'Arduino Mega 1280 (ATmega1280)',
|
|
243
|
+
protocol: 'stk500v2',
|
|
244
|
+
baudRate: 57600,
|
|
245
|
+
signature: new Uint8Array([0x1e, 0x97, 0x03]),
|
|
246
|
+
pageSize: 256,
|
|
247
|
+
timeout: 10000,
|
|
248
|
+
flashSize: 131072,
|
|
249
|
+
eepromSize: 4096,
|
|
250
|
+
eepromPageSize: 8,
|
|
251
|
+
bootAddress: 0xF800,
|
|
252
|
+
upperBootSize: 0x0800,
|
|
253
|
+
resetMethod: 'dtr',
|
|
254
|
+
resetDelayMs: 200,
|
|
255
|
+
ispParams: {
|
|
256
|
+
timeout: 200,
|
|
257
|
+
stabDelay: 100,
|
|
258
|
+
cmdexeDelay: 25,
|
|
259
|
+
synchLoops: 32,
|
|
260
|
+
byteDelay: 0,
|
|
261
|
+
pollValue: 0x53,
|
|
262
|
+
pollIndex: 3,
|
|
263
|
+
eraseDelay: 55,
|
|
264
|
+
flashMode: 0xC1,
|
|
265
|
+
flashDelay: 6,
|
|
266
|
+
},
|
|
267
|
+
},
|
|
268
|
+
'arduino-mega-adk': {
|
|
269
|
+
name: 'Arduino Mega ADK (ATmega2560)',
|
|
270
|
+
protocol: 'stk500v2',
|
|
271
|
+
baudRate: 115200,
|
|
272
|
+
signature: new Uint8Array([0x1e, 0x98, 0x01]),
|
|
273
|
+
pageSize: 256,
|
|
274
|
+
timeout: 10000,
|
|
275
|
+
flashSize: 262144,
|
|
276
|
+
eepromSize: 4096,
|
|
277
|
+
eepromPageSize: 8,
|
|
278
|
+
bootAddress: 0x1F800,
|
|
279
|
+
upperBootSize: 0x0800,
|
|
280
|
+
resetMethod: 'dtr',
|
|
281
|
+
resetDelayMs: 200,
|
|
282
|
+
ispParams: {
|
|
283
|
+
timeout: 200, stabDelay: 100, cmdexeDelay: 25, synchLoops: 32,
|
|
284
|
+
byteDelay: 0, pollValue: 0x53, pollIndex: 3, eraseDelay: 55,
|
|
285
|
+
flashMode: 0xC1, flashDelay: 6,
|
|
286
|
+
},
|
|
287
|
+
},
|
|
288
|
+
// ══════════════════════════════════════════════════════════════════════════
|
|
289
|
+
// ATmega32U4 — 32KB flash, 128-byte pages, AVR109 CDC protocol
|
|
290
|
+
// ══════════════════════════════════════════════════════════════════════════
|
|
291
|
+
'arduino-leonardo': {
|
|
292
|
+
name: 'Arduino Leonardo (ATmega32U4)',
|
|
293
|
+
protocol: 'avr109', // ← Caterina bootloader = AVR109 protocol
|
|
294
|
+
baudRate: 57600,
|
|
295
|
+
signature: new Uint8Array([0x1e, 0x95, 0x87]),
|
|
296
|
+
pageSize: 128,
|
|
297
|
+
timeout: 10000,
|
|
298
|
+
flashSize: 32256, // 32KB - 512B bootloader
|
|
299
|
+
eepromSize: 1024,
|
|
300
|
+
cdc1200BaudReset: true, // open at 1200 baud to trigger bootloader
|
|
301
|
+
cdcResetWaitMs: 3000,
|
|
302
|
+
resetMethod: 'none',
|
|
303
|
+
},
|
|
304
|
+
'arduino-micro': {
|
|
305
|
+
name: 'Arduino Micro (ATmega32U4)',
|
|
306
|
+
protocol: 'avr109',
|
|
307
|
+
baudRate: 57600,
|
|
308
|
+
signature: new Uint8Array([0x1e, 0x95, 0x87]),
|
|
309
|
+
pageSize: 128,
|
|
310
|
+
timeout: 10000,
|
|
311
|
+
flashSize: 32256,
|
|
312
|
+
eepromSize: 1024,
|
|
313
|
+
cdc1200BaudReset: true,
|
|
314
|
+
cdcResetWaitMs: 3000,
|
|
315
|
+
resetMethod: 'none',
|
|
316
|
+
},
|
|
317
|
+
'arduino-lilypad-usb': {
|
|
318
|
+
name: 'Arduino LilyPad USB (ATmega32U4)',
|
|
319
|
+
protocol: 'avr109',
|
|
320
|
+
baudRate: 57600,
|
|
321
|
+
signature: new Uint8Array([0x1e, 0x95, 0x87]),
|
|
322
|
+
pageSize: 128,
|
|
323
|
+
timeout: 10000,
|
|
324
|
+
flashSize: 32256,
|
|
325
|
+
eepromSize: 1024,
|
|
326
|
+
cdc1200BaudReset: true,
|
|
327
|
+
cdcResetWaitMs: 3000,
|
|
328
|
+
resetMethod: 'none',
|
|
329
|
+
},
|
|
330
|
+
'arduino-esplora': {
|
|
331
|
+
name: 'Arduino Esplora (ATmega32U4)',
|
|
332
|
+
protocol: 'avr109',
|
|
333
|
+
baudRate: 57600,
|
|
334
|
+
signature: new Uint8Array([0x1e, 0x95, 0x87]),
|
|
335
|
+
pageSize: 128,
|
|
336
|
+
timeout: 10000,
|
|
337
|
+
flashSize: 32256,
|
|
338
|
+
eepromSize: 1024,
|
|
339
|
+
cdc1200BaudReset: true,
|
|
340
|
+
cdcResetWaitMs: 3000,
|
|
341
|
+
resetMethod: 'none',
|
|
342
|
+
},
|
|
343
|
+
'arduino-yun': {
|
|
344
|
+
name: 'Arduino Yún — AVR side (ATmega32U4)',
|
|
345
|
+
protocol: 'avr109',
|
|
346
|
+
baudRate: 57600,
|
|
347
|
+
signature: new Uint8Array([0x1e, 0x95, 0x87]),
|
|
348
|
+
pageSize: 128,
|
|
349
|
+
timeout: 10000,
|
|
350
|
+
flashSize: 32256,
|
|
351
|
+
eepromSize: 1024,
|
|
352
|
+
cdc1200BaudReset: true,
|
|
353
|
+
cdcResetWaitMs: 3000,
|
|
354
|
+
resetMethod: 'none',
|
|
355
|
+
},
|
|
356
|
+
'sparkfun-pro-micro-5v': {
|
|
357
|
+
name: 'SparkFun Pro Micro 5V / 16 MHz (ATmega32U4)',
|
|
358
|
+
protocol: 'avr109',
|
|
359
|
+
baudRate: 57600,
|
|
360
|
+
signature: new Uint8Array([0x1e, 0x95, 0x87]),
|
|
361
|
+
pageSize: 128,
|
|
362
|
+
timeout: 10000,
|
|
363
|
+
flashSize: 32256,
|
|
364
|
+
eepromSize: 1024,
|
|
365
|
+
cdc1200BaudReset: true,
|
|
366
|
+
cdcResetWaitMs: 3000,
|
|
367
|
+
resetMethod: 'none',
|
|
368
|
+
},
|
|
369
|
+
'sparkfun-pro-micro-3v3': {
|
|
370
|
+
name: 'SparkFun Pro Micro 3.3V / 8 MHz (ATmega32U4)',
|
|
371
|
+
protocol: 'avr109',
|
|
372
|
+
baudRate: 57600,
|
|
373
|
+
signature: new Uint8Array([0x1e, 0x95, 0x87]),
|
|
374
|
+
pageSize: 128,
|
|
375
|
+
timeout: 10000,
|
|
376
|
+
flashSize: 32256,
|
|
377
|
+
eepromSize: 1024,
|
|
378
|
+
cdc1200BaudReset: true,
|
|
379
|
+
cdcResetWaitMs: 3000,
|
|
380
|
+
resetMethod: 'none',
|
|
381
|
+
},
|
|
382
|
+
// ══════════════════════════════════════════════════════════════════════════
|
|
383
|
+
// ATtiny family — small flash, 64-byte pages, STK500v1 @ 19200
|
|
384
|
+
// ══════════════════════════════════════════════════════════════════════════
|
|
385
|
+
'attiny13': {
|
|
386
|
+
name: 'ATtiny13 (1KB flash)',
|
|
387
|
+
protocol: 'stk500v1',
|
|
388
|
+
baudRate: 19200,
|
|
389
|
+
signature: new Uint8Array([0x1e, 0x90, 0x07]),
|
|
390
|
+
pageSize: 32,
|
|
391
|
+
timeout: 10000,
|
|
392
|
+
flashSize: 1024,
|
|
393
|
+
eepromSize: 64,
|
|
394
|
+
resetMethod: 'dtr',
|
|
395
|
+
resetDelayMs: 200,
|
|
396
|
+
},
|
|
397
|
+
'attiny25': {
|
|
398
|
+
name: 'ATtiny25 (2KB flash)',
|
|
399
|
+
protocol: 'stk500v1',
|
|
400
|
+
baudRate: 19200,
|
|
401
|
+
signature: new Uint8Array([0x1e, 0x91, 0x08]),
|
|
402
|
+
pageSize: 32,
|
|
403
|
+
timeout: 10000,
|
|
404
|
+
flashSize: 2048,
|
|
405
|
+
eepromSize: 128,
|
|
406
|
+
resetMethod: 'dtr',
|
|
407
|
+
resetDelayMs: 200,
|
|
408
|
+
},
|
|
409
|
+
'attiny45': {
|
|
410
|
+
name: 'ATtiny45 (4KB flash)',
|
|
411
|
+
protocol: 'stk500v1',
|
|
412
|
+
baudRate: 19200,
|
|
413
|
+
signature: new Uint8Array([0x1e, 0x92, 0x06]),
|
|
414
|
+
pageSize: 64,
|
|
415
|
+
timeout: 10000,
|
|
416
|
+
flashSize: 4096,
|
|
417
|
+
eepromSize: 256,
|
|
418
|
+
resetMethod: 'dtr',
|
|
419
|
+
resetDelayMs: 200,
|
|
420
|
+
},
|
|
421
|
+
'attiny85': {
|
|
422
|
+
name: 'ATtiny85 (8KB flash)',
|
|
423
|
+
protocol: 'stk500v1',
|
|
424
|
+
baudRate: 19200,
|
|
425
|
+
signature: new Uint8Array([0x1e, 0x93, 0x0b]),
|
|
426
|
+
pageSize: 64,
|
|
427
|
+
timeout: 10000,
|
|
428
|
+
flashSize: 8192,
|
|
429
|
+
eepromSize: 512,
|
|
430
|
+
resetMethod: 'dtr',
|
|
431
|
+
resetDelayMs: 200,
|
|
432
|
+
},
|
|
433
|
+
'attiny24': {
|
|
434
|
+
name: 'ATtiny24 (2KB flash)',
|
|
435
|
+
protocol: 'stk500v1',
|
|
436
|
+
baudRate: 19200,
|
|
437
|
+
signature: new Uint8Array([0x1e, 0x91, 0x0b]),
|
|
438
|
+
pageSize: 32,
|
|
439
|
+
timeout: 10000,
|
|
440
|
+
flashSize: 2048,
|
|
441
|
+
eepromSize: 128,
|
|
442
|
+
resetMethod: 'dtr',
|
|
443
|
+
resetDelayMs: 200,
|
|
444
|
+
},
|
|
445
|
+
'attiny44': {
|
|
446
|
+
name: 'ATtiny44 (4KB flash)',
|
|
447
|
+
protocol: 'stk500v1',
|
|
448
|
+
baudRate: 19200,
|
|
449
|
+
signature: new Uint8Array([0x1e, 0x92, 0x07]),
|
|
450
|
+
pageSize: 64,
|
|
451
|
+
timeout: 10000,
|
|
452
|
+
flashSize: 4096,
|
|
453
|
+
eepromSize: 256,
|
|
454
|
+
resetMethod: 'dtr',
|
|
455
|
+
resetDelayMs: 200,
|
|
456
|
+
},
|
|
457
|
+
'attiny84': {
|
|
458
|
+
name: 'ATtiny84 (8KB flash)',
|
|
459
|
+
protocol: 'stk500v1',
|
|
460
|
+
baudRate: 19200,
|
|
461
|
+
signature: new Uint8Array([0x1e, 0x93, 0x0c]),
|
|
462
|
+
pageSize: 64,
|
|
463
|
+
timeout: 10000,
|
|
464
|
+
flashSize: 8192,
|
|
465
|
+
eepromSize: 512,
|
|
466
|
+
resetMethod: 'dtr',
|
|
467
|
+
resetDelayMs: 200,
|
|
468
|
+
},
|
|
469
|
+
'attiny2313': {
|
|
470
|
+
name: 'ATtiny2313 (2KB flash)',
|
|
471
|
+
protocol: 'stk500v1',
|
|
472
|
+
baudRate: 19200,
|
|
473
|
+
signature: new Uint8Array([0x1e, 0x91, 0x0a]),
|
|
474
|
+
pageSize: 32,
|
|
475
|
+
timeout: 10000,
|
|
476
|
+
flashSize: 2048,
|
|
477
|
+
eepromSize: 128,
|
|
478
|
+
resetMethod: 'dtr',
|
|
479
|
+
resetDelayMs: 200,
|
|
480
|
+
},
|
|
481
|
+
'attiny4313': {
|
|
482
|
+
name: 'ATtiny4313 (4KB flash)',
|
|
483
|
+
protocol: 'stk500v1',
|
|
484
|
+
baudRate: 19200,
|
|
485
|
+
signature: new Uint8Array([0x1e, 0x92, 0x0d]),
|
|
486
|
+
pageSize: 64,
|
|
487
|
+
timeout: 10000,
|
|
488
|
+
flashSize: 4096,
|
|
489
|
+
eepromSize: 256,
|
|
490
|
+
resetMethod: 'dtr',
|
|
491
|
+
resetDelayMs: 200,
|
|
492
|
+
},
|
|
493
|
+
// ══════════════════════════════════════════════════════════════════════════
|
|
494
|
+
// ATmega4809 — 48KB flash, 128-byte pages, megaAVR bootloader (STK500v1 via JTAG2UPDI bridge)
|
|
495
|
+
// ══════════════════════════════════════════════════════════════════════════
|
|
496
|
+
'avr4809': {
|
|
497
|
+
name: 'ATmega4809 (standalone, JTAG2UPDI bridge)',
|
|
498
|
+
protocol: 'stk500v1',
|
|
499
|
+
baudRate: 19200,
|
|
500
|
+
signature: new Uint8Array([0x1e, 0x96, 0x51]),
|
|
501
|
+
pageSize: 128,
|
|
502
|
+
timeout: 10000,
|
|
503
|
+
flashSize: 49152,
|
|
504
|
+
eepromSize: 256,
|
|
505
|
+
use8BitAddresses: true,
|
|
506
|
+
resetMethod: 'dtr',
|
|
507
|
+
resetDelayMs: 200,
|
|
508
|
+
},
|
|
509
|
+
'arduino-nano-every': {
|
|
510
|
+
name: 'Arduino Nano Every (ATmega4809, JTAG2UPDI bridge)',
|
|
511
|
+
protocol: 'stk500v1',
|
|
512
|
+
baudRate: 19200,
|
|
513
|
+
signature: new Uint8Array([0x1e, 0x96, 0x51]),
|
|
514
|
+
pageSize: 128,
|
|
515
|
+
timeout: 10000,
|
|
516
|
+
flashSize: 49152,
|
|
517
|
+
eepromSize: 256,
|
|
518
|
+
use8BitAddresses: true,
|
|
519
|
+
resetMethod: 'dtr',
|
|
520
|
+
resetDelayMs: 200,
|
|
521
|
+
},
|
|
522
|
+
// ══════════════════════════════════════════════════════════════════════════
|
|
523
|
+
// ATmega1284P — 128KB flash, popular homebuilt / Sanguino / MightyCore
|
|
524
|
+
// ══════════════════════════════════════════════════════════════════════════
|
|
525
|
+
'atmega1284p': {
|
|
526
|
+
name: 'ATmega1284P (standalone / Sanguino)',
|
|
527
|
+
protocol: 'stk500v1',
|
|
528
|
+
baudRate: 115200,
|
|
529
|
+
signature: new Uint8Array([0x1e, 0x97, 0x05]),
|
|
530
|
+
pageSize: 256,
|
|
531
|
+
timeout: 10000,
|
|
532
|
+
flashSize: 131072,
|
|
533
|
+
eepromSize: 4096,
|
|
534
|
+
resetMethod: 'dtr',
|
|
535
|
+
resetDelayMs: 200,
|
|
536
|
+
},
|
|
537
|
+
'atmega1284p-57600': {
|
|
538
|
+
name: 'ATmega1284P (57600 baud bootloader)',
|
|
539
|
+
protocol: 'stk500v1',
|
|
540
|
+
baudRate: 57600,
|
|
541
|
+
signature: new Uint8Array([0x1e, 0x97, 0x05]),
|
|
542
|
+
pageSize: 256,
|
|
543
|
+
timeout: 10000,
|
|
544
|
+
flashSize: 131072,
|
|
545
|
+
eepromSize: 4096,
|
|
546
|
+
resetMethod: 'dtr',
|
|
547
|
+
resetDelayMs: 200,
|
|
548
|
+
},
|
|
549
|
+
// ══════════════════════════════════════════════════════════════════════════
|
|
550
|
+
// ATmega328PB — pin-compatible enhanced variant of 328P
|
|
551
|
+
// ══════════════════════════════════════════════════════════════════════════
|
|
552
|
+
'atmega328pb': {
|
|
553
|
+
name: 'ATmega328PB (enhanced 328P variant)',
|
|
554
|
+
protocol: 'stk500v1',
|
|
555
|
+
baudRate: 115200,
|
|
556
|
+
signature: new Uint8Array([0x1e, 0x95, 0x16]),
|
|
557
|
+
pageSize: 128,
|
|
558
|
+
timeout: 10000,
|
|
559
|
+
flashSize: 32768,
|
|
560
|
+
eepromSize: 1024,
|
|
561
|
+
resetMethod: 'dtr',
|
|
562
|
+
resetDelayMs: 200,
|
|
563
|
+
},
|
|
564
|
+
// ══════════════════════════════════════════════════════════════════════════
|
|
565
|
+
// ATmega32 / ATmega16 — older classic AVRs
|
|
566
|
+
// ══════════════════════════════════════════════════════════════════════════
|
|
567
|
+
'atmega32': {
|
|
568
|
+
name: 'ATmega32 (32KB flash)',
|
|
569
|
+
protocol: 'stk500v1',
|
|
570
|
+
baudRate: 19200,
|
|
571
|
+
signature: new Uint8Array([0x1e, 0x95, 0x02]),
|
|
572
|
+
pageSize: 128,
|
|
573
|
+
timeout: 10000,
|
|
574
|
+
flashSize: 32768,
|
|
575
|
+
eepromSize: 1024,
|
|
576
|
+
resetMethod: 'dtr',
|
|
577
|
+
resetDelayMs: 200,
|
|
578
|
+
},
|
|
579
|
+
'atmega16': {
|
|
580
|
+
name: 'ATmega16 (16KB flash)',
|
|
581
|
+
protocol: 'stk500v1',
|
|
582
|
+
baudRate: 19200,
|
|
583
|
+
signature: new Uint8Array([0x1e, 0x94, 0x03]),
|
|
584
|
+
pageSize: 128,
|
|
585
|
+
timeout: 10000,
|
|
586
|
+
flashSize: 16384,
|
|
587
|
+
eepromSize: 512,
|
|
588
|
+
resetMethod: 'dtr',
|
|
589
|
+
resetDelayMs: 200,
|
|
590
|
+
},
|
|
591
|
+
'atmega644p': {
|
|
592
|
+
name: 'ATmega644P (64KB flash, Sanguino)',
|
|
593
|
+
protocol: 'stk500v1',
|
|
594
|
+
baudRate: 57600,
|
|
595
|
+
signature: new Uint8Array([0x1e, 0x96, 0x0a]),
|
|
596
|
+
pageSize: 256,
|
|
597
|
+
timeout: 10000,
|
|
598
|
+
flashSize: 65536,
|
|
599
|
+
eepromSize: 2048,
|
|
600
|
+
resetMethod: 'dtr',
|
|
601
|
+
resetDelayMs: 200,
|
|
602
|
+
},
|
|
603
|
+
// ══════════════════════════════════════════════════════════════════════════
|
|
604
|
+
// Official Arduino variants (additional boards)
|
|
605
|
+
// ══════════════════════════════════════════════════════════════════════════
|
|
606
|
+
'arduino-fio': {
|
|
607
|
+
name: 'Arduino Fio (ATmega328P, 8 MHz, 57600)',
|
|
608
|
+
protocol: 'stk500v1',
|
|
609
|
+
baudRate: 57600,
|
|
610
|
+
signature: new Uint8Array([0x1e, 0x95, 0x0f]),
|
|
611
|
+
pageSize: 128,
|
|
612
|
+
timeout: 10000,
|
|
613
|
+
flashSize: 32768,
|
|
614
|
+
eepromSize: 1024,
|
|
615
|
+
resetMethod: 'dtr',
|
|
616
|
+
resetDelayMs: 200,
|
|
617
|
+
},
|
|
618
|
+
'arduino-ethernet': {
|
|
619
|
+
name: 'Arduino Ethernet (ATmega328P)',
|
|
620
|
+
protocol: 'stk500v1',
|
|
621
|
+
baudRate: 115200,
|
|
622
|
+
signature: new Uint8Array([0x1e, 0x95, 0x0f]),
|
|
623
|
+
pageSize: 128,
|
|
624
|
+
timeout: 10000,
|
|
625
|
+
flashSize: 32768,
|
|
626
|
+
eepromSize: 1024,
|
|
627
|
+
resetMethod: 'dtr',
|
|
628
|
+
resetDelayMs: 200,
|
|
629
|
+
},
|
|
630
|
+
'adafruit-metro-328': {
|
|
631
|
+
name: 'Adafruit Metro 328 (ATmega328P)',
|
|
632
|
+
protocol: 'stk500v1',
|
|
633
|
+
baudRate: 115200,
|
|
634
|
+
signature: new Uint8Array([0x1e, 0x95, 0x0f]),
|
|
635
|
+
pageSize: 128,
|
|
636
|
+
timeout: 10000,
|
|
637
|
+
flashSize: 32768,
|
|
638
|
+
eepromSize: 1024,
|
|
639
|
+
resetMethod: 'dtr',
|
|
640
|
+
resetDelayMs: 200,
|
|
641
|
+
},
|
|
642
|
+
'adafruit-flora': {
|
|
643
|
+
name: 'Adafruit Flora (ATmega32U4)',
|
|
644
|
+
protocol: 'avr109',
|
|
645
|
+
baudRate: 57600,
|
|
646
|
+
signature: new Uint8Array([0x1e, 0x95, 0x87]),
|
|
647
|
+
pageSize: 128,
|
|
648
|
+
timeout: 10000,
|
|
649
|
+
flashSize: 28672,
|
|
650
|
+
eepromSize: 1024,
|
|
651
|
+
cdc1200BaudReset: true,
|
|
652
|
+
cdcResetWaitMs: 3000,
|
|
653
|
+
resetMethod: 'none',
|
|
654
|
+
},
|
|
655
|
+
'adafruit-feather-32u4': {
|
|
656
|
+
name: 'Adafruit Feather 32u4 (ATmega32U4)',
|
|
657
|
+
protocol: 'avr109',
|
|
658
|
+
baudRate: 57600,
|
|
659
|
+
signature: new Uint8Array([0x1e, 0x95, 0x87]),
|
|
660
|
+
pageSize: 128,
|
|
661
|
+
timeout: 10000,
|
|
662
|
+
flashSize: 28672,
|
|
663
|
+
eepromSize: 1024,
|
|
664
|
+
cdc1200BaudReset: true,
|
|
665
|
+
cdcResetWaitMs: 3000,
|
|
666
|
+
resetMethod: 'none',
|
|
667
|
+
},
|
|
668
|
+
// ══════════════════════════════════════════════════════════════════════════
|
|
669
|
+
// ATtiny UPDI series (tinyAVR 0/1/2 — direct UPDI programming)
|
|
670
|
+
// ══════════════════════════════════════════════════════════════════════════
|
|
671
|
+
'attiny412': {
|
|
672
|
+
name: 'ATtiny412 (4KB flash, UPDI)',
|
|
673
|
+
protocol: 'updi',
|
|
674
|
+
baudRate: 115200,
|
|
675
|
+
signature: new Uint8Array([0x1e, 0x91, 0x23]),
|
|
676
|
+
pageSize: 64,
|
|
677
|
+
timeout: 10000,
|
|
678
|
+
flashSize: 4096,
|
|
679
|
+
eepromSize: 128,
|
|
680
|
+
flashBase: 0x8000,
|
|
681
|
+
resetMethod: 'none',
|
|
682
|
+
},
|
|
683
|
+
'attiny416': {
|
|
684
|
+
name: 'ATtiny416 (4KB flash, UPDI)',
|
|
685
|
+
protocol: 'updi',
|
|
686
|
+
baudRate: 115200,
|
|
687
|
+
signature: new Uint8Array([0x1e, 0x92, 0x21]),
|
|
688
|
+
pageSize: 64,
|
|
689
|
+
timeout: 10000,
|
|
690
|
+
flashSize: 4096,
|
|
691
|
+
eepromSize: 128,
|
|
692
|
+
flashBase: 0x8000,
|
|
693
|
+
resetMethod: 'none',
|
|
694
|
+
},
|
|
695
|
+
'attiny816': {
|
|
696
|
+
name: 'ATtiny816 (8KB flash, UPDI)',
|
|
697
|
+
protocol: 'updi',
|
|
698
|
+
baudRate: 115200,
|
|
699
|
+
signature: new Uint8Array([0x1e, 0x93, 0x22]),
|
|
700
|
+
pageSize: 64,
|
|
701
|
+
timeout: 10000,
|
|
702
|
+
flashSize: 8192,
|
|
703
|
+
eepromSize: 128,
|
|
704
|
+
flashBase: 0x8000,
|
|
705
|
+
resetMethod: 'none',
|
|
706
|
+
},
|
|
707
|
+
'attiny1614': {
|
|
708
|
+
name: 'ATtiny1614 (16KB flash, UPDI)',
|
|
709
|
+
protocol: 'updi',
|
|
710
|
+
baudRate: 115200,
|
|
711
|
+
signature: new Uint8Array([0x1e, 0x94, 0x22]),
|
|
712
|
+
pageSize: 64,
|
|
713
|
+
timeout: 10000,
|
|
714
|
+
flashSize: 16384,
|
|
715
|
+
eepromSize: 256,
|
|
716
|
+
flashBase: 0x8000,
|
|
717
|
+
resetMethod: 'none',
|
|
718
|
+
},
|
|
719
|
+
'attiny1616': {
|
|
720
|
+
name: 'ATtiny1616 (16KB flash, UPDI)',
|
|
721
|
+
protocol: 'updi',
|
|
722
|
+
baudRate: 115200,
|
|
723
|
+
signature: new Uint8Array([0x1e, 0x94, 0x21]),
|
|
724
|
+
pageSize: 64,
|
|
725
|
+
timeout: 10000,
|
|
726
|
+
flashSize: 16384,
|
|
727
|
+
eepromSize: 256,
|
|
728
|
+
flashBase: 0x8000,
|
|
729
|
+
resetMethod: 'none',
|
|
730
|
+
},
|
|
731
|
+
'attiny3216': {
|
|
732
|
+
name: 'ATtiny3216 (32KB flash, UPDI)',
|
|
733
|
+
protocol: 'updi',
|
|
734
|
+
baudRate: 115200,
|
|
735
|
+
signature: new Uint8Array([0x1e, 0x95, 0x21]),
|
|
736
|
+
pageSize: 128,
|
|
737
|
+
timeout: 10000,
|
|
738
|
+
flashSize: 32768,
|
|
739
|
+
eepromSize: 256,
|
|
740
|
+
flashBase: 0x8000,
|
|
741
|
+
resetMethod: 'none',
|
|
742
|
+
},
|
|
743
|
+
'attiny3217': {
|
|
744
|
+
name: 'ATtiny3217 (32KB flash, UPDI)',
|
|
745
|
+
protocol: 'updi',
|
|
746
|
+
baudRate: 115200,
|
|
747
|
+
signature: new Uint8Array([0x1e, 0x95, 0x22]),
|
|
748
|
+
pageSize: 128,
|
|
749
|
+
timeout: 10000,
|
|
750
|
+
flashSize: 32768,
|
|
751
|
+
eepromSize: 256,
|
|
752
|
+
flashBase: 0x8000,
|
|
753
|
+
resetMethod: 'none',
|
|
754
|
+
},
|
|
755
|
+
// ══════════════════════════════════════════════════════════════════════════
|
|
756
|
+
// ATmega4809 — UPDI direct (no JTAG2UPDI bridge)
|
|
757
|
+
// ══════════════════════════════════════════════════════════════════════════
|
|
758
|
+
'atmega4809-updi': {
|
|
759
|
+
name: 'ATmega4809 (direct UPDI programming)',
|
|
760
|
+
protocol: 'updi',
|
|
761
|
+
baudRate: 115200,
|
|
762
|
+
signature: new Uint8Array([0x1e, 0x96, 0x51]),
|
|
763
|
+
pageSize: 128,
|
|
764
|
+
timeout: 10000,
|
|
765
|
+
flashSize: 49152,
|
|
766
|
+
eepromSize: 256,
|
|
767
|
+
flashBase: 0x4000, // megaAVR 0-series: flash at 0x4000
|
|
768
|
+
resetMethod: 'none',
|
|
769
|
+
},
|
|
770
|
+
'atmega4808-updi': {
|
|
771
|
+
name: 'ATmega4808 (direct UPDI programming)',
|
|
772
|
+
protocol: 'updi',
|
|
773
|
+
baudRate: 115200,
|
|
774
|
+
signature: new Uint8Array([0x1e, 0x96, 0x50]),
|
|
775
|
+
pageSize: 128,
|
|
776
|
+
timeout: 10000,
|
|
777
|
+
flashSize: 49152,
|
|
778
|
+
eepromSize: 256,
|
|
779
|
+
flashBase: 0x4000,
|
|
780
|
+
resetMethod: 'none',
|
|
781
|
+
},
|
|
782
|
+
// ══════════════════════════════════════════════════════════════════════════
|
|
783
|
+
// Raspberry Pi Pico / Pico 2 — PICOBOOT USB protocol
|
|
784
|
+
//
|
|
785
|
+
// These boards use the PICOBOOT binary USB protocol when held in BOOTSEL
|
|
786
|
+
// mode (hold BOOTSEL button while plugging USB).
|
|
787
|
+
//
|
|
788
|
+
// Note: baudRate, signature, pageSize are not used by the PICOBOOT
|
|
789
|
+
// programmer — they are set to neutral values for type compatibility.
|
|
790
|
+
// Use vid/pid for device detection and flashSize for firmware validation.
|
|
791
|
+
// ══════════════════════════════════════════════════════════════════════════
|
|
792
|
+
'raspberry-pi-pico': {
|
|
793
|
+
name: 'Raspberry Pi Pico (RP2040)',
|
|
794
|
+
protocol: 'picoboot',
|
|
795
|
+
baudRate: 0,
|
|
796
|
+
signature: new Uint8Array([0x2E, 0x8A, 0x03]), // VID/PID hint
|
|
797
|
+
pageSize: 256, // PICOBOOT flash page size
|
|
798
|
+
timeout: 15000,
|
|
799
|
+
flashSize: 2 * 1024 * 1024, // 2 MB (W25Q16JV)
|
|
800
|
+
vid: 0x2E8A,
|
|
801
|
+
pid: 0x0003,
|
|
802
|
+
resetMethod: 'none',
|
|
803
|
+
},
|
|
804
|
+
'raspberry-pi-pico-w': {
|
|
805
|
+
name: 'Raspberry Pi Pico W (RP2040 + CYW43439)',
|
|
806
|
+
protocol: 'picoboot',
|
|
807
|
+
baudRate: 0,
|
|
808
|
+
signature: new Uint8Array([0x2E, 0x8A, 0x03]),
|
|
809
|
+
pageSize: 256,
|
|
810
|
+
timeout: 15000,
|
|
811
|
+
flashSize: 2 * 1024 * 1024, // 2 MB
|
|
812
|
+
vid: 0x2E8A,
|
|
813
|
+
pid: 0x0003,
|
|
814
|
+
resetMethod: 'none',
|
|
815
|
+
},
|
|
816
|
+
'raspberry-pi-pico-2': {
|
|
817
|
+
name: 'Raspberry Pi Pico 2 (RP2350)',
|
|
818
|
+
protocol: 'picoboot',
|
|
819
|
+
baudRate: 0,
|
|
820
|
+
signature: new Uint8Array([0x2E, 0x8A, 0x0F]), // PID 0x000F hint
|
|
821
|
+
pageSize: 256,
|
|
822
|
+
timeout: 15000,
|
|
823
|
+
flashSize: 4 * 1024 * 1024, // 4 MB (W25Q32JV)
|
|
824
|
+
vid: 0x2E8A,
|
|
825
|
+
pid: 0x000F,
|
|
826
|
+
resetMethod: 'none',
|
|
827
|
+
},
|
|
828
|
+
'adafruit-feather-rp2040': {
|
|
829
|
+
name: 'Adafruit Feather RP2040',
|
|
830
|
+
protocol: 'picoboot',
|
|
831
|
+
baudRate: 0,
|
|
832
|
+
signature: new Uint8Array([0x2E, 0x8A, 0x03]),
|
|
833
|
+
pageSize: 256,
|
|
834
|
+
timeout: 15000,
|
|
835
|
+
flashSize: 8 * 1024 * 1024, // 8 MB (W25Q64JV)
|
|
836
|
+
vid: 0x2E8A,
|
|
837
|
+
pid: 0x0003,
|
|
838
|
+
resetMethod: 'none',
|
|
839
|
+
},
|
|
840
|
+
'adafruit-qt-py-rp2040': {
|
|
841
|
+
name: 'Adafruit QT Py RP2040',
|
|
842
|
+
protocol: 'picoboot',
|
|
843
|
+
baudRate: 0,
|
|
844
|
+
signature: new Uint8Array([0x2E, 0x8A, 0x03]),
|
|
845
|
+
pageSize: 256,
|
|
846
|
+
timeout: 15000,
|
|
847
|
+
flashSize: 8 * 1024 * 1024, // 8 MB
|
|
848
|
+
vid: 0x2E8A,
|
|
849
|
+
pid: 0x0003,
|
|
850
|
+
resetMethod: 'none',
|
|
851
|
+
},
|
|
852
|
+
'sparkfun-pro-micro-rp2040': {
|
|
853
|
+
name: 'SparkFun Pro Micro RP2040',
|
|
854
|
+
protocol: 'picoboot',
|
|
855
|
+
baudRate: 0,
|
|
856
|
+
signature: new Uint8Array([0x2E, 0x8A, 0x03]),
|
|
857
|
+
pageSize: 256,
|
|
858
|
+
timeout: 15000,
|
|
859
|
+
flashSize: 16 * 1024 * 1024, // 16 MB (W25Q128JV)
|
|
860
|
+
vid: 0x2E8A,
|
|
861
|
+
pid: 0x0003,
|
|
862
|
+
resetMethod: 'none',
|
|
863
|
+
},
|
|
864
|
+
'waveshare-rp2040-zero': {
|
|
865
|
+
name: 'Waveshare RP2040-Zero',
|
|
866
|
+
protocol: 'picoboot',
|
|
867
|
+
baudRate: 0,
|
|
868
|
+
signature: new Uint8Array([0x2E, 0x8A, 0x03]),
|
|
869
|
+
pageSize: 256,
|
|
870
|
+
timeout: 15000,
|
|
871
|
+
flashSize: 2 * 1024 * 1024, // 2 MB
|
|
872
|
+
vid: 0x2E8A,
|
|
873
|
+
pid: 0x0003,
|
|
874
|
+
resetMethod: 'none',
|
|
875
|
+
},
|
|
876
|
+
};
|
|
877
|
+
// ── Lookup helpers ─────────────────────────────────────────────────────────
|
|
878
|
+
/**
|
|
879
|
+
* Find a board by its 3-byte device signature.
|
|
880
|
+
* Returns the first match, or null if no board matches.
|
|
881
|
+
* Note: multiple boards share the same signature (e.g. all ATmega328P variants).
|
|
882
|
+
*/
|
|
883
|
+
export function detectBoardBySignature(signature) {
|
|
884
|
+
for (const board of Object.values(BOARDS)) {
|
|
885
|
+
if (signature.length >= 3 &&
|
|
886
|
+
board.signature.length === 3 &&
|
|
887
|
+
signature[0] === board.signature[0] &&
|
|
888
|
+
signature[1] === board.signature[1] &&
|
|
889
|
+
signature[2] === board.signature[2]) {
|
|
890
|
+
return board;
|
|
891
|
+
}
|
|
892
|
+
}
|
|
893
|
+
return null;
|
|
894
|
+
}
|
|
895
|
+
/** arduino-cli FQBN → board database key */
|
|
896
|
+
const FQBN_MAP = {
|
|
897
|
+
// Arduino official
|
|
898
|
+
'arduino:avr:uno': 'arduino-uno',
|
|
899
|
+
'arduino:avr:nano': 'arduino-nano',
|
|
900
|
+
'arduino:avr:mega': 'arduino-mega2560',
|
|
901
|
+
'arduino:avr:mega2560': 'arduino-mega2560',
|
|
902
|
+
'arduino:avr:megaADK': 'arduino-mega-adk',
|
|
903
|
+
'arduino:avr:leonardo': 'arduino-leonardo',
|
|
904
|
+
'arduino:avr:micro': 'arduino-micro',
|
|
905
|
+
'arduino:avr:mini': 'arduino-pro-mini-5v',
|
|
906
|
+
'arduino:avr:pro': 'arduino-pro-mini-5v',
|
|
907
|
+
'arduino:avr:diecimila': 'arduino-diecimila',
|
|
908
|
+
'arduino:avr:duemilanove': 'arduino-duemilanove-328',
|
|
909
|
+
'arduino:avr:lilypad': 'arduino-lilypad',
|
|
910
|
+
'arduino:avr:lilypadUSB': 'arduino-lilypad-usb',
|
|
911
|
+
'arduino:avr:esplora': 'arduino-esplora',
|
|
912
|
+
'arduino:avr:yun': 'arduino-yun',
|
|
913
|
+
'arduino:megaavr:nona4809': 'arduino-nano-every',
|
|
914
|
+
'arduino:avr:fio': 'arduino-fio',
|
|
915
|
+
'arduino:avr:ethernet': 'arduino-ethernet',
|
|
916
|
+
// SparkFun
|
|
917
|
+
'SparkFun:avr:RedBoard': 'sparkfun-redboard',
|
|
918
|
+
'SparkFun:avr:promicro': 'sparkfun-pro-micro-5v',
|
|
919
|
+
'sparkfun:avr:RedBoard': 'sparkfun-redboard',
|
|
920
|
+
'sparkfun:avr:promicro': 'sparkfun-pro-micro-5v',
|
|
921
|
+
// Adafruit
|
|
922
|
+
'adafruit:avr:flora8': 'adafruit-flora',
|
|
923
|
+
'adafruit:avr:feather32u4': 'adafruit-feather-32u4',
|
|
924
|
+
'adafruit:avr:metro': 'adafruit-metro-328',
|
|
925
|
+
// MegaCoreX / MightyCore
|
|
926
|
+
'MegaCoreX:megaavr:4809': 'atmega4809-updi',
|
|
927
|
+
'MegaCore:avr:1284': 'atmega1284p',
|
|
928
|
+
// Raspberry Pi
|
|
929
|
+
'rp2040:rp2040:rpipico': 'raspberry-pi-pico',
|
|
930
|
+
'rp2040:rp2040:rpipicow': 'raspberry-pi-pico-w',
|
|
931
|
+
'rp2040:rp2040:rpipico2': 'raspberry-pi-pico-2',
|
|
932
|
+
// Adafruit RP2040
|
|
933
|
+
'adafruit:rp2040:feather': 'adafruit-feather-rp2040',
|
|
934
|
+
'adafruit:rp2040:qtpy': 'adafruit-qt-py-rp2040',
|
|
935
|
+
// SparkFun RP2040
|
|
936
|
+
'SparkFun:rp2040:promicro': 'sparkfun-pro-micro-rp2040',
|
|
937
|
+
};
|
|
938
|
+
/**
|
|
939
|
+
* Get a board config from an arduino-cli FQBN string.
|
|
940
|
+
* Returns null if the FQBN is not recognised.
|
|
941
|
+
* @example boardFromFqbn('arduino:avr:mega') → BOARDS['arduino-mega2560']
|
|
942
|
+
*/
|
|
943
|
+
export function boardFromFqbn(fqbn) {
|
|
944
|
+
const key = FQBN_MAP[fqbn];
|
|
945
|
+
return key != null ? (BOARDS[key] ?? null) : null;
|
|
946
|
+
}
|
|
947
|
+
/** USB Vendor IDs for board auto-detection in WebSerial requestPort() */
|
|
948
|
+
export const ARDUINO_USB_VENDOR_IDS = [
|
|
949
|
+
0x2341, // Arduino LLC (official boards)
|
|
950
|
+
0x1a86, // QinHeng Electronics (CH340 / CH341 — clones)
|
|
951
|
+
0x0403, // FTDI (many shields and programmers)
|
|
952
|
+
0x10c4, // Silicon Labs (CP2102 / CP2109)
|
|
953
|
+
0x067b, // Prolific Technology (PL2303)
|
|
954
|
+
0x03eb, // Atmel Corporation (ATmega32U4 native USB)
|
|
955
|
+
0x1b4f, // SparkFun Electronics
|
|
956
|
+
];
|
|
957
|
+
//# sourceMappingURL=database.js.map
|