blob: 4f2a1b1717e98215eb8b4e0d47b15728531864a4 [file] [log] [blame]
# 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)