aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPatrick Stewart <patstew@gmail.com>2014-08-27 17:17:27 +0100
committerPaul Fertser <fercerpav@gmail.com>2018-01-13 11:37:13 +0000
commit1003bc7be7c471d28794280be69632c5f074789f (patch)
treed0a1fcb0e107eceda5fdbb77d420d30d95705550
parentab25205bbfaa73b33d3510086c44cfe06c1ca006 (diff)
downloadriscv-openocd-1003bc7be7c471d28794280be69632c5f074789f.zip
riscv-openocd-1003bc7be7c471d28794280be69632c5f074789f.tar.gz
riscv-openocd-1003bc7be7c471d28794280be69632c5f074789f.tar.bz2
ftdi swd: disable SWD output pin during input
* Disables the data output pin while SWD is reading, so that a simple FTDI SWD interface can be made by connecting TCK to SWD_CLK and TDI+TDO directly to SWDIO. Enabled by setting SWDIO_OE to 0. Change-Id: I7d3b71cf3f4eea163cb320aff69ed95d219190bd Signed-off-by: Patrick Stewart <patstew@gmail.com> Signed-off-by: Roger Lendenmann <roger.lendenmann@intel.com> Reviewed-on: http://openocd.zylin.com/2274 Reviewed-by: Andreas Fritiofson <andreas.fritiofson@gmail.com> Tested-by: jenkins
-rw-r--r--src/jtag/drivers/ftdi.c15
-rw-r--r--tcl/board/nordic_nrf52_ftx232.cfg11
-rw-r--r--tcl/interface/ftdi/ft232h-module-swd.cfg52
-rw-r--r--tcl/interface/ftdi/minimodule-swd.cfg54
4 files changed, 130 insertions, 2 deletions
diff --git a/src/jtag/drivers/ftdi.c b/src/jtag/drivers/ftdi.c
index 32876ba..e69707e 100644
--- a/src/jtag/drivers/ftdi.c
+++ b/src/jtag/drivers/ftdi.c
@@ -1064,8 +1064,19 @@ static int ftdi_swd_init(void)
static void ftdi_swd_swdio_en(bool enable)
{
struct signal *oe = find_signal_by_name("SWDIO_OE");
- if (oe)
- ftdi_set_signal(oe, enable ? '1' : '0');
+ if (oe) {
+ if (oe->data_mask)
+ ftdi_set_signal(oe, enable ? '1' : '0');
+ else {
+ /* Sets TDI/DO pin (pin 2) to input during rx when both pins are connected
+ to SWDIO */
+ if (enable)
+ direction |= jtag_direction_init & 0x0002U;
+ else
+ direction &= ~0x0002U;
+ mpsse_set_data_bits_low_byte(mpsse_ctx, output & 0xff, direction & 0xff);
+ }
+ }
}
/**
diff --git a/tcl/board/nordic_nrf52_ftx232.cfg b/tcl/board/nordic_nrf52_ftx232.cfg
new file mode 100644
index 0000000..938efed
--- /dev/null
+++ b/tcl/board/nordic_nrf52_ftx232.cfg
@@ -0,0 +1,11 @@
+#
+# nordic module NRF52 (nRF52832/52840) attached to an adafruit ft232h module
+# or any FT232H/FT2232H/FT4232H based board/module
+#
+
+source [find interface/ftdi/ft232h-module-swd.cfg]
+#source [find interface/ftdi/minimodule-swd.cfg]
+
+transport select swd
+
+source [find target/nrf52.cfg]
diff --git a/tcl/interface/ftdi/ft232h-module-swd.cfg b/tcl/interface/ftdi/ft232h-module-swd.cfg
new file mode 100644
index 0000000..d2bd1da
--- /dev/null
+++ b/tcl/interface/ftdi/ft232h-module-swd.cfg
@@ -0,0 +1,52 @@
+#
+# ADAFRUIT FTDI FT232H as a SWD direct connect interface
+# Any FT232H based board may work
+#
+# http://www.ftdichip.com/Products/ICs/FT232H.htm
+#
+#
+
+interface ftdi
+
+ftdi_vid_pid 0x0403 0x6014
+
+# data MSB..LSB direction (1:out) MSB..LSB
+# 0000'0000'0011'0000 0000'0000'0011'1011
+ftdi_layout_init 0x0030 0x003b
+# 0xfff8 0xfffb
+# Those signal are only required on some platforms or may required to be
+# enabled explicitely (e.g. nrf5x chips).
+ftdi_layout_signal nSRST -data 0x0010 -oe 0x0010
+ftdi_layout_signal nTRST -data 0x0020 -oe 0x0020
+
+# swd enable
+ftdi_layout_signal SWD_EN -data 0
+# tri-state (configure as input) TDO/TIO when reading
+ftdi_layout_signal SWDIO_OE -data 0
+
+transport select swd
+
+# re-configure TDO as tri-state
+#ftdi_layout_signal TDO -data 0x0002 -oe 0x0002
+#ftdi_layout_signal TDI -data 0x0004
+
+# Adafruit FT232H JTAG SWD
+# Name Pin Name Func Func
+# D0 J1-3 ADBUS0 TCK SWDCLK
+# D1 J1-4 ADBUS1 TDO/DI SWDIO
+# D2 J1-5 ADBUS2 TDI/DO SWDIO
+# D3 J1-6 ADBUS3 TMS N/A
+# D4 J1-7 ADBUS4 (GPIOL0) /nSRST optional module reset
+# D5 J1-8 ADBUS5 (GPIOL1) /nTRST optional target reset
+# D6 J1-9 ADBUS6 (GPIOL2)
+# D7 J1-10 ADBUS7 (GPIOL3)
+# C0 J2-1 ACBUS0 (GPIOH0)
+# C1 J2-2 ACBUS1 (GPIOH1)
+# C2 J2-3 ACBUS2 (GPIOH2)
+# C3 J2-4 ACBUS3 (GPIOH3)
+# C4 J2-5 ACBUS4 (GPIOH4)
+# C5 J2-6 ACBUS5 (GPIOH5)
+# C6 J2-7 ACBUS6 (GPIOH6)
+# C7 J2-8 ACBUS7 (GPIOH7)
+# C8 J2-9 ACBUS8
+# C9 J2-10 ACBUS9
diff --git a/tcl/interface/ftdi/minimodule-swd.cfg b/tcl/interface/ftdi/minimodule-swd.cfg
new file mode 100644
index 0000000..5f0b212
--- /dev/null
+++ b/tcl/interface/ftdi/minimodule-swd.cfg
@@ -0,0 +1,54 @@
+#
+Supports SWD using the FT2232H or FT4232H minimodule.
+# Each can support 2 SWD interfaces.
+#
+# FT2232H or FT4232H minimodule channel 0 (Channel A)
+# Connector FTDI Target
+# Pin Name
+# --------- ------ ------
+# CN2-11 VIO VDD_IO (Or connect to CN2-5 on the minimodule instead for a 3V3 interface)
+# CN2-2 GND GND
+# CN2-7 ADBUS0 (TCK) SWCLK
+# CN2-9 ADBUS2 (TDI/TDO) SWDIO
+# CN2-10 ADBUS1 (TDO/TDI) SWDIO
+# CN2-14 ADBUS4 (GPIOL0) nRESET
+#
+# FT2232H minimodule channel 1 (Channel B)
+# FTDI Target
+# ---- ------
+# CN2-11 - VDD_IO
+# CN2-2 - GND
+# CN3-26 - SWCLK
+# CN3-25 - SWDIO
+# CN3-24 - SWDIO
+# CN3-21 - nRESET
+#
+# FT4232H minimodule channel 1 (Channel B)
+# FTDI Target
+# ---- ------
+# CN2-11 - VDD_IO
+# CN2-2 - GND
+# CN2-18 - SWCLK
+# CN2-17 - SWDIO
+# CN2-20 - SWDIO
+# CN2-22 - nRESET
+#
+
+interface ftdi
+
+#Select your module type and channel
+
+#ftdi_device_desc "FT2232H MiniModule"
+ftdi_vid_pid 0x0403 0x6010
+#ftdi_channel 1
+
+#ftdi_device_desc "FT4232H MiniModule"
+#ftdi_vid_pid 0x0403 0x6011
+#ftdi_channel 1
+
+ftdi_layout_init 0x0000 0x000b
+ftdi_layout_signal nSRST -data 0x0010 -oe 0x0010
+ftdi_layout_signal SWD_EN -data 0
+ftdi_layout_signal SWDIO_OE -data 0
+
+transport select swd