Skip to content

Commit a37a9c3

Browse files
erwangokartben
authored andcommitted
scripts: stm32cubeprogrammer: Add 2 new options for start and download
Implement possibility to specify options for --start and --download arguments. These options are implemented as lists to better fit STM32CubeProgrammer programming model. This options are required to enable the programming of STM32N6 in USB-DFU mode, which requires "-d my.bin 0x1 -s noack" arguments list. Signed-off-by: Erwan Gouriou <erwan.gouriou@st.com>
1 parent 6f3929e commit a37a9c3

File tree

2 files changed

+65
-0
lines changed

2 files changed

+65
-0
lines changed

scripts/west_commands/runners/stm32cubeprogrammer.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,9 @@ def __init__(
3535
frequency: int | None,
3636
reset_mode: str | None,
3737
download_address: int | None,
38+
download_modifiers: list[str],
3839
start_address: int | None,
40+
start_modifiers: list[str],
3941
conn_modifiers: str | None,
4042
cli: Path | None,
4143
use_elf: bool,
@@ -47,8 +49,17 @@ def __init__(
4749

4850
self._port = port
4951
self._frequency = frequency
52+
5053
self._download_address = download_address
54+
self._download_modifiers: list[str] = list()
55+
for opts in [shlex.split(opt) for opt in download_modifiers]:
56+
self._download_modifiers += opts
57+
5158
self._start_address = start_address
59+
self._start_modifiers: list[str] = list()
60+
for opts in [shlex.split(opt) for opt in start_modifiers]:
61+
self._start_modifiers += opts
62+
5263
self._reset_mode = reset_mode
5364
self._conn_modifiers = conn_modifiers
5465
self._cli = (
@@ -160,6 +171,13 @@ def do_add_parser(cls, parser):
160171
required=False,
161172
help="Address where flashing should be done"
162173
)
174+
parser.add_argument(
175+
"--download-modifiers",
176+
default=[],
177+
required=False,
178+
action='append',
179+
help="Additional options for the --download argument"
180+
)
163181
parser.add_argument(
164182
"--start-address",
165183
# To accept arguments in hex format, a wrapper lambda around int() must be used.
@@ -169,6 +187,13 @@ def do_add_parser(cls, parser):
169187
required=False,
170188
help="Address where execution should begin after flashing"
171189
)
190+
parser.add_argument(
191+
"--start-modifiers",
192+
default=[],
193+
required=False,
194+
action='append',
195+
help="Additional options for the --start argument"
196+
)
172197
parser.add_argument(
173198
"--conn-modifiers",
174199
type=str,
@@ -206,7 +231,9 @@ def do_create(
206231
frequency=args.frequency,
207232
reset_mode=args.reset_mode,
208233
download_address=args.download_address,
234+
download_modifiers=args.download_modifiers,
209235
start_address=args.start_address,
236+
start_modifiers=args.start_modifiers,
210237
conn_modifiers=args.conn_modifiers,
211238
cli=args.cli,
212239
use_elf=args.use_elf,
@@ -261,12 +288,14 @@ def flash(self, **kwargs) -> None:
261288
flash_and_run_args = ["--download", dl_file]
262289
if self._download_address is not None:
263290
flash_and_run_args.append(f"0x{self._download_address:X}")
291+
flash_and_run_args += self._download_modifiers
264292

265293
# '--start' is needed to start execution after flash.
266294
# The default start address is the beggining of the flash,
267295
# but another value can be explicitly specified if desired.
268296
flash_and_run_args.append("--start")
269297
if self._start_address is not None:
270298
flash_and_run_args.append(f"0x{self._start_address:X}")
299+
flash_and_run_args += self._start_modifiers
271300

272301
self.check_call(cmd + flash_and_run_args)

scripts/west_commands/tests/test_stm32cubeprogrammer.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,8 @@
6767
"download_address": None,
6868
"start_address": None,
6969
"conn_modifiers": None,
70+
"start_modifiers": [],
71+
"download_modifiers": [],
7072
"cli": CLI_PATH,
7173
"use_elf": False,
7274
"erase": False,
@@ -92,6 +94,8 @@
9294
"download_address": None,
9395
"start_address": 0x8001000,
9496
"conn_modifiers": None,
97+
"start_modifiers": [],
98+
"download_modifiers": [],
9599
"cli": CLI_PATH,
96100
"use_elf": False,
97101
"erase": False,
@@ -118,6 +122,8 @@
118122
"download_address": None,
119123
"start_address": None,
120124
"conn_modifiers": None,
125+
"start_modifiers": [],
126+
"download_modifiers": [],
121127
"cli": CLI_PATH,
122128
"use_elf": False,
123129
"erase": False,
@@ -143,6 +149,8 @@
143149
"download_address": None,
144150
"start_address": None,
145151
"conn_modifiers": None,
152+
"start_modifiers": [],
153+
"download_modifiers": [],
146154
"cli": CLI_PATH,
147155
"use_elf": False,
148156
"erase": False,
@@ -168,6 +176,8 @@
168176
"download_address": None,
169177
"start_address": None,
170178
"conn_modifiers": None,
179+
"start_modifiers": [],
180+
"download_modifiers": [],
171181
"cli": CLI_PATH,
172182
"use_elf": False,
173183
"erase": False,
@@ -193,6 +203,8 @@
193203
"download_address": None,
194204
"start_address": None,
195205
"conn_modifiers": None,
206+
"start_modifiers": [],
207+
"download_modifiers": [],
196208
"cli": CLI_PATH,
197209
"use_elf": False,
198210
"erase": False,
@@ -218,6 +230,8 @@
218230
"download_address": None,
219231
"start_address": None,
220232
"conn_modifiers": "br=115200 sn=TEST",
233+
"start_modifiers": [],
234+
"download_modifiers": [],
221235
"cli": CLI_PATH,
222236
"use_elf": False,
223237
"erase": False,
@@ -243,6 +257,8 @@
243257
"download_address": None,
244258
"start_address": None,
245259
"conn_modifiers": None,
260+
"start_modifiers": [],
261+
"download_modifiers": [],
246262
"cli": CLI_PATH,
247263
"use_elf": True,
248264
"erase": False,
@@ -268,6 +284,8 @@
268284
"download_address": None,
269285
"start_address": None,
270286
"conn_modifiers": None,
287+
"start_modifiers": [],
288+
"download_modifiers": [],
271289
"cli": CLI_PATH,
272290
"use_elf": False,
273291
"erase": True,
@@ -294,6 +312,8 @@
294312
"download_address": None,
295313
"start_address": None,
296314
"conn_modifiers": None,
315+
"start_modifiers": [],
316+
"download_modifiers": [],
297317
"cli": CLI_PATH,
298318
"use_elf": False,
299319
"erase": False,
@@ -320,6 +340,8 @@
320340
"download_address": None,
321341
"start_address": None,
322342
"conn_modifiers": None,
343+
"start_modifiers": [],
344+
"download_modifiers": [],
323345
"cli": None,
324346
"use_elf": False,
325347
"erase": False,
@@ -345,6 +367,8 @@
345367
"download_address": None,
346368
"start_address": None,
347369
"conn_modifiers": None,
370+
"start_modifiers": [],
371+
"download_modifiers": [],
348372
"cli": None,
349373
"use_elf": False,
350374
"erase": False,
@@ -370,6 +394,8 @@
370394
"download_address": None,
371395
"start_address": None,
372396
"conn_modifiers": None,
397+
"start_modifiers": [],
398+
"download_modifiers": [],
373399
"cli": None,
374400
"use_elf": False,
375401
"erase": False,
@@ -395,6 +421,8 @@
395421
"download_address": 0x80000000,
396422
"start_address": None,
397423
"conn_modifiers": None,
424+
"start_modifiers": ["noack"],
425+
"download_modifiers": ["0x1"],
398426
"cli": CLI_PATH,
399427
"use_elf": False,
400428
"erase": False,
@@ -410,7 +438,9 @@
410438
"--download",
411439
RC_KERNEL_HEX,
412440
"0x80000000",
441+
"0x1",
413442
"--start",
443+
"noack",
414444
],
415445
],
416446
},
@@ -440,7 +470,9 @@ def test_stm32cubeprogrammer_init(
440470
frequency=tc["frequency"],
441471
reset_mode=tc["reset_mode"],
442472
download_address=tc["download_address"],
473+
download_modifiers=tc["download_modifiers"],
443474
start_address=tc["start_address"],
475+
start_modifiers=tc["start_modifiers"],
444476
conn_modifiers=tc["conn_modifiers"],
445477
cli=tc["cli"],
446478
use_elf=tc["use_elf"],
@@ -492,6 +524,10 @@ def test_stm32cubeprogrammer_create(
492524
args.extend(["--extload", tc["extload"]])
493525
if tc["tool_opt"]:
494526
args.extend(["--tool-opt", " " + tc["tool_opt"][0]])
527+
if tc["download_modifiers"]:
528+
args.extend(["--download-modifiers", " " + tc["download_modifiers"][0]])
529+
if tc["start_modifiers"]:
530+
args.extend(["--start-modifiers", " " + tc["start_modifiers"][0]])
495531

496532
parser = argparse.ArgumentParser(allow_abbrev=False)
497533
STM32CubeProgrammerBinaryRunner.add_parser(parser)

0 commit comments

Comments
 (0)