blob: 9755363c35d044ee5ed9a549b94b1908c094fc4d [file] [log] [blame]
#!/bin/bash
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#
# Called with following variables set:
# - CORE_PATH is absolute path to @apache-mynewt-core
# - BSP_PATH is absolute path to hw/bsp/bsp_name
# - BIN_BASENAME is the path to prefix to target binary,
# .elf appended to name is the ELF file
# - IMAGE_SLOT is the image slot to download to (for non-mfg-image, non-boot)
# - FEATURES holds the target features string
# - EXTRA_JTAG_CMD holds extra parameters to pass to jtag software
# - MFG_IMAGE is "1" if this is a manufacturing image
# - FLASH_OFFSET contains the flash offset to download to
# - BOOT_LOADER is set if downloading a bootloader
. $CORE_PATH/hw/scripts/jlink.sh
common_file_to_load
if [ "$MFG_IMAGE" ]; then
echo "Manufacturing image not supported yet"
exit 1
fi
parse_extra_jtag_cmd $EXTRA_JTAG_CMD
jlink_target_cmd
jlink_sn
GDB_CMD_FILE=.gdb_load
JLINK_LOG_FILE=.jlink_log
# flash_loader build for this BSP
if [ -z $FLASH_LOADER ]; then
FL_TGT=da1469x_flash_loader
FLASH_LOADER=$BIN_ROOT/targets/$FL_TGT/app/@apache-mynewt-core/apps/flash_loader/flash_loader.elf
fi
if [ ! -f $FLASH_LOADER ]; then
FILE=${FLASH_LOADER##$(pwd)/}
echo "Can't find flash_loader : $FILE"
if [ ! -z $FL_TGT ]; then
echo "Build $FL_TGT first"
fi
exit 1
fi
if [ ! -f $FILE_NAME ]; then
FILE=${FILE_NAME##$(pwd)/}
echo "Cannot find file" $FILE
exit 1
fi
hex2le() {
echo ${1:6:2}${1:4:2}${1:2:2}${1:0:2}
}
# XXX Write windows version also
file_size() {
echo `wc -c $FILE_NAME | awk '{print $1}'`
}
if [ "$BOOT_LOADER" ]; then
IMAGE_FILE=$FILE_NAME.img
if [ "${MYNEWT_VAL_BOOT_SECURE}" == 1 ]; then
if [ -z ${MYNEWT_VAL_BOOT_AES_KEY} ]; then
echo "Undefined AES KEY file. Check syscfg settings"
exit 1
fi
if [ -z ${MYNEWT_VAL_BOOT_SIG_PEM} ]; then
echo "Undefined signature PEM file. Check syscfg settings"
exit 1
fi
${BSP_PATH}/da1469x_header_tool.py secure --sign ${MYNEWT_VAL_BOOT_SIG_PEM} \
-s${MYNEWT_VAL_BOOT_SIG_SLOT} -d${MYNEWT_VAL_BOOT_AES_SLOT} \
-E${MYNEWT_VAL_BOOT_AES_KEY} ${IMAGE_FILE} ${FILE_NAME}
else
${BSP_PATH}/da1469x_header_tool.py nonsecure ${IMAGE_FILE} ${FILE_NAME}
fi
if [ $? != 0 ]; then
exit 1
fi
# use new image for flashing
FILE_NAME=${IMAGE_FILE}
fi
FILE_SIZE=$(file_size $FILE_NAME)
if [ -z $JLINK_TARGET_HOST ]; then
JLINK_SERVER_CMD="shell sh -c \"trap '' 2; $JLINK_GDB_SERVER -device cortex-m33 -speed 4000 -if SWD -port $PORT -singlerun $EXTRA_JTAG_CMD > $JLINK_LOG_FILE 2>&1 &\""
fi
cat > $GDB_CMD_FILE <<EOF
set pagination off
$JLINK_SERVER_CMD
$JLINK_TARGET_CMD
mon reset
mon halt
restore $FLASH_LOADER.bin binary 0x20000000
symbol-file $FLASH_LOADER
# Configure QSPI controller so it can read flash in automode (values
# valid for Macronix flash found on Dialog development kits)
set *(int *)0x3800000C = 0xa8a500eb
set *(int *)0x38000010 = 0x00000066
# Set XTAL as system clock
set *(int *)0x50000014 = 0x00000040
set *(int *)0x500000BC = 4
set \$sp=*(int *)0x20000000
set \$pc=*(int *)0x20000004
set {int}0x38000080 = 0
b main
c
d 1
source $CORE_PATH/compiler/gdbmacros/flash_loader.gdb
mon go
# Wait for flash_loader to get ready
printf "Waiting for flash loader to get ready...\n"
while fl_state != 1
end
fl_erase 0 $FLASH_OFFSET $FILE_SIZE
fl_program $FILE_NAME 0 $FLASH_OFFSET
# 'mon reset' does not appear to reset the board. Write to MCU register
# directly instead.
set *(int *)0x100C0050 = 1
quit
EOF
arm-none-eabi-gdb -batch -x $GDB_CMD_FILE
if [ $? != 0 ]; then
exit 1
fi
# gdb appears to exit before jlinkgdbserver, so immediate
# execution of debug script (i.e. from 'newt run'), will fail due
# to 2 instances of jlinkgdbserver running. Slow exit from here for a bit.
#
sleep 1