nxp: mimxrt1170: add support for NXP's LinkServer
LinkServer is NXP's tool to flash and debug on MCU's. This patch expands support for LinkServer to MIMXRT1170. There is one limitation with flashing and debugging the SoC's seciond core (COrtex M4) that will be addressed with a future submission. Signed-off-by: Yves Vandervennet <yves.vandervennet@nxp.com>
This commit is contained in:
parent
d36b7f4de0
commit
ab9da956b0
2 changed files with 47 additions and 10 deletions
|
@ -5,13 +5,28 @@
|
|||
#
|
||||
|
||||
if(CONFIG_SOC_MIMXRT1176_CM7 OR CONFIG_SECOND_CORE_MCUX)
|
||||
board_runner_args(pyocd "--target=mimxrt1170_cm7")
|
||||
board_runner_args(jlink "--device=MIMXRT1176xxxA_M7" "--reset-after-load")
|
||||
board_runner_args(pyocd "--target=mimxrt1170_cm7")
|
||||
board_runner_args(jlink "--device=MIMXRT1176xxxA_M7" "--reset-after-load")
|
||||
|
||||
if(CONFIG_BOARD_MIMXRT1170_EVK_CM7)
|
||||
board_runner_args(linkserver "--device=MIMXRT1176xxxxx:MIMXRT1170-EVK")
|
||||
elseif(CONFIG_BOARD_MIMXRT1170_EVKB_CM7)
|
||||
board_runner_args(linkserver "--device=MIMXRT1176xxxxx:MIMXRT1170-EVKB")
|
||||
endif()
|
||||
|
||||
board_runner_args(linkserver "--core=cm7")
|
||||
elseif(CONFIG_SOC_MIMXRT1176_CM4)
|
||||
board_runner_args(pyocd "--target=mimxrt1170_cm4")
|
||||
# Note: Please use JLINK above V7.50 (Only support run cm4 image when debugging due to default boot core on board is cm7 core)
|
||||
board_runner_args(jlink "--device=MIMXRT1176xxxA_M4")
|
||||
board_runner_args(pyocd "--target=mimxrt1170_cm4")
|
||||
# Note: Please use JLINK above V7.50 (Only support run cm4 image when debugging due to default boot core on board is cm7 core)
|
||||
board_runner_args(jlink "--device=MIMXRT1176xxxA_M4")
|
||||
if(CONFIG_BOARD_MIMXRT1170_EVK_CM4)
|
||||
board_runner_args(linkserver "--device=MIMXRT1176xxxxx:MIMXRT1170-EVK")
|
||||
elseif(CONFIG_BOARD_MIMXRT1170_EVKB_CM4)
|
||||
board_runner_args(linkserver "--device=MIMXRT1176xxxxx:MIMXRT1170-EVKB")
|
||||
endif()
|
||||
board_runner_args(linkserver "--core=cm4")
|
||||
endif()
|
||||
|
||||
include(${ZEPHYR_BASE}/boards/common/jlink.board.cmake)
|
||||
include(${ZEPHYR_BASE}/boards/common/pyocd.board.cmake)
|
||||
include(${ZEPHYR_BASE}/boards/common/linkserver.board.cmake)
|
||||
|
|
|
@ -22,7 +22,7 @@ DEFAULT_LINKSERVER_SEMIHOST_PORT = 3334
|
|||
|
||||
class LinkServerBinaryRunner(ZephyrBinaryRunner):
|
||||
'''Runner front-end for NXP Linkserver'''
|
||||
def __init__(self, cfg, device,
|
||||
def __init__(self, cfg, device, core,
|
||||
linkserver=DEFAULT_LINKSERVER_EXE,
|
||||
dt_flash=True, erase=True,
|
||||
probe=1,
|
||||
|
@ -39,6 +39,7 @@ class LinkServerBinaryRunner(ZephyrBinaryRunner):
|
|||
self.elf_name = cfg.elf_file
|
||||
self.gdb_cmd = cfg.gdb if cfg.gdb else None
|
||||
self.device = device
|
||||
self.core = core
|
||||
self.linkserver = linkserver
|
||||
self.dt_flash = dt_flash
|
||||
self.erase = erase
|
||||
|
@ -68,6 +69,8 @@ class LinkServerBinaryRunner(ZephyrBinaryRunner):
|
|||
def do_add_parser(cls, parser):
|
||||
parser.add_argument('--device', required=True, help='device name')
|
||||
|
||||
parser.add_argument('--core', required=False, help='core of the device')
|
||||
|
||||
parser.add_argument('--probe', default=1,
|
||||
help='interface to use (index, no serial number), default is 1')
|
||||
|
||||
|
@ -92,7 +95,7 @@ class LinkServerBinaryRunner(ZephyrBinaryRunner):
|
|||
@classmethod
|
||||
def do_create(cls, cfg, args):
|
||||
|
||||
return LinkServerBinaryRunner(cfg, args.device,
|
||||
return LinkServerBinaryRunner(cfg, args.device, args.core,
|
||||
linkserver=args.linkserver,
|
||||
dt_flash=args.dt_flash,
|
||||
erase=args.erase,
|
||||
|
@ -120,14 +123,22 @@ class LinkServerBinaryRunner(ZephyrBinaryRunner):
|
|||
if command == 'flash':
|
||||
self.flash(**kwargs)
|
||||
else:
|
||||
if self.core is not None:
|
||||
_cmd_core = [ "-c", self.core ]
|
||||
else:
|
||||
_cmd_core = []
|
||||
|
||||
linkserver_cmd = ([self.linkserver] +
|
||||
["gdbserver"] +
|
||||
["--probe", "#"+str(self.probe) ] +
|
||||
["--gdb-port", str(self.gdb_port )] +
|
||||
["--semihost-port", str(self.semihost_port) ] +
|
||||
self.override_cli +
|
||||
_cmd_core +
|
||||
self.override_cli +
|
||||
[self.device])
|
||||
|
||||
self.logger.debug(f'LinkServer cmd: + {linkserver_cmd}')
|
||||
|
||||
if command in ('debug', 'attach'):
|
||||
if self.elf_name is None or not os.path.isfile(self.elf_name):
|
||||
raise ValueError('Cannot debug; elf file required')
|
||||
|
@ -153,8 +164,13 @@ class LinkServerBinaryRunner(ZephyrBinaryRunner):
|
|||
|
||||
def do_erase(self, **kwargs):
|
||||
|
||||
if self.core is not None:
|
||||
_cmd_core = ":"+self.core
|
||||
else:
|
||||
_cmd_core = ""
|
||||
|
||||
linkserver_cmd = ([self.linkserver, "flash"] + ["--probe", "#"+str(self.probe)] +
|
||||
[self.device] + ["erase"])
|
||||
[self.device+_cmd_core] + ["erase"])
|
||||
self.logger.debug("flash erase command = " + str(linkserver_cmd))
|
||||
self.check_call(linkserver_cmd)
|
||||
|
||||
|
@ -170,7 +186,13 @@ class LinkServerBinaryRunner(ZephyrBinaryRunner):
|
|||
|
||||
def flash(self, **kwargs):
|
||||
|
||||
linkserver_cmd = ([self.linkserver, "flash"] + ["--probe", "#"+str(self.probe)] + self.override_cli + [self.device])
|
||||
if self.core is not None:
|
||||
_cmd_core = ":"+self.core
|
||||
else:
|
||||
_cmd_core = ""
|
||||
|
||||
linkserver_cmd = ([self.linkserver, "flash"] + ["--probe", "#"+str(self.probe)] + self.override_cli + [self.device+_cmd_core])
|
||||
self.logger.debug(f'LinkServer cmd: + {linkserver_cmd}')
|
||||
|
||||
if self.erase:
|
||||
self.do_erase()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue