Skip to content

Commit f3c1d87

Browse files
Add jlink-serial-number argument to specify target
-adds flag `--jlink-serial-number XXXX` to specify target board
1 parent 0d22542 commit f3c1d87

File tree

3 files changed

+30
-2
lines changed

3 files changed

+30
-2
lines changed

Diff for: README.md

+6
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,12 @@ knowing the device type of the MCU on the board.
200200
- `speed`: The speed value to pass to JLink. Defaults to 1200.
201201
- `if`: The interface to pass to JLink.
202202

203+
JLink supports selecting the target board based on the serial number of the
204+
JTAG. Tockloader exposes this functionality with the `jlink-serial-number`
205+
flag.
206+
207+
tockloader [command] --jlink-serial-number [SERIAL_NUMBER]
208+
203209
Tockloader can also do JTAG using OpenOCD. OpenOCD needs to know which config
204210
file to use.
205211

Diff for: tockloader/jlinkexe.py

+19-2
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,9 @@ def __init__(self, args):
3636
if platform.system() == "Windows":
3737
self.jlink_cmd = "JLink"
3838

39+
# Obtain serial number if --jlink-serial-number argument provided
40+
self.jlink_serial_number = getattr(self.args, "jlink_serial_number")
41+
3942
# By default we assume that jlinkexe can be used to read any address on
4043
# this board, so we set `address_maximum` to None. In some cases,
4144
# however, particularly with external flash chips, jlinkexe may not be
@@ -196,6 +199,10 @@ def _run_jtag_commands(self, commands, binary, write=True):
196199
jlink_file.name,
197200
)
198201

202+
# Append target selector if serial number provided.
203+
if self.jlink_serial_number:
204+
jlink_command += " -USB {}".format(self.jlink_serial_number)
205+
199206
logging.debug('Running "{}".'.format(jlink_command))
200207

201208
def print_output(subp):
@@ -456,9 +463,19 @@ def run_terminal(self):
456463
return
457464

458465
logging.status("Starting JLinkExe JTAG connection.")
466+
467+
# Include serial number specifier if `--jlin-serial-number` flag provided.
468+
jlink_serial_number_str = ""
469+
if self.jlink_serial_number:
470+
jlink_serial_number_str = ("-USB {}").format(self.jlink_serial_number)
471+
459472
jtag_p = subprocess.Popen(
460-
"{} -device {} -if {} -speed {} -autoconnect 1 -jtagconf -1,-1".format(
461-
self.jlink_cmd, self.jlink_device, self.jlink_if, self.jlink_speed
473+
"{} -device {} -if {} -speed {} -autoconnect 1 {} --jtagconf -1,-1".format(
474+
self.jlink_cmd,
475+
self.jlink_device,
476+
self.jlink_if,
477+
self.jlink_speed,
478+
jlink_serial_number_str,
462479
).split(),
463480
stdout=subprocess.PIPE,
464481
stderr=subprocess.PIPE,

Diff for: tockloader/main.py

+5
Original file line numberDiff line numberDiff line change
@@ -778,6 +778,11 @@ def main():
778778
parent_channel.add_argument(
779779
"--jlink-if", help="The interface type to pass to JLinkExe."
780780
)
781+
parent_channel.add_argument(
782+
"--jlink-serial-number",
783+
default=None,
784+
help="Specify a specific JLink via serial number. Useful when multiple JLinks connected to same machine.",
785+
)
781786
parent_channel.add_argument(
782787
"--openocd-board", help="The cfg file in OpenOCD `board` folder."
783788
)

0 commit comments

Comments
 (0)