* TAP Declaration:: TAP Declaration
* CPU Configuration:: CPU Configuration
* Flash Commands:: Flash Commands
+* Flash Programming:: Flash Programming
* NAND Flash Commands:: NAND Flash Commands
* PLD/FPGA Commands:: PLD/FPGA Commands
* General Commands:: General Commands
@cindex flash reading
@cindex flash writing
@cindex flash programming
+@anchor{Flash Programming Commands}
One feature distinguishing NOR flash from NAND or serial flash technologies
is that for read access, it acts exactly like any other addressible memory.
The @var{num} parameter is a value shown by @command{flash banks}.
@end deffn
+@anchor{program}
+@deffn Command {program} filename [verify] [reset] [offset]
+This is a helper script that simplifies using OpenOCD as a standalone
+programmer. The only required parameter is @option{filename}, the others are optional.
+@xref{Flash Programming}.
+@end deffn
+
@anchor{Flash Driver List}
@section Flash Driver List
As noted above, the @command{flash bank} command requires a driver name,
@var{offset} bytes from the beginning of the bank.
@end deffn
+@node Flash Programming
+@chapter Flash Programming
+
+OpenOCD implements numerous ways to program the target flash, whether internal or external.
+Programming can be acheived by either using GDB @ref{Programming using GDB}, or using the cmds given in @ref{Flash Programming Commands}.
+
+@*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.
+
+The script is executed as follows and by default the following actions will be peformed.
+@enumerate
+@item 'init' is executed.
+@item 'reset init' is called to reset and halt the target, any 'reset init' scripts are executed.
+@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{reset run} is called if @option{reset} parameter is given.
+@item OpenOCD is shutdown.
+@end enumerate
+
+An example of usage is given below. @xref{program}.
+
+@example
+# program and verify using elf/hex/s19. verify and reset
+# are optional parameters
+openocd -f board/stm32f3discovery.cfg \
+ -c "program filename.elf verify reset"
+
+# binary files need the flash address passing
+openocd -f board/stm32f3discovery.cfg \
+ -c "program filename.bin 0x08000000"
+@end example
+
@node NAND Flash Commands
@chapter NAND Flash Commands
@cindex NAND
@section Programming using GDB
@cindex Programming using GDB
+@anchor{Programming using GDB}
By default the target memory map is sent to GDB. This can be disabled by
the following OpenOCD configuration option:
# 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'"
echo "DEPRECATED! use 'stm32f2x $args' not 'stm32f2xxx $args'"
eval stm32f2x $args
}
-