| From b6f9101aba52de945f7c115cec0e0831eea20f4e Mon Sep 17 00:00:00 2001 |
| From: Alexandre TORGUE <alexandre.torgue@st.com> |
| Date: Mon, 17 Jul 2017 13:59:16 +0200 |
| Subject: [PATCH 2/2] Add stm32h7x.cfg config file |
| |
| Change-Id: I2aae2c5acff4f3ff8e1bf232fda5a11a87f71703 |
| Signed-off-by: Alexandre TORGUE <alexandre.torgue@st.com> |
| --- |
| tcl/target/stm32h7x.cfg | 152 ++++++++++++++++++++++++++++++++++++++++++++++++ |
| 1 file changed, 152 insertions(+) |
| create mode 100644 tcl/target/stm32h7x.cfg |
| |
| diff --git a/tcl/target/stm32h7x.cfg b/tcl/target/stm32h7x.cfg |
| new file mode 100644 |
| index 00000000..a50d956f |
| --- /dev/null |
| +++ b/tcl/target/stm32h7x.cfg |
| @@ -0,0 +1,152 @@ |
| +# script for stm32h7x family |
| + |
| +# |
| +# stm32h7 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 stm32h7x |
| +} |
| + |
| +set _ENDIAN little |
| + |
| +# Work-area is a space in RAM used for flash programming |
| +# By default use 64kB |
| +if { [info exists WORKAREASIZE] } { |
| + set _WORKAREASIZE $WORKAREASIZE |
| +} else { |
| + set _WORKAREASIZE 0x10000 |
| +} |
| + |
| +#jtag scan chain |
| +if { [info exists CPUTAPID] } { |
| + set _CPUTAPID $CPUTAPID |
| +} else { |
| + if { [using_jtag] } { |
| + set _CPUTAPID 0x6ba00477 |
| + } { |
| + set _CPUTAPID 0x6ba02477 |
| + } |
| +} |
| + |
| +swj_newdap $_CHIPNAME cpu -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id $_CPUTAPID |
| + |
| +if { [info exists BSTAPID] } { |
| + set _BSTAPID1 $BSTAPID |
| +} else { |
| + # See STM Document RM0399 |
| + # Section 40.6.1 |
| + # STM32H74xxI |
| + set _BSTAPID1 0x06450041 |
| +} |
| + |
| +if {[using_jtag]} { |
| + swj_newdap $_CHIPNAME bs -irlen 5 -expected-id $_BSTAPID1 |
| +} |
| + |
| +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 |
| + |
| +set _FLASHNAME $_CHIPNAME.flash |
| +flash bank $_FLASHNAME stm32h7x 0x08000000 0 0 0 $_TARGETNAME |
| + |
| +# check for second flash bank |
| +if { [regexp -nocase {stm32h74..i..|stm32h75..i..} $_CHIPNAME] } { |
| + # STM32H7xxxI 2Mo have a dual bank flash. |
| + # Add the second flash bank. |
| + set _FLASHNAME $_CHIPNAME.flash1 |
| + flash bank $_FLASHNAME stm32h7x 0x08100000 0 0 0 $_TARGETNAME |
| +} |
| + |
| + |
| +# Clock after reset is HSI at 64 MHz, no need of PLL |
| +if { [info exists CLOCK_FREQ] } { |
| + set _CLOCK_FREQ $CLOCK_FREQ |
| +} else { |
| + set _CLOCK_FREQ 1800 |
| +} |
| +adapter_khz 1800 |
| + |
| + |
| +adapter_nsrst_delay 100 |
| +if {[using_jtag]} { |
| + jtag_ntrst_delay 100 |
| +} |
| + |
| +if {![using_hla]} { |
| + # if srst is not fitted use SYSRESETREQ to |
| + # perform a soft reset |
| + cortex_m reset_config sysresetreq |
| +} |
| + |
| +$_TARGETNAME configure -event trace-config { |
| + # Set TRACE_CLKEN; TRACE_MODE is set to async; when using sync |
| + # change this value accordingly to configure trace pins |
| + # assignment |
| + mmw 0x5C001004 0x00100000 0 |
| +} |
| + |
| +$_TARGETNAME configure -event reset-init { |
| +global ENABLE_LOW_POWER |
| +global STOP_WATCHDOG |
| +global _CLOCK_FREQ |
| + |
| + # Not done in target examine-end because device can be under reset and we get comm errors |
| + |
| + # Enable D3 and D1 DBG clocks |
| + # DBGMCU_CR |= DBG_CKEN_D3 | DBG_CKEN_D1 |
| + mmw 0x5C001004 0x00600000 0 |
| + |
| + if { [expr ($ENABLE_LOW_POWER == 1)] } { |
| + # Enable debug during low power modes (uses more power) |
| + # DBGMCU_CR |= DBG_STANDBY | DBG_STOP | DBG_SLEEP in D3, D2 & D1 Domains |
| + mmw 0x5C001004 0x000001BF 0 |
| + } |
| + if { [expr ($ENABLE_LOW_POWER == 0)] } { |
| + # Disable debug during low power modes |
| + # DBGMCU_CR |= ~(DBG_STANDBY | DBG_STOP | DBG_SLEEP) |
| + mmw 0x5C001004 0 0x000001BF |
| + } |
| + if { [expr ($STOP_WATCHDOG == 1)] } { |
| + # Stop watchdog counters during halt |
| + # DBGMCU_D1APB1_FZ |= DBG_WWDG1_STOP |
| + mmw 0x5C001034 0x00000040 0 |
| + # DBGMCU_D2APB1_FZ |= DBG_WWDG2_STOP |
| + mmw 0x5C00103C 0x00000800 0 |
| + # DBGMCU_D3APB1_FZ |= DBG_WDGLSD2_STOP | DBG_WDGLSD1_STOP |
| + mmw 0x5C001054 0x000C0000 0 |
| + } |
| + if { [expr ($STOP_WATCHDOG == 0)] } { |
| + # Don't stop watchdog counters during halt |
| + # DBGMCU_D1APB1_FZ |= ~DBG_WWDG1_STOP |
| + mmw 0x5C001034 0 0x00000040 |
| + # DBGMCU_D2APB1_FZ |= ~DBG_WWDG2_STOP |
| + mmw 0x5C00103C 0 0x00000800 |
| + # DBGMCU_D3APB1_FZ |= ~(DBG_WDGLSD2_STOP | DBG_WDGLSD1_STOP) |
| + mmw 0x5C001054 0 0x000C0000 |
| + } |
| + if { [expr ($ENABLE_LOW_POWER == 0)] && [expr ($STOP_WATCHDOG == 0)] } { |
| + # Disable D3 and D1 DBG clocks |
| + # DBGMCU_CR |= ~(DBG_CKEN_D3 | DBG_CKEN_D1) |
| + mmw 0x5C001004 0 0x00600000 |
| + } |
| + |
| + # Clock after reset is HSI at 64 MHz, no need of PLL |
| + adapter_khz $_CLOCK_FREQ |
| +} |
| + |
| +$_TARGETNAME configure -event gdb-attach { |
| +global CONNECT_UNDER_RESET |
| + |
| + # Needed to be able to use the connect_assert_srst in reset_config |
| + # otherwise, can't read device flash size register |
| + if { [expr ($CONNECT_UNDER_RESET == 1)] } { |
| + reset init |
| + } |
| +} |
| -- |
| 2.14.1.821.g8fa685d3b7-goog |
| |