Browse Source

runners: add minichlink

This commit adds a runner wrapper for the 'minichlink' program which
offers a free, open mechanism to use the CH-LinkE programming dongle for
the CH32V003.

https://github.com/cnlohr/ch32v003fun/tree/master/minichlink

Signed-off-by: Michael Hope <michaelh@juju.nz>
Signed-off-by: Dhiru Kholia <dhiru.kholia@gmail.com>
pull/82071/head
Michael Hope 1 year ago committed by Fabio Baltieri
parent
commit
de19a13c34
  1. 5
      boards/common/minichlink.board.cmake
  2. 3
      boards/wch/ch32v003evt/board.cmake
  3. 1
      scripts/west_commands/runners/__init__.py
  4. 95
      scripts/west_commands/runners/minichlink.py
  5. 1
      scripts/west_commands/tests/test_imports.py

5
boards/common/minichlink.board.cmake

@ -0,0 +1,5 @@ @@ -0,0 +1,5 @@
# Copyright (c) 2024 Dhiru Kholia
# SPDX-License-Identifier: Apache-2.0
board_set_flasher_ifnset(minichlink)
board_finalize_runner_args(minichlink)

3
boards/wch/ch32v003evt/board.cmake

@ -3,3 +3,6 @@ @@ -3,3 +3,6 @@
board_runner_args(openocd "--use-elf" "--cmd-reset-halt" "halt")
include(${ZEPHYR_BASE}/boards/common/openocd.board.cmake)
board_runner_args(minichlink)
include(${ZEPHYR_BASE}/boards/common/minichlink.board.cmake)

1
scripts/west_commands/runners/__init__.py

@ -40,6 +40,7 @@ _names = [ @@ -40,6 +40,7 @@ _names = [
'jlink',
'linkserver',
'mdb',
'minichlink',
'misc',
'native',
'nios2',

95
scripts/west_commands/runners/minichlink.py

@ -0,0 +1,95 @@ @@ -0,0 +1,95 @@
# Copyright (c) 2024 Google LLC.
#
# SPDX-License-Identifier: Apache-2.0
"""WCH CH32V00x specific runner."""
import argparse
from runners.core import RunnerCaps, RunnerConfig, ZephyrBinaryRunner
class MiniChLinkBinaryRunner(ZephyrBinaryRunner):
"""Runner for CH32V00x based devices using minichlink."""
def __init__(
self,
cfg: RunnerConfig,
minichlink: str,
erase: bool,
reset: bool,
dt_flash: bool,
terminal: bool,
):
super().__init__(cfg)
self.minichlink = minichlink
self.erase = erase
self.reset = reset
self.dt_flash = dt_flash
self.terminal = terminal
@classmethod
def name(cls):
return "minichlink"
@classmethod
def capabilities(cls) -> RunnerCaps:
return RunnerCaps(commands={"flash"}, flash_addr=True, erase=True, reset=True)
@classmethod
def do_add_parser(cls, parser: argparse.ArgumentParser):
parser.add_argument(
"--minichlink", default="minichlink", help="path to the minichlink binary"
)
parser.add_argument(
"--terminal",
default=False,
action=argparse.BooleanOptionalAction,
help="open the terminal after flashing. Implies --reset.",
)
parser.set_defaults(reset=True)
@classmethod
def do_create(cls, cfg: RunnerConfig, args: argparse.Namespace):
return MiniChLinkBinaryRunner(
cfg,
minichlink=args.minichlink,
erase=args.erase,
reset=args.reset,
dt_flash=(args.dt_flash == "y"),
terminal=args.terminal,
)
def do_run(self, command: str, **kwargs):
self.require(self.minichlink)
if command == "flash":
self.flash()
else:
raise ValueError("BUG: unhandled command f{command}")
def flash(self):
self.ensure_output("bin")
cmd = [self.minichlink, "-a"]
if self.erase:
cmd.append("-E")
flash_addr = 0
if self.dt_flash:
flash_addr = self.flash_address_from_build_conf(self.build_conf)
cmd.extend(["-w", self.cfg.bin_file or "", f"0x{flash_addr:x}"])
if self.reset or self.terminal:
cmd.append("-b")
if self.terminal:
cmd.append("-T")
if self.terminal:
self.check_call(cmd)
else:
self.check_output(cmd)

1
scripts/west_commands/tests/test_imports.py

@ -32,6 +32,7 @@ def test_runner_imports(): @@ -32,6 +32,7 @@ def test_runner_imports():
'linkserver',
'mdb-hw',
'mdb-nsim',
'minichlink',
'misc-flasher',
'native',
'nios2',

Loading…
Cancel
Save