81 lines
2.7 KiB
Python
81 lines
2.7 KiB
Python
|
# 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)
|