tcl/target: Enable using vectreset for CC3320SF targets
On CC32xx family of devices, sysrequest is disabled, and vectreset is blocked by the boot loader (stops in a while(1) statement). srst reset can leave the target in a state that prevents debug. This change enables using vectreset on SF variants by moving the PC to the start of the user application in internal flash. This allows for a more reliable reset, but with two caveats: 1) This only works for the SF variant with internal flash. 2) This only resets the CPU and not any peripherals. Tested on CC3220SF rev B Launchpad in both SWD and JTAG modes. Confirmed proper behavior of reset, reset init, reset halt, and reset run commands. Update: reworked per comment in code review. Re-tested with CC3220SF Launchpad as both CC3220SF and as CC32xx board to confirm reset behavior as expected. Update: Added adapter srst delay 1100 line to the CC3200 LaunchXL configuration file. Change-Id: Ibc042d785c846c2223ae55b8f2410b75ed2df354 Signed-off-by: Edward Fewell <efewell@ti.com> Reviewed-on: http://openocd.zylin.com/5489 Tested-by: jenkins Reviewed-by: Antonio Borneo <borneo.antonio@gmail.com>
This commit is contained in:
parent
d35c44c743
commit
4d7c48fb80
|
@ -18,3 +18,4 @@ set WORKAREASIZE 0x40000
|
|||
source [find target/ti_cc32xx.cfg]
|
||||
|
||||
reset_config srst_only
|
||||
adapter srst delay 1100
|
||||
|
|
|
@ -5,3 +5,6 @@ source [find interface/xds110.cfg]
|
|||
adapter speed 8500
|
||||
transport select swd
|
||||
source [find target/ti_cc32xx.cfg]
|
||||
|
||||
reset_config srst_only
|
||||
adapter srst delay 1100
|
||||
|
|
|
@ -10,3 +10,31 @@ source [find target/ti_cc32xx.cfg]
|
|||
|
||||
set _FLASHNAME $_CHIPNAME.flash
|
||||
flash bank $_FLASHNAME cc3220sf 0 0 0 0 $_TARGETNAME
|
||||
|
||||
#
|
||||
# On CC32xx family of devices, sysreqreset is disabled, and vectreset is
|
||||
# blocked by the boot loader (stops in a while(1) statement). srst reset can
|
||||
# leave the target in a state that prevents debug. The following uses the
|
||||
# soft_reset_halt command to reset and halt the target. Then the PC and stack
|
||||
# are initialized from internal flash. This allows for a more reliable reset,
|
||||
# but with two caveats: it only works for the SF variant that has internal
|
||||
# flash, and it only resets the CPU and not any peripherals.
|
||||
#
|
||||
|
||||
proc ocd_process_reset_inner { MODE } {
|
||||
|
||||
soft_reset_halt
|
||||
|
||||
# Intialize MSP, PSP, and PC from vector table at flash 0x01000800
|
||||
mem2array boot 32 0x01000800 2
|
||||
|
||||
reg msp $boot(0)
|
||||
reg psp $boot(0)
|
||||
reg pc $boot(1)
|
||||
|
||||
if { 0 == [string compare $MODE run ] } {
|
||||
resume
|
||||
}
|
||||
|
||||
cc32xx.cpu invoke-event reset-end
|
||||
}
|
||||
|
|
|
@ -59,6 +59,3 @@ if { [info exists WORKAREASIZE] } {
|
|||
}
|
||||
|
||||
$_TARGETNAME configure -work-area-phys 0x20000000 -work-area-size $_WORKAREASIZE -work-area-backup 0
|
||||
|
||||
reset_config srst_only
|
||||
adapter srst delay 1100
|
||||
|
|
Loading…
Reference in New Issue