# Copyright (c) 2021, ATL-Electronics # SPDX-License-Identifier: Apache-2.0 '''GigaDevice ISP tool (gd32isp) runner for serial boot ROM''' from runners.core import ZephyrBinaryRunner, RunnerCaps DEFAULT_GD32ISP_CLI = 'GD32_ISP_Console' DEFAULT_GD32ISP_PORT = '/dev/ttyUSB0' DEFAULT_GD32ISP_SPEED = '57600' DEFAULT_GD32ISP_ADDR = '0x08000000' class Gd32ispBinaryRunner(ZephyrBinaryRunner): '''Runner front-end for gd32isp.''' def __init__(self, cfg, device, isp=DEFAULT_GD32ISP_CLI, port=DEFAULT_GD32ISP_PORT, speed=DEFAULT_GD32ISP_SPEED, addr=DEFAULT_GD32ISP_ADDR): super().__init__(cfg) self.device = device self.isp = isp self.port = port self.speed = speed self.addr = addr @classmethod def name(cls): return 'gd32isp' @classmethod def capabilities(cls): return RunnerCaps(commands={'flash'}) @classmethod def do_add_parser(cls, parser): # Required: parser.add_argument('--device', required=True, help='device part number') # Optional: parser.add_argument('--isp', default=DEFAULT_GD32ISP_CLI, help='path to gd32 isp console program') parser.add_argument('--port', default=DEFAULT_GD32ISP_PORT, help='serial port to use, default is ' + str(DEFAULT_GD32ISP_PORT)) parser.add_argument('--speed', default=DEFAULT_GD32ISP_SPEED, help='serial port speed to use, default is ' + DEFAULT_GD32ISP_SPEED) parser.add_argument('--addr', default=DEFAULT_GD32ISP_ADDR, help='flash address, default is ' + DEFAULT_GD32ISP_ADDR) @classmethod def do_create(cls, cfg, args): return Gd32ispBinaryRunner(cfg, device=args.device, isp=args.isp, port=args.port, speed=args.speed, addr=args.addr) def do_run(self, command, **kwargs): self.require(self.isp) self.ensure_output('bin') cmd_flash = [self.isp, '-c', '--pn', self.port, '--br', self.speed, '--sb', '1', '-i', self.device, '-e', '--all', '-d', '--a', self.addr, '--fn', self.cfg.bin_file] self.check_call(cmd_flash)