From 1003bc7be7c471d28794280be69632c5f074789f Mon Sep 17 00:00:00 2001 From: Patrick Stewart Date: Wed, 27 Aug 2014 17:17:27 +0100 Subject: 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 Signed-off-by: Roger Lendenmann Reviewed-on: http://openocd.zylin.com/2274 Reviewed-by: Andreas Fritiofson Tested-by: jenkins --- src/jtag/drivers/ftdi.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) (limited to 'src/jtag/drivers') diff --git a/src/jtag/drivers/ftdi.c b/src/jtag/drivers/ftdi.c index 32876bac..e69707e5 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); + } + } } /** -- cgit v1.2.3-18-g5258