Skip to content

Commit

Permalink
runners: add minichlink
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
nzmichaelh authored and kholia committed Oct 20, 2024
1 parent d26dff2 commit 88e6d57
Show file tree
Hide file tree
Showing 5 changed files with 105 additions and 0 deletions.
5 changes: 5 additions & 0 deletions boards/common/minichlink.board.cmake
Original file line number Diff line number Diff line change
@@ -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 changes: 3 additions & 0 deletions boards/wch/ch32v003evt/board.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -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 change: 1 addition & 0 deletions scripts/west_commands/runners/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ def _import_runner_module(runner_name):
'jlink',
'linkserver',
'mdb',
'minichlink',
'misc',
'native',
'nios2',
Expand Down
95 changes: 95 additions & 0 deletions scripts/west_commands/runners/minichlink.py
Original file line number Diff line number Diff line change
@@ -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 ZephyrBinaryRunner, RunnerCaps, RunnerConfig


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 change: 1 addition & 0 deletions scripts/west_commands/tests/test_imports.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ def test_runner_imports():
'linkserver',
'mdb-nsim',
'mdb-hw',
'minichlink',
'misc-flasher',
'native',
'nios2',
Expand Down

0 comments on commit 88e6d57

Please sign in to comment.