forked from auracaster/openocd
d3445cd146
Instead of updating these regularly we can just accept any IDCODE for the boundary scan TAP. The only downside might be that it's not immediately obvious if you source a config for the wrong type of STM32. Change-Id: I96d4d81699a491b3a46de3f0d3fd078ffddad4e4 Signed-off-by: Andreas Fritiofson <andreas.fritiofson@gmail.com> Reviewed-on: http://openocd.zylin.com/3385 Tested-by: jenkins
107 lines
2.3 KiB
INI
107 lines
2.3 KiB
INI
#
|
|
# stm32l1 devices support both JTAG and SWD transports.
|
|
#
|
|
|
|
source [find target/swj-dp.tcl]
|
|
source [find mem_helper.tcl]
|
|
|
|
if { [info exists CHIPNAME] } {
|
|
set _CHIPNAME $CHIPNAME
|
|
} else {
|
|
set _CHIPNAME stm32l1
|
|
}
|
|
|
|
set _ENDIAN little
|
|
|
|
# Work-area is a space in RAM used for flash programming
|
|
# By default use 10kB
|
|
if { [info exists WORKAREASIZE] } {
|
|
set _WORKAREASIZE $WORKAREASIZE
|
|
} else {
|
|
set _WORKAREASIZE 0x2800
|
|
}
|
|
|
|
# JTAG speed should be <= F_CPU/6.
|
|
# F_CPU after reset is 2MHz, so use F_JTAG max = 333kHz
|
|
adapter_khz 300
|
|
|
|
adapter_nsrst_delay 100
|
|
if {[using_jtag]} {
|
|
jtag_ntrst_delay 100
|
|
}
|
|
|
|
#jtag scan chain
|
|
if { [info exists CPUTAPID] } {
|
|
set _CPUTAPID $CPUTAPID
|
|
} else {
|
|
if { [using_jtag] } {
|
|
# See STM Document RM0038
|
|
# Section 30.6.3 - corresponds to Cortex-M3 r2p0
|
|
set _CPUTAPID 0x4ba00477
|
|
} else {
|
|
# SWD IDCODE (single drop, arm)
|
|
set _CPUTAPID 0x2ba01477
|
|
}
|
|
}
|
|
|
|
swj_newdap $_CHIPNAME cpu -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id $_CPUTAPID
|
|
|
|
if {[using_jtag]} {
|
|
jtag newtap $_CHIPNAME bs -irlen 5
|
|
}
|
|
|
|
set _TARGETNAME $_CHIPNAME.cpu
|
|
target create $_TARGETNAME cortex_m -endian $_ENDIAN -chain-position $_TARGETNAME
|
|
|
|
$_TARGETNAME configure -work-area-phys 0x20000000 -work-area-size $_WORKAREASIZE -work-area-backup 0
|
|
|
|
# flash size will be probed
|
|
set _FLASHNAME $_CHIPNAME.flash
|
|
flash bank $_FLASHNAME stm32lx 0x08000000 0 0 0 $_TARGETNAME
|
|
|
|
reset_config srst_nogate
|
|
|
|
if {![using_hla]} {
|
|
# if srst is not fitted use SYSRESETREQ to
|
|
# perform a soft reset
|
|
cortex_m reset_config sysresetreq
|
|
}
|
|
|
|
proc stm32l_enable_HSI {} {
|
|
# Enable HSI as clock source
|
|
echo "STM32L: Enabling HSI"
|
|
|
|
# Set HSION in RCC_CR
|
|
mww 0x40023800 0x00000101
|
|
|
|
# Set HSI as SYSCLK
|
|
mww 0x40023808 0x00000001
|
|
|
|
# Increase JTAG speed
|
|
adapter_khz 2000
|
|
}
|
|
|
|
$_TARGETNAME configure -event reset-init {
|
|
stm32l_enable_HSI
|
|
}
|
|
|
|
$_TARGETNAME configure -event reset-start {
|
|
adapter_khz 300
|
|
}
|
|
|
|
$_TARGETNAME configure -event examine-end {
|
|
# DBGMCU_CR |= DBG_STANDBY | DBG_STOP | DBG_SLEEP
|
|
mmw 0xE0042004 0x00000007 0
|
|
|
|
# Stop watchdog counters during halt
|
|
# DBGMCU_APB1_FZ |= DBG_IWDG_STOP | DBG_WWDG_STOP
|
|
mmw 0xE0042008 0x00001800 0
|
|
}
|
|
|
|
$_TARGETNAME configure -event trace-config {
|
|
# Set TRACE_IOEN; TRACE_MODE is set to async; when using sync
|
|
# change this value accordingly to configure trace pins
|
|
# assignment
|
|
mmw 0xE0042004 0x00000020 0
|
|
}
|