diff --git a/configs/same70-xplained/README.txt b/configs/same70-xplained/README.txt index 1692273111c..9a0ed6fa835 100644 --- a/configs/same70-xplained/README.txt +++ b/configs/same70-xplained/README.txt @@ -21,6 +21,7 @@ Contents - SPI Slave - Tickless OS - Debugging + - Using OpenOCD and GDB to flash via the EDBG chip - Configurations Status/Open Issues @@ -993,6 +994,105 @@ Debugging (gdb) file nuttx (gdb) ... start debugging ... +Using OpenOCD and GDB to flash via the EDBG chip +================================================ + + Building OpenOCD under Cygwin: + + Refer to configs/olimex-lpc1766stk/README.txt + + Installing OpenOCD in Linux (but see note below): + + sudo apt-get install openocd + + NOTE: At the time of writing installing the above openocd package from + the distribution (Ubuntu 14.04) was not enough to get the latest openocd + version supporting the SAME70 Xplained. + + The code was obtained from the OpenOCD git repository, available at + https://github.com/ntfreak/openocd. + + git clone https://github.com/ntfreak/openocd.git + + Then follow the directions of the "Building OpenOCD" section of their README, + but be sure to configure including the CMSIS-DAP interface: + + ./bootstrap + ./configure --enable-cmsis-dap + make + sudo make install + + If your configure step fails, you might be missing some dependencies, i.e.: + + sudo apt-get install libhidapi-dev + + Helper Scripts. + + OpenOCD requires a configuration file. I keep the one I used last here: + + configs/same70-xplained/tools/atmel_same70_xplained.cfg + + However, the "correct" configuration script to use with OpenOCD may + change as the features of OpenOCD evolve. So you should at least + compare that atmel_same70_xplained.cfg file with configuration files in + /usr/share/openocd/scripts. As of this writing, the configuration + files of interest were: + + /usr/share/openocd/scripts/interface/cmsis-dap.cfg + /usr/share/openocd/scripts/board/atmel_same70_xplained.cfg + /usr/share/openocd/scripts/target/atsamv.cfg + + There is also a script on the tools/ directory that I use to start + the OpenOCD daemon on my system called oocd.sh. That script will + probably require some modifications to work in another environment: + + - Possibly the value of OPENOCD_PATH and TARGET_PATH + - It assumes that the correct script to use is the one at + configs/same70-xplained/tools/atmel_same70_xplained.cfg + + Starting OpenOCD + + Then you should be able to start the OpenOCD daemon like: + + configs/same70-xplained/tools/oocd.sh $PWD + + Connecting GDB + + Once the OpenOCD daemon has been started, you can connect to it via + GDB using the following GDB command: + + arm-nuttx-elf-gdb + (gdb) target remote localhost:3333 + + NOTE: The name of your GDB program may differ. For example, with the + CodeSourcery toolchain, the ARM GDB would be called arm-none-eabi-gdb. + + After starting GDB, you can load the NuttX ELF file: + + (gdb) symbol-file nuttx + (gdb) monitor reset + (gdb) monitor halt + (gdb) load nuttx + + NOTES: + 1. Loading the symbol-file is only useful if you have built NuttX to + include debug symbols (by setting CONFIG_DEBUG_SYMBOLS=y in the + .config file). + 2. The MCU must be halted prior to loading code using 'mon reset' + as described below. + + OpenOCD will support several special 'monitor' commands. These + GDB commands will send comments to the OpenOCD monitor. Here + are a couple that you will need to use: + + (gdb) monitor reset + (gdb) monitor halt + + NOTES: + 1. The MCU must be halted using 'mon halt' prior to loading code. + 2. Reset will restart the processor after loading code. + 3. The 'monitor' command can be abbreviated as just 'mon'. + Configurations ============== @@ -1394,4 +1494,3 @@ Configuration sub-directories STATUS: 2015-03-28: HSMCI TX DMA is disabled. There are some issues with the TX DMA that need to be corrected. - diff --git a/configs/same70-xplained/tools/atmel_same70_xplained.cfg b/configs/same70-xplained/tools/atmel_same70_xplained.cfg new file mode 100644 index 00000000000..068d6c2c37d --- /dev/null +++ b/configs/same70-xplained/tools/atmel_same70_xplained.cfg @@ -0,0 +1,13 @@ +# +# Atmel SAME70 Xplained evaluation kit. +# http://www.atmel.com/tools/ATSAME70-XPLD.aspx +# +# Connect using the EDBG chip on the dev kit over USB + +source [find interface/cmsis-dap.cfg] + +set CHIPNAME atsame70q21 + +source [find target/atsamv.cfg] + +reset_config srst_only diff --git a/configs/same70-xplained/tools/oocd.sh b/configs/same70-xplained/tools/oocd.sh new file mode 100755 index 00000000000..a53ca146fd3 --- /dev/null +++ b/configs/same70-xplained/tools/oocd.sh @@ -0,0 +1,57 @@ +#!/bin/sh +# +# See configs/atmel_same70_xplained.cfg/README.txt for information about +# this file. + +TOPDIR=$1 +USAGE="$0 [-d]" +if [ -z "${TOPDIR}" ]; then + echo "Missing argument" + echo $USAGE + exit 1 +fi + +# Assume that OpenOCD was installed and at /usr/local/bin. Uncomment +# the following to run directly from the build directory + +# OPENOCD_PATH="/home/OpenOCD/openocd/src" +# OPENOCD_PATH="/usr/bin" +OPENOCD_PATH="/usr/local/bin" + +# TARGET_PATH="/home/OpenOCD/openocd/tcl" +# TARGET_PATH="/usr/share/openocd/scripts" +TARGET_PATH="/usr/local/share/openocd/scripts" + +# Assume a Unix development environment. Uncomment to use a Windows +# like environment + +#OPENOCD_EXE=openocd.exe +OPENOCD_EXE=openocd + +OPENOCD_CFG="${TOPDIR}/configs/same70-xplained/tools/atmel_same70_xplained.cfg" +OPENOCD_ARGS="-f ${OPENOCD_CFG} -s ${TARGET_PATH}" + +if [ "X$2" = "X-d" ]; then + OPENOCD_ARGS=$OPENOCD_ARGS" -d3" + set -x +fi + +if [ ! -d ${OPENOCD_PATH} ]; then + echo "OpenOCD path does not exist: ${OPENOCD_PATH}" + exit 1 +fi +if [ ! -x ${OPENOCD_PATH}/${OPENOCD_EXE} ]; then + echo "OpenOCD does not exist: ${OPENOCD_PATH}/${OPENOCD_EXE}" + exit 1 +fi +if [ ! -f ${OPENOCD_CFG} ]; then + echo "OpenOCD config file does not exist: ${OPENOCD_CFG}" + exit 1 +fi + +echo "Starting OpenOCD" +cd ${OPENOCD_PATH} || { echo "Failed to CD to ${OPENOCD_PATH}"; exit 1; } +${OPENOCD_EXE} ${OPENOCD_ARGS} & +echo "OpenOCD daemon started" +ps -ef | grep openocd +echo "In GDB: target remote localhost:3333"