Batch Programming with GDB: Segger J-Link and P&E Multilink

I need to program several boards with a firmware: a number too small for serious batch/factory programming, but a number too high doing this with the debugger. I want this:

  1. Connect the board with the debug probe and power it
  2. Run a script to flash the program and run it
  3. Disconnect and restart step 1.
First set of sensor nodes with two programming adapters

Need to program a few boards…


With “Command Line Programming and Debugging with GDB” I have pretty much everything in place. So I only need to combine things to a solution. Because it different depending if using the P&E Multilink or Segger J-Link, I have covered both methods. I’m using the Eclipse based Kinetis Design Studio v3.0.0, but a command line gdb installation could be used too.

P&E Multilink

I’m using the following batch file to start the P&E GDB server, followed by starting the gdb client. Change paths accordingly:

REM Start P&E GDB Server with single session
call "cmd /c start C:\Freescale\KDS_3.0.0\eclipse\plugins\com.pemicro.debug.gdbjtag.pne_2.0.8.201504092111\win32\pegdbserver_console.exe -startserver -singlesession -device=Freescale_K6x_K64FN1M0M12"

REM start gdb with script
C:\Freescale\KDS_3.0.0\arm-none-eabi-gdb -x gdbScript.txt

The option -singlesession to the P&E server is a nice feature: it will terminate the server after the session is finished. I’m using the Freescale K64F in above example, so make sure the -device option matches your target.

The gdb uses the option -x uses this gdb script file:

# gdbscript.txt: script for gdb. Run it with
# gdb -x <commandFile>

# disable confirmation messages (y or no):
set confirm off

# connect to P&E gdb server:
target remote localhost:7224

# reset target:
monitor reset

# load symbols for application (not necessary for flashing only):
# file MyProject/Debug/MyProject.elf

# load application:
load MyProject/Debug/MyProject.elf

# detach from target. As a side effect, this will start it:

# quit gdb:

Segger J-Link

With the Segger J-Link, I need to launch the GDB server first (make sure it not already running):

SEGGER GDB Server running

SEGGER GDB Server running

In a separate cmd/shell window, I run a script:

c:\Freescale\KDS_3.0.0\toolchain\bin\arm-none-eabi-gdb.exe -x gdbscript.txt
Segger GDB Script

Segger GDB Script

The script has the following content to load the file, run it and then disconnect:

# gdb script
target remote localhost:2331
monitor device MK64FN1M0xxx12
monitor reset
load ./Debug/FRDM-K64F_FreeRTOS_8.2.1.elf
# load symbols, not necessary for flashing only
# file ./Debug/FRDM-K64F_FreeRTOS_8.2.1.elf
monitor go

Make sure you update the device and target image/path settings.

The difference to the P&E version is that the Segger J-Link server keeps running. I have not found a way to make that part automated.


There is no IDE or complicated setup necessary to batch program a set of board: all what is needed are some gdb scripts, and I can program and run one board after each other in a series of boards.

Happy Programming 🙂


12 thoughts on “Batch Programming with GDB: Segger J-Link and P&E Multilink

  1. Small point… Isn’t the ‘file’ command redundant/unnecessary here?
    Isn’t it for specifying the file from which symbolic debug info will be loaded (usually the same file specified in the command – but not necessarily) in order to debug interactively?
    And since this is batch load mode with no debugging it’s not needed?
    Might speed things up a little to omit it?


  2. You could also use Segger’s JLink Commander. All you have to do is write a batch file like this:

    C:\SAGIDE\Debugger\JLink_V500c\JLink.exe -Device STM32F103VC -CommanderScript download.jlink

    and download.jlink like this:

    si 1
    speed auto
    loadbin .\xy.bin 0x8000000
    verifybin .\xy.bin 0x8000000
    savebin memoryDumb.bin 0x8000000 0x8000

    This way you dont even have to start gdb. It’s also possible to write multiple bin files or just erase the memory 🙂


  3. Pingback: Updating Segger Tools in Eclipse Kinetis Design Studio | MCU on Eclipse

  4. Pingback: Flashing and Restoring the Hexiwear Firmware | MCU on Eclipse

What do you think?

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s