6dfcc3f5a5
This will enable us to use either name when calling flash driver commands. For example the stm32wbx family use the same flash driver as the stm32l4x, so the user has to use 'stm32l4x lock 0' which can be confusing. Now the user can also use 'stm32wbx lock 0' with the same result. Change-Id: Ic0d8da9afc202d7cc82d9b9949827e958a1cc824 Signed-off-by: Tarek BOCHKATI <tarek.bouchkati@gmail.com> Reviewed-on: http://openocd.zylin.com/5436 Tested-by: jenkins Reviewed-by: Marc Schink <dev@zapb.de> Reviewed-by: Tomas Vanek <vanekt@fbl.cz>
125 lines
2.8 KiB
Tcl
125 lines
2.8 KiB
Tcl
# Defines basic Tcl procs for OpenOCD flash module
|
|
|
|
#
|
|
# program utility proc
|
|
# usage: program filename
|
|
# optional args: verify, reset, exit and address
|
|
#
|
|
|
|
proc program_error {description exit} {
|
|
if {$exit == 1} {
|
|
echo $description
|
|
shutdown error
|
|
}
|
|
|
|
error $description
|
|
}
|
|
|
|
proc program {filename args} {
|
|
set exit 0
|
|
set needsflash 1
|
|
|
|
foreach arg $args {
|
|
if {[string equal $arg "preverify"]} {
|
|
set preverify 1
|
|
} elseif {[string equal $arg "verify"]} {
|
|
set verify 1
|
|
} elseif {[string equal $arg "reset"]} {
|
|
set reset 1
|
|
} elseif {[string equal $arg "exit"]} {
|
|
set exit 1
|
|
} else {
|
|
set address $arg
|
|
}
|
|
}
|
|
|
|
# Set variables
|
|
set filename \{$filename\}
|
|
if {[info exists address]} {
|
|
set flash_args "$filename $address"
|
|
} else {
|
|
set flash_args "$filename"
|
|
}
|
|
|
|
|
|
# make sure init is called
|
|
if {[catch {init}] != 0} {
|
|
program_error "** OpenOCD init failed **" 1
|
|
}
|
|
|
|
# reset target and call any init scripts
|
|
if {[catch {reset init}] != 0} {
|
|
program_error "** Unable to reset target **" $exit
|
|
}
|
|
|
|
# Check whether programming is needed
|
|
if {[info exists preverify]} {
|
|
echo "**pre-verifying**"
|
|
if {[catch {eval verify_image $flash_args}] == 0} {
|
|
echo "**Verified OK - No flashing**"
|
|
set needsflash 0
|
|
}
|
|
}
|
|
|
|
# start programming phase
|
|
if {$needsflash == 1} {
|
|
echo "** Programming Started **"
|
|
|
|
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 {
|
|
program_error "** Verify Failed **" $exit
|
|
}
|
|
}
|
|
} else {
|
|
program_error "** Programming Failed **" $exit
|
|
}
|
|
}
|
|
|
|
if {[info exists reset]} {
|
|
# reset target if requested
|
|
if {$exit == 1} {
|
|
# also disable target polling, we are shutting down anyway
|
|
poll off
|
|
}
|
|
echo "** Resetting Target **"
|
|
reset run
|
|
}
|
|
|
|
|
|
if {$exit == 1} {
|
|
shutdown
|
|
}
|
|
return
|
|
}
|
|
|
|
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\] \[pre-verify\] \[verify\] \[reset\] \[exit\]"
|
|
|
|
# stm32[f0x|f3x] uses the same flash driver as the stm32f1x
|
|
proc stm32f0x args { eval stm32f1x $args }
|
|
proc stm32f3x args { eval stm32f1x $args }
|
|
|
|
# stm32[f4x|f7x] uses the same flash driver as the stm32f2x
|
|
proc stm32f4x args { eval stm32f2x $args }
|
|
proc stm32f7x args { eval stm32f2x $args }
|
|
|
|
# stm32wb uses the same flash driver as the stm32l4x
|
|
proc stm32wbx args { eval stm32l4x $args }
|
|
|
|
# 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
|
|
}
|