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…

Outline

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:
detach

# quit gdb:
quit

Segger J-Link

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

c:\Freescale\KDS_3.0.0\segger\JLinkGDBServerCL.exe
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
disconnect
quit

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.

Summary

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?

    Like

  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
    r
    h
    erase
    loadbin .\xy.bin 0x8000000
    verifybin .\xy.bin 0x8000000
    savebin memoryDumb.bin 0x8000000 0x8000
    r
    q

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

    Like

  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?

This site uses Akismet to reduce spam. Learn how your comment data is processed.