2
0
mirror of git://git.code.sf.net/p/openocd/code synced 2025-07-19 01:43:05 +10:00
openocd/tcl/target/ti-cjtag.cfg
Lorenz Brun 63f4e7c72a target/ti-cjtag: make switching to JTAG more reliable
The current cJTAG to JTAG switching commands for TI chips are not
particularly reliable, especially on chips with accurate timing.
On a Raspberry Pi the existing sequence has (depending on cabling and
chip) a ~50% chance of working, on a much better-behaved FT2232H
it doesn't manage to enable full JTAG at all.

This change runs a bunch of test-idle cycles before actually attempting
to switch to full JTAG. This makes the switch reliable even at high
clock speeds (>100kHz) and from precise sources like the FT2232H.

Change-Id: I9293e884bf3e9606d529756ae4483b844d3c39db
Reported-by: Phil Wiggum <p1mail2015@mail.com>
Fixes: https://sourceforge.net/p/openocd/tickets/375/
Signed-off-by: Lorenz Brun <lorenz@brun.one>
Reviewed-on: https://review.openocd.org/c/openocd/+/7419
Tested-by: jenkins
Reviewed-by: Antonio Borneo <borneo.antonio@gmail.com>
2023-06-10 17:11:46 +00:00

36 lines
1.4 KiB
INI

# SPDX-License-Identifier: GPL-2.0-or-later
# A start sequence to change from cJTAG to 4-pin JTAG
# This is needed for CC2538 and CC26xx to be able to communicate through JTAG
# Read section 6.3 in http://www.ti.com/lit/pdf/swru319 for more information.
proc ti_cjtag_to_4pin_jtag {jrc} {
# Bypass
runtest 20
irscan $jrc 0x3f -endstate RUN/IDLE
# Two zero bit scans and a one bit drshift
pathmove RUN/IDLE DRSELECT DRCAPTURE DREXIT1 DRPAUSE
pathmove DRPAUSE DREXIT2 DRUPDATE RUN/IDLE
pathmove RUN/IDLE DRSELECT DRCAPTURE DREXIT1 DRPAUSE
pathmove DRPAUSE DREXIT2 DRUPDATE RUN/IDLE
pathmove RUN/IDLE DRSELECT DRCAPTURE DREXIT1 DRPAUSE
pathmove DRPAUSE DREXIT2 DRSHIFT DREXIT1 DRUPDATE RUN/IDLE
pathmove RUN/IDLE DRSELECT DRCAPTURE DREXIT1 DRPAUSE
# A two bit drhift and a 9 bit drshift
pathmove DRPAUSE DREXIT2 DRSHIFT DRSHIFT DREXIT1 DRUPDATE RUN/IDLE
pathmove RUN/IDLE DRSELECT DRCAPTURE DREXIT1 DRPAUSE
pathmove DRPAUSE DREXIT2 DRSHIFT DRSHIFT DREXIT1 DRPAUSE
pathmove DRPAUSE DREXIT2 DRSHIFT DRSHIFT DREXIT1 DRPAUSE
pathmove DRPAUSE DREXIT2 DRSHIFT DRSHIFT DREXIT1 DRPAUSE
pathmove DRPAUSE DREXIT2 DRSHIFT DRSHIFT DREXIT1 DRPAUSE
pathmove DRPAUSE DREXIT2 DRSHIFT DREXIT1 DRPAUSE
pathmove DRPAUSE DREXIT2 DRUPDATE RUN/IDLE
pathmove RUN/IDLE DRSELECT DRCAPTURE DREXIT1 DRPAUSE
# Bypass
irscan $jrc 0x3f -endstate RUN/IDLE
# Set ICEPick IDCODE in data register
irscan $jrc 0x04 -endstate RUN/IDLE
}