I need to program several boards with a firmware: a number too small for serious batch/factory programming, but a number too high for doing this with the debugger. I want this:
- Connect the board with the debug probe and power it
- Run a script to flash the program and run it
- Disconnect and restart step 1.
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 into a solution. Because it's different depending on if you're 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 can be used too.
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_126.96.36.199504092111\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 the 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
With the Segger J-Link, I need to launch the GDB server first (make sure it's not already running):
SEGGER GDB Server running
In a separate cmd/shell window, I run this script:
c:\Freescale\KDS_3.0.0\toolchain\bin\arm-none-eabi-gdb.exe -x gdbscript.txt
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 with 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 boards: all that you need are some gdb scripts, and I can program and run one board after each other in a series of boards.