5
5
"""
6
6
7
7
from pathlib import Path
8
- from typing import List , Optional
8
+ from typing import List , Literal , Optional
9
9
10
10
import esptool
11
11
from loguru import logger as log
12
12
13
13
from mpflash .mpboard_id import find_known_board
14
14
from mpflash .mpremoteboard import MPRemoteBoard
15
15
16
+ FlashMode = Literal ["keep" , "qio" , "qout" , "dio" , "dout" ]
16
17
17
- def flash_esp (mcu : MPRemoteBoard , fw_file : Path , * , erase : bool = True ) -> Optional [MPRemoteBoard ]:
18
+ def flash_esp (
19
+ mcu : MPRemoteBoard ,
20
+ fw_file : Path ,
21
+ * ,
22
+ erase : bool = True ,
23
+ flash_mode : FlashMode = "keep" , # keep, qio, qout, dio, dout
24
+ flash_size : str = "detect" ,
25
+ ) -> Optional [MPRemoteBoard ]:
18
26
if mcu .port not in ["esp32" , "esp8266" ] or mcu .board .startswith ("ARDUINO_" ):
19
27
log .error (f"esptool not supported for { mcu .port } { mcu .board } on { mcu .serialport } " )
20
28
return None
@@ -29,6 +37,8 @@ def flash_esp(mcu: MPRemoteBoard, fw_file: Path, *, erase: bool = True) -> Optio
29
37
chip = "auto"
30
38
start_addr = "0x0"
31
39
if mcu .cpu .upper ().startswith ("ESP32" ):
40
+ start_addr = "0x0"
41
+
32
42
baud_rate = str (921_600 )
33
43
if mcu .cpu .upper () == "ESP32" :
34
44
start_addr = "0x1000"
@@ -39,21 +49,29 @@ def flash_esp(mcu: MPRemoteBoard, fw_file: Path, *, erase: bool = True) -> Optio
39
49
elif "S2" in mcu .cpu .upper ():
40
50
start_addr = "0x1000"
41
51
chip = "esp32s2"
52
+ baud_rate = str (460_800 )
42
53
elif "S3" in mcu .cpu .upper ():
43
54
start_addr = "0x0"
44
55
chip = "esp32s3"
45
56
elif "C3" in mcu .cpu .upper ():
46
57
start_addr = "0x0"
47
58
chip = "esp32c3"
59
+ elif "C6" in mcu .cpu .upper ():
60
+ start_addr = "0x0"
61
+ chip = "esp32c6"
62
+ baud_rate = str (460_800 )
63
+
64
+
48
65
cmds .append (
49
- f"esptool --chip { chip } --port { mcu .serialport } -b { baud_rate } write_flash --compress { start_addr } " .split () + [str (fw_file )]
66
+ f"esptool --chip { mcu .cpu } --port { mcu .serialport } -b { baud_rate } write_flash --flash_mode { flash_mode } --flash_size { flash_size } --compress { start_addr } " .split ()
67
+ + [str (fw_file )]
50
68
)
51
69
elif mcu .cpu .upper () == "ESP8266" :
52
70
baud_rate = str (460_800 )
53
71
start_addr = "0x0"
54
72
chip = "esp8266"
55
73
cmds .append (
56
- f"esptool --chip { chip } --port { mcu .serialport } -b { baud_rate } write_flash --flash_size=detect { start_addr } " .split ()
74
+ f"esptool --chip { chip } --port { mcu .serialport } -b { baud_rate } write_flash --flash_mode { flash_mode } -- flash_size=detect { start_addr } " .split ()
57
75
+ [str (fw_file )]
58
76
)
59
77
# now that we have the chip, we can do the erare properly
0 commit comments