aboutsummaryrefslogtreecommitdiff
path: root/src/flash
diff options
context:
space:
mode:
authorSpencer Oliver <spen@spen-soft.co.uk>2013-03-06 15:29:15 +0000
committerØyvind Harboe <oyvindharboe@gmail.com>2013-03-12 08:44:22 +0000
commit2467da4b4aad750d2b3d56998bcf07674047687a (patch)
treedcba97801f91ec3968030010ef0a3b7b5ff35a34 /src/flash
parenta84d237acfa06ed2e40d5db807ff1a1a7d28cd8d (diff)
downloadriscv-openocd-2467da4b4aad750d2b3d56998bcf07674047687a.zip
riscv-openocd-2467da4b4aad750d2b3d56998bcf07674047687a.tar.gz
riscv-openocd-2467da4b4aad750d2b3d56998bcf07674047687a.tar.bz2
tcl: add flash programming helper
This adds a program proc that simplifies using OpenOCD as a standalone programmer. Change-Id: I6ece492cd878c170b734e8bb2e09fe8c4557d5a6 Signed-off-by: Spencer Oliver <spen@spen-soft.co.uk> Reviewed-on: http://openocd.zylin.com/1199 Tested-by: jenkins Reviewed-by: Jörg Fischer <turboj@gmx.de> Reviewed-by: Andreas Fritiofson <andreas.fritiofson@gmail.com> Reviewed-by: Øyvind Harboe <oyvindharboe@gmail.com>
Diffstat (limited to 'src/flash')
-rw-r--r--src/flash/startup.tcl69
1 files changed, 68 insertions, 1 deletions
diff --git a/src/flash/startup.tcl b/src/flash/startup.tcl
index 5f40e64..82959c8 100644
--- a/src/flash/startup.tcl
+++ b/src/flash/startup.tcl
@@ -1,5 +1,73 @@
# Defines basic Tcl procs for OpenOCD flash module
+#
+# program utility proc
+# usage: program filename
+# optional args: verify, reset and address
+#
+
+proc program {filename args} {
+
+ foreach arg $args {
+ if {[string equal $arg "verify"]} {
+ set verify 1
+ } elseif {[string equal $arg "reset"]} {
+ set reset 1
+ } else {
+ set address $arg
+ }
+ }
+
+ # make sure init is called
+ if {[catch {init}] != 0} {
+ echo "** OpenOCD init Failed **"
+ shutdown
+ return
+ }
+
+ # reset target and call any init scripts
+ if {[catch {reset init}] != 0} {
+ echo "** Unable to reset target **"
+ shutdown
+ return
+ }
+
+ # start programming phase
+ echo "** Programming Started **"
+ if {[info exists address]} {
+ set flash_args "$filename $address"
+ } else {
+ set flash_args "$filename"
+ }
+
+ if {[catch {eval flash write_image erase $flash_args}] == 0} {
+ echo "** Programming Finished **"
+ if {[info exists verify]} {
+ # verify phase
+ echo "** Verify Started **"
+ if {[catch {eval verify_image $flash_args}] == 0} {
+ echo "** Verified OK **"
+ } else {
+ echo "** Verify Failed **"
+ }
+ }
+
+ if {[info exists reset]} {
+ # reset target if requested
+ echo "** Resetting Target **"
+ reset run
+ }
+ } else {
+ echo "** Programming Failed **"
+ }
+
+ # shutdown OpenOCD
+ shutdown
+}
+
+add_help_text program "write an image to flash, address is only required for binary images. verify, reset are optional"
+add_usage_text program "<filename> \[address\] \[verify\] \[reset\]"
+
# ease migration to updated flash driver
proc stm32x args {
echo "DEPRECATED! use 'stm32f1x $args' not 'stm32x $args'"
@@ -10,4 +78,3 @@ proc stm32f2xxx args {
echo "DEPRECATED! use 'stm32f2x $args' not 'stm32f2xxx $args'"
eval stm32f2x $args
}
-