This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

RM46L852: openOCD issue with launchpad

Part Number: RM46L852
Other Parts Discussed in Thread: TMS570LS3137, TMS570LS1227

I rewrited openocd config for launchxl-rm46 board, because config in repo is invalid.

adapter_khz 1500
source [find interface/cmsis-dap.cfg]
#source [find interface/xds110.cfg]
transport select jtag

set CHIPNAME rm46
set DAP_TAPID 0x2B95502F
set JRC_TAPID 0x2B95502F

adapter_khz 1500

if { [info exists CHIPNAME] } {
	set _CHIPNAME $CHIPNAME
} else {
	set _CHIPNAME tms570
}

if { [info exists ENDIAN] } {
	set _ENDIAN $ENDIAN
} else {
	set _ENDIAN big
}

# TMS570 has an ICEpick-C on which we need the router commands.
source [find target/icepick.cfg]

# Main DAP
# DAP_TAPID should be set before source-ing this file
if { [info exists DAP_TAPID] } {
	set _DAP_TAPID $DAP_TAPID
}

jtag newtap $_CHIPNAME cpu -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id $_DAP_TAPID -disable
jtag configure $_CHIPNAME.cpu -event tap-enable "icepick_c_tapenable $_CHIPNAME.jrc 0"

# ICEpick-C (JTAG route controller)
# JRC_TAPID should be set before source-ing this file
if { [info exists JRC_TAPID] } {
	set _JRC_TAPID $JRC_TAPID
}

set _JRC_TAPID2 0x0B7B302F
set _JRC_TAPID3 0x0B95502F
set _JRC_TAPID4 0x0B97102F
set _JRC_TAPID5 0x0D8A002F
set _JRC_TAPID6 0x2B8A002F
set _JRC_TAPID7 0x2D8A002F
set _JRC_TAPID8 0x3B8A002F
set _JRC_TAPID9 0x3D8A002F


jtag newtap $_CHIPNAME jrc -irlen 6 -ircapture 0x1 -irmask 0x3f \
	-expected-id $_JRC_TAPID \
	-expected-id $_JRC_TAPID2 \
	-expected-id $_JRC_TAPID3 \
	-expected-id $_JRC_TAPID4 \
	-expected-id $_JRC_TAPID5 \
	-expected-id $_JRC_TAPID6 \
	-expected-id $_JRC_TAPID7 \
	-expected-id $_JRC_TAPID8 \
	-expected-id $_JRC_TAPID9 \
	-ignore-version
jtag configure $_CHIPNAME.jrc -event setup "jtag tapenable $_CHIPNAME.cpu"
jtag configure $_CHIPNAME.jrc -event post-reset "runtest 100"

# Cortex-R4 target
set _TARGETNAME $_CHIPNAME.cpu

dap create $_CHIPNAME.dap -chain-position $_CHIPNAME.cpu

target create $_TARGETNAME cortex_r4 -endian $_ENDIAN \
	-dap $_CHIPNAME.dap -coreid 0 -dbgbase 0x00001003

# TMS570 uses quirky BE-32 mode
#$_TARGETNAME dap ti_be_32_quirks 1


gdb_breakpoint_override hard

$_TARGETNAME configure -event gdb-attach {
	cortex_r4 dbginit
	reset halt
    wait_halt
    $_CHIPNAME.cpu arp_halt
    wait_halt
}

$_TARGETNAME configure -event "reset-assert" {
	global _CHIPNAME

	# assert warm system reset through ICEPick
	icepick_c_wreset $_CHIPNAME.jrc
}

openocd run correctly, but when i try to make target halt i see 

Error: Timeout waiting for halt

when i try reset halt i see

Info : JTAG tap: rm46.jrc tap/device found: 0x2b95502f (mfg: 0x017 (Texas Instruments), part: 0xb955, ver: 0x2)
Info : JTAG tap: rm46.cpu enabled
Warn : rm46.cpu: ran after reset and before halt ...
Error: Timeout waiting for halt
in procedure 'reset'
in procedure 'ocd_bouncer'

may be i have mistake?

  • Hi,

    I was trying to make OpenOCD work on my RM46 Launchpad and I set the TAP ID similarly but also setting the endianess to little. I could not make GDB halt the device (just like you), even with a blank flash (to avoid any problems with pre-existing code running on the target).

    I will try to test additional scenarios and report back my findings, but unfortunately we don't support OpenOCD directly, therefore our actions are very limited in this regard. Sorry.

    Regards,
    Rafael
  • I made halt with config modifying , but now i cannot flash , as i know openocd support Flash021 API, may be i need set banks addresses such as in different configs?

    i have changed target create to 

    target create $_TARGETNAME cortex_r4 -endian little -dap $_CHIPNAME.dap -coreid 0

    also i see strange current mode in log

    target halted in ARM state due to debug-request, current mode: Undefined instruction
    cpsr: 0x000001db pc: 0x00000004
    Info : rm46.cpu rev 3, partnum c14, arch f, variant 1, implementor 41
    D-Cache: disabled, I-Cache: disabled

  • i use openocd from sources, i you have patches i can apply this
  • Alexander,

    I am trying to make openocd work with the tms570ls3137 and the tms570ls1227.

    Alexander Bulychev55 said:
    as i know openocd support Flash021 API

    Where did you read that openocd supports the Flash021 API? Because I've been looking for it, and I didn't find anything.

  • Alexander,

    Thanks for sending the new target create line; I was able to add it here and now the target is halted at connect. Reset, however, is still full of problems (it tends to crash OpenOCD when called multiple times).

    Regarding the current mode: if your device is blank, that is expected. The Flash at this address will contain all ones (0xFFFFFFFF), which is an invalid instruction and therefore the device triggers an exception.  I have flashed code to the device and it can be debug well, as long as a reset is not issued.

    The files I am using follow attached.

    There is some mention of Flash021 API support at the discussion below:

    https://forum.43oh.com/topic/7333-openocd-support-for-hercules-launchpads/ 

    Again, unfortunately I don't have much knowledge about the device's internal JTAG ipecifications and addresses, therefore my ability to support this effort is limited. 

    Hope this helps,

    Rafael

    scripts.zip