Hello!
I’m trying to get Olimex ARM-USB-TINYH working with a custom STM32 based board. The main problem is very slow flash programming speed (fastest i’ve got is 0,323838 KB/s). Previously we used Olimex ARM-JTAG-EW and with it got flash programming speeds around 11-12 KB/s.
Any ideas?
I’m using precompiled Windows OpenOCD that come in CD with Olimex ARM-USB-TINYH.
Flash programming is done with the following commands:
openocd -d2 -f “scripts/interface/olimex-arm-usb-tiny-h.cfg” -f “scripts/target/stm32.cfg” -c init -c halt -c targets -c “flash write_image erase image.elf” -c “verify_image image.elf” -c “reset run” -c shutdown
I have following configuration files:
olimex-arm-usb-tiny-h.cfg:
interface ft2232
ft2232_device_desc "Olimex OpenOCD JTAG ARM-USB-TINY-H"
ft2232_layout olimex-jtag
ft2232_vid_pid 0x15ba 0x002a
stm32.cfg (little-bit modified from original):
# script for stm32
if { [info exists CHIPNAME] } {
set _CHIPNAME $CHIPNAME
} else {
set _CHIPNAME stm32
}
if { [info exists ENDIAN] } {
set _ENDIAN $ENDIAN
} else {
set _ENDIAN little
}
# Work-area is a space in RAM used for flash programming
# By default use 16kB
if { [info exists WORKAREASIZE] } {
set _WORKAREASIZE $WORKAREASIZE
} else {
# set _WORKAREASIZE 0x4000
set _WORKAREASIZE 0x8000
}
# JTAG speed should be <= F_CPU/6. F_CPU after reset is 8MHz, so use F_JTAG = 1MHz
jtag_khz 500
#jtag_khz 100000
#jtag_speed 6
jtag_nsrst_delay 100
jtag_ntrst_delay 100
#use combined on interfaces or targets that can't set TRST/SRST separately
#reset_config trst_and_srst
reset_config trst_and_srst separate trst_push_pull srst_open_drain
#jtag scan chain
if { [info exists CPUTAPID ] } {
set _CPUTAPID $CPUTAPID
} else {
# See STM Document RM0008
# Section 26.6.3
set _CPUTAPID 0x3ba00477
}
jtag newtap $_CHIPNAME cpu -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id $_CPUTAPID
if { [info exists BSTAPID ] } {
# FIXME this never gets used to override defaults...
set _BSTAPID $BSTAPID
} else {
# See STM Document RM0008
# Section 29.6.2
# Low density devices, Rev A
set _BSTAPID1 0x06412041
# Medium density devices, Rev A
set _BSTAPID2 0x06410041
# Medium density devices, Rev B and Rev Z
set _BSTAPID3 0x16410041
# High density devices, Rev A
set _BSTAPID4 0x06414041
# Connectivity line devices, Rev A and Rev Z
set _BSTAPID5 0x06418041
}
jtag newtap $_CHIPNAME bs -irlen 5 -expected-id $_BSTAPID1 \
-expected-id $_BSTAPID2 -expected-id $_BSTAPID3 \
-expected-id $_BSTAPID4 -expected-id $_BSTAPID5
set _TARGETNAME $_CHIPNAME.cpu
target create $_TARGETNAME cortex_m3 -endian $_ENDIAN -chain-position $_TARGETNAME
$_TARGETNAME configure -work-area-virt 0 -work-area-phys 0x20000000 -work-area-size $_WORKAREASIZE -work-area-backup 0
flash bank stm32x 0 0 0 0 $_TARGETNAME
# For more information about the configuration files, take a look at:
# openocd.texi
I’ve tried various jtag_khz values, but if I set it higher than 500, OpenOCD outputs “Error: SWJ-DP OVERRUN - check clock or reduce jtag speed” messages. “reset_config” parameter is taken from old configuraton file used with ARM-JTAG-EW.
Also, at the begining OpenOCD outputs following messages:
Error: AHBAP Cached values: dp_select 0x0, ap_csw 0xa2000012, ap_tar 0xffffffff
Error: SWJ-DP STICKY ERROR
Error: Read MEM_AP_CSW 0x23000052, MEM_AP_TAR 0x4
Error: AHBAP Cached values: dp_select 0x0, ap_csw 0xa2000012, ap_tar 0xffffffff
Error: SWJ-DP STICKY ERROR
Error: Read MEM_AP_CSW 0x23000052, MEM_AP_TAR 0x4
Don’t know what this means actually, but OpenOCD can write image successfully.