This is an automated email from Gerrit.

Spencer Oliver (s...@spen-soft.co.uk) just uploaded a new patch set to Gerrit, 
which you can find at http://openocd.zylin.com/1199

-- gerrit

commit a9f80f4c9268a1d974682719ca4067d2332aedf0
Author: Spencer Oliver <s...@spen-soft.co.uk>
Date:   Wed Mar 6 14:07:02 2013 +0000

    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 <s...@spen-soft.co.uk>

diff --git a/doc/openocd.texi b/doc/openocd.texi
index a5b0a12..9f3a851 100644
--- a/doc/openocd.texi
+++ b/doc/openocd.texi
@@ -72,6 +72,7 @@ Free Documentation License''.
 * 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
@@ -4596,6 +4597,7 @@ but most don't bother.
 @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.
@@ -4739,6 +4741,13 @@ specifies "to the end of the flash bank".
 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,
@@ -5580,6 +5589,38 @@ Write the binary file @var{filename} to mflash bank 
@var{num}, starting at
 @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
@@ -7871,6 +7912,7 @@ using @command{gdb -x filename}.
 
 @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:
diff --git a/src/flash/startup.tcl b/src/flash/startup.tcl
index 5f40e64..526d4fa 100644
--- a/src/flash/startup.tcl
+++ b/src/flash/startup.tcl
@@ -1,5 +1,69 @@
 # 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
+       init
+
+       # 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 +74,3 @@ proc stm32f2xxx args {
        echo "DEPRECATED! use 'stm32f2x $args' not 'stm32f2xxx $args'"
        eval stm32f2x $args
 }
-

-- 

------------------------------------------------------------------------------
Symantec Endpoint Protection 12 positioned as A LEADER in The Forrester  
Wave(TM): Endpoint Security, Q1 2013 and "remains a good choice" in the  
endpoint security space. For insight on selecting the right partner to 
tackle endpoint security challenges, access the full report. 
http://p.sf.net/sfu/symantec-dev2dev
_______________________________________________
OpenOCD-devel mailing list
OpenOCD-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openocd-devel

Reply via email to