Browse Source
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
5 changed files with 105 additions and 0 deletions
@ -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) |
@ -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) |
Loading…
Reference in new issue