X-Git-Url: https://review.openocd.org/gitweb?p=openocd.git;a=blobdiff_plain;f=src%2Fflash%2Fstartup.tcl;h=82959c8a136b418890f3ddbb3cc94eee3d723e71;hp=2c335d9f7b1e0a73dc915bb86873244f841c5448;hb=2467da4b4aad750d2b3d56998bcf07674047687a;hpb=2bc4dee7e64662c7ca24b83cfa566bcca68cb3b4;ds=sidebyside diff --git a/src/flash/startup.tcl b/src/flash/startup.tcl index 2c335d9f7b..82959c8a13 100644 --- a/src/flash/startup.tcl +++ b/src/flash/startup.tcl @@ -1,16 +1,80 @@ # Defines basic Tcl procs for OpenOCD flash module -# Show flash in human readable form -# This is an example of a human readable form of a low level fn -proc flash_banks {} { - set i 0 - set result "" - foreach {a} [ocd_flash banks] { - if {$i > 0} { - set result "$result\n" +# +# 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 } - set result [format "$result#%d: %s at 0x%08x, size 0x%08x, buswidth %d, chipwidth %d" $i $a(name) $a(base) $a(size) $a(bus_width) $a(chip_width)] - set i [expr $i+1] } - return $result + + # 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 " \[address\] \[verify\] \[reset\]" + +# ease migration to updated flash driver +proc stm32x args { + echo "DEPRECATED! use 'stm32f1x $args' not 'stm32x $args'" + eval stm32f1x $args +} + +proc stm32f2xxx args { + echo "DEPRECATED! use 'stm32f2x $args' not 'stm32f2xxx $args'" + eval stm32f2x $args }