mirror of
git://git.code.sf.net/p/openocd/code
synced 2025-07-19 01:43:05 +10:00
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>
36 lines
1.4 KiB
INI
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
|
|
}
|