aboutsummaryrefslogtreecommitdiff
path: root/testing/DMBootloader/atprogram.sh
diff options
context:
space:
mode:
authorJan Sucan <sucanjan@fit.cvut.cz>2019-06-04 14:34:27 +0200
committerJan Sucan <sucanjan@fit.cvut.cz>2019-06-04 14:34:27 +0200
commitdc8703206e3f0f69605c56d0e1127f7e17f3476a (patch)
tree166823a741dc420c10d54250cb53d1e3a6b74faf /testing/DMBootloader/atprogram.sh
Initial commit
Diffstat (limited to 'testing/DMBootloader/atprogram.sh')
-rw-r--r--testing/DMBootloader/atprogram.sh68
1 files changed, 68 insertions, 0 deletions
diff --git a/testing/DMBootloader/atprogram.sh b/testing/DMBootloader/atprogram.sh
new file mode 100644
index 0000000..b99b91a
--- /dev/null
+++ b/testing/DMBootloader/atprogram.sh
@@ -0,0 +1,68 @@
+ATPROGRAM_EXE='/c/Program Files (x86)/Atmel/Studio/7.0/atbackend/atprogram.exe'
+ATPROGRAM_OPTS='-t jtagice3 -i jtag -d at32uc3c2512c'
+MCU_FLASH_BASE_ADDR=2147483648 # = 0x80000000
+
+# Read FLASH memory of the MCU
+#
+# Usage: atprogram_read_flash OUTPUT_FILE FIRST_PAGE PAGE_COUNT
+# OUTPUT_FILE binary output file that will contain data from the FLASH
+# FIRST_PAGE first page to be read
+# PAGE_COUNT page count to be read from the FIRST_PAGE (including)
+atprogram_read_flash()
+{
+ if [ $# -ne 3 ]; then
+ echo 'atprogram_read_flash: ERROR: arguments' >&2
+ return 1
+ fi
+
+ start_address=$(( $MCU_FLASH_BASE_ADDR + ( $2 * 512 ) ))
+ bytes_to_read=$(( $3 * 512 ))
+
+ "$ATPROGRAM_EXE" $ATPROGRAM_OPTS read --format bin -f "$(cygpath -w "$1")" \
+ -o $start_address -s $bytes_to_read 1>/dev/null
+}
+
+atprogram_write_bootloader()
+{
+ if [ $# -ne 1 ]; then
+ echo 'atprogram_write_bootloader: ERROR: arguments' >&2
+ return 1
+ fi
+
+ "$ATPROGRAM_EXE" $ATPROGRAM_OPTS program --chiperase --verify --format hex \
+ --file "$(cygpath -w "$1")" 1>/dev/null 2>&1
+}
+
+atprogram_protect_bootloader()
+{
+ if [ $# -ne 0 ]; then
+ echo 'atprogram_protect_bootloader: ERROR: arguments' >&2
+ return 1
+ fi
+
+ {
+ # Set bootloader area protection
+ "$ATPROGRAM_EXE" $ATPROGRAM_OPTS write -fs --values FFF5FFFF
+ [ $? -ne 0 ] && return 1
+ # Write must fail
+ "$ATPROGRAM_EXE" $ATPROGRAM_OPTS write -o $MCU_FLASH_BASE_ADDR --values 01020304
+ [ $? -eq 0 ] && return 1 || return 0
+ } 1>/dev/null 2>&1
+}
+
+atprogram_set_security_bit()
+{
+ if [ $# -ne 0 ]; then
+ echo 'atprogram_set_security_bit: ERROR: arguments' >&2
+ return 1
+ fi
+
+ {
+ # Set security bit
+ "$ATPROGRAM_EXE" $ATPROGRAM_OPTS secure
+ [ $? -ne 0 ] && return 1
+ # Write must fail with error code 16
+ "$ATPROGRAM_EXE" $ATPROGRAM_OPTS write -o $MCU_FLASH_BASE_ADDR --values 01020304
+ [ $? -eq 16 ] && return 0 || return 1
+ } 1>/dev/null 2>&1
+}