flash/startup: extend "program" command to accept "exit"

This optional argument tells OpenOCD to exit after finishing (either
succesfully, or with an error) the programming sequence. Without it
OpenOCD stays running.

Change-Id: I6ecaf33ff985eea9a9cd02ff644a74403ae3e1e5
Signed-off-by: Paul Fertser <fercerpav@gmail.com>
Reviewed-on: http://openocd.zylin.com/2492
Tested-by: jenkins
Reviewed-by: Uwe Bonnes <bon@elektron.ikp.physik.tu-darmstadt.de>
Reviewed-by: Spencer Oliver <spen@spen-soft.co.uk>
This commit is contained in:
Paul Fertser 2015-01-23 11:38:31 +03:00 committed by Andreas Fritiofson
parent a35712a85c
commit 30f802493d
2 changed files with 28 additions and 18 deletions

View File

@ -4922,7 +4922,7 @@ comamnd or the flash driver then it defaults to 0xff.
@end deffn @end deffn
@anchor{program} @anchor{program}
@deffn Command {program} filename [verify] [reset] [offset] @deffn Command {program} filename [verify] [reset] [exit] [offset]
This is a helper script that simplifies using OpenOCD as a standalone This is a helper script that simplifies using OpenOCD as a standalone
programmer. The only required parameter is @option{filename}, the others are optional. programmer. The only required parameter is @option{filename}, the others are optional.
@xref{Flash Programming}. @xref{Flash Programming}.
@ -5928,7 +5928,7 @@ Programming can be acheived by either using GDB @ref{programmingusinggdb,,Progra
or using the cmds given in @ref{flashprogrammingcommands,,Flash Programming Commands}. or using the cmds given in @ref{flashprogrammingcommands,,Flash Programming Commands}.
@*To simplify using the flash cmds directly a jimtcl script is available that handles the programming and verify stage. @*To simplify using the flash cmds directly a jimtcl script is available that handles the programming and verify stage.
OpenOCD will program/verify/reset the target and shutdown. OpenOCD will program/verify/reset the target and optionally shutdown.
The script is executed as follows and by default the following actions will be peformed. The script is executed as follows and by default the following actions will be peformed.
@enumerate @enumerate
@ -5937,7 +5937,7 @@ The script is executed as follows and by default the following actions will be p
@item @code{flash write_image} is called to erase and write any flash using the filename given. @item @code{flash write_image} is called to erase and write any flash using the filename given.
@item @code{verify_image} is called if @option{verify} parameter is given. @item @code{verify_image} is called if @option{verify} parameter is given.
@item @code{reset run} is called if @option{reset} parameter is given. @item @code{reset run} is called if @option{reset} parameter is given.
@item OpenOCD is shutdown. @item OpenOCD is shutdown if @option{exit} parameter is given.
@end enumerate @end enumerate
An example of usage is given below. @xref{program}. An example of usage is given below. @xref{program}.
@ -5946,11 +5946,11 @@ An example of usage is given below. @xref{program}.
# program and verify using elf/hex/s19. verify and reset # program and verify using elf/hex/s19. verify and reset
# are optional parameters # are optional parameters
openocd -f board/stm32f3discovery.cfg \ openocd -f board/stm32f3discovery.cfg \
-c "program filename.elf verify reset" -c "program filename.elf verify reset exit"
# binary files need the flash address passing # binary files need the flash address passing
openocd -f board/stm32f3discovery.cfg \ openocd -f board/stm32f3discovery.cfg \
-c "program filename.bin 0x08000000" -c "program filename.bin exit 0x08000000"
@end example @end example
@node NAND Flash Commands @node NAND Flash Commands

View File

@ -3,16 +3,28 @@
# #
# program utility proc # program utility proc
# usage: program filename # usage: program filename
# optional args: verify, reset and address # optional args: verify, reset, exit and address
# #
proc program_error {description exit} {
if {$exit == 1} {
echo $description
shutdown
}
error $description
}
proc program {filename args} { proc program {filename args} {
set exit 0
foreach arg $args { foreach arg $args {
if {[string equal $arg "verify"]} { if {[string equal $arg "verify"]} {
set verify 1 set verify 1
} elseif {[string equal $arg "reset"]} { } elseif {[string equal $arg "reset"]} {
set reset 1 set reset 1
} elseif {[string equal $arg "exit"]} {
set exit 1
} else { } else {
set address $arg set address $arg
} }
@ -20,16 +32,12 @@ proc program {filename args} {
# make sure init is called # make sure init is called
if {[catch {init}] != 0} { if {[catch {init}] != 0} {
echo "** OpenOCD init Failed **" program_error "** OpenOCD init failed **" 1
shutdown
return
} }
# reset target and call any init scripts # reset target and call any init scripts
if {[catch {reset init}] != 0} { if {[catch {reset init}] != 0} {
echo "** Unable to reset target **" program_error "** Unable to reset target **" $exit
shutdown
return
} }
# start programming phase # start programming phase
@ -48,7 +56,7 @@ proc program {filename args} {
if {[catch {eval verify_image $flash_args}] == 0} { if {[catch {eval verify_image $flash_args}] == 0} {
echo "** Verified OK **" echo "** Verified OK **"
} else { } else {
echo "** Verify Failed **" program_error "** Verify Failed **" $exit
} }
} }
@ -60,15 +68,17 @@ proc program {filename args} {
reset run reset run
} }
} else { } else {
echo "** Programming Failed **" program_error "** Programming Failed **" $exit
} }
# shutdown OpenOCD if {$exit == 1} {
shutdown shutdown
}
return
} }
add_help_text program "write an image to flash, address is only required for binary images. verify, reset are optional" add_help_text program "write an image to flash, address is only required for binary images. verify, reset, exit are optional"
add_usage_text program "<filename> \[address\] \[verify\] \[reset\]" add_usage_text program "<filename> \[address\] \[verify\] \[reset\] \[exit\]"
# stm32f0x uses the same flash driver as the stm32f1x # stm32f0x uses the same flash driver as the stm32f1x
# this alias enables the use of either name. # this alias enables the use of either name.