aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarek Vasut <marek.vasut@gmail.com>2011-11-11 23:38:36 +0100
committerSpencer Oliver <spen@spen-soft.co.uk>2011-11-15 20:55:11 +0000
commitffe969898fae4e2beeeea403d411bf221d1fab79 (patch)
tree37664fb6ab838e9c9cf4a7dbd1b881a7f5816bf2
parent67c3ad8c403ec552cff6a499f8834f369f928c4f (diff)
Add Tincantools Flyswatter2 support
This is a successor to the Flyswatter cable and is very close to the original. The new revision is based on FT2232H. Change-Id: Icc6efcf0e4f9d8a10b65df8679b4973f6b375a9f Signed-off-by: Marek Vasut <marek.vasut@gmail.com> Cc: David Anders <danders@tincantools.com> Reviewed-on: http://openocd.zylin.com/193 Tested-by: jenkins Reviewed-by: Spencer Oliver <spen@spen-soft.co.uk>
-rw-r--r--src/jtag/drivers/ft2232.c79
-rw-r--r--tcl/interface/flyswatter2.cfg10
2 files changed, 75 insertions, 14 deletions
diff --git a/src/jtag/drivers/ft2232.c b/src/jtag/drivers/ft2232.c
index 881d7c77..73aea01f 100644
--- a/src/jtag/drivers/ft2232.c
+++ b/src/jtag/drivers/ft2232.c
@@ -177,7 +177,8 @@ static int jtagkey_init(void);
static int lm3s811_jtag_init(void);
static int icdi_jtag_init(void);
static int olimex_jtag_init(void);
-static int flyswatter_init(void);
+static int flyswatter1_init(void);
+static int flyswatter2_init(void);
static int minimodule_init(void);
static int turtle_init(void);
static int comstick_init(void);
@@ -198,7 +199,8 @@ static int xds100v2_init(void);
static void ftx23_reset(int trst, int srst);
static void jtagkey_reset(int trst, int srst);
static void olimex_jtag_reset(int trst, int srst);
-static void flyswatter_reset(int trst, int srst);
+static void flyswatter1_reset(int trst, int srst);
+static void flyswatter2_reset(int trst, int srst);
static void minimodule_reset(int trst, int srst);
static void turtle_reset(int trst, int srst);
static void comstick_reset(int trst, int srst);
@@ -213,7 +215,8 @@ static void xds100v2_reset(int trst, int srst);
/* blink procedures for layouts that support a blinking led */
static void olimex_jtag_blink(void);
-static void flyswatter_jtag_blink(void);
+static void flyswatter1_jtag_blink(void);
+static void flyswatter2_jtag_blink(void);
static void turtle_jtag_blink(void);
static void signalyzer_h_blink(void);
static void ktlink_blink(void);
@@ -260,9 +263,14 @@ static const struct ft2232_layout ft2232_layouts[] =
.blink = olimex_jtag_blink
},
{ .name = "flyswatter",
- .init = flyswatter_init,
- .reset = flyswatter_reset,
- .blink = flyswatter_jtag_blink
+ .init = flyswatter1_init,
+ .reset = flyswatter1_reset,
+ .blink = flyswatter1_jtag_blink
+ },
+ { .name = "flyswatter2",
+ .init = flyswatter2_init,
+ .reset = flyswatter2_reset,
+ .blink = flyswatter2_jtag_blink
},
{ .name = "minimodule",
.init = minimodule_init,
@@ -1571,6 +1579,16 @@ static void flyswatter_reset(int trst, int srst)
LOG_DEBUG("trst: %i, srst: %i, low_output: 0x%2.2x, low_direction: 0x%2.2x", trst, srst, low_output, low_direction);
}
+static void flyswatter1_reset(int trst, int srst)
+{
+ flyswatter_reset(trst, srst);
+}
+
+static void flyswatter2_reset(int trst, int srst)
+{
+ flyswatter_reset(trst, !srst);
+}
+
static void minimodule_reset(int trst, int srst)
{
if (srst == 1)
@@ -2911,10 +2929,18 @@ static int olimex_jtag_init(void)
return ERROR_OK;
}
-static int flyswatter_init(void)
+static int flyswatter_init(int rev)
{
low_output = 0x18;
- low_direction = 0xfb;
+ low_direction = 0x7b;
+
+ if ((rev < 0) || (rev > 3)) {
+ LOG_ERROR("bogus 'flyswatter' revision supplied (%i)", rev);
+ return ERROR_JTAG_INIT_FAILED;
+ }
+
+ if (rev == 1)
+ low_direction |= 1 << 7;
/* initialize low byte for jtag */
if (ft2232_set_data_bits_low_byte(low_output,low_direction) != ERROR_OK)
@@ -2929,7 +2955,11 @@ static int flyswatter_init(void)
nSRSTnOE = 0x00; /* no output enable for nSRST */
high_output = 0x00;
- high_direction = 0x0c;
+
+ if (rev == 1)
+ high_direction = 0x0c;
+ else
+ high_direction = 0x01;
/* turn red LED3 on, LED2 off */
high_output |= 0x08;
@@ -2944,6 +2974,16 @@ static int flyswatter_init(void)
return ERROR_OK;
}
+static int flyswatter1_init(void)
+{
+ return flyswatter_init(1);
+}
+
+static int flyswatter2_init(void)
+{
+ return flyswatter_init(2);
+}
+
static int minimodule_init(void)
{
low_output = 0x18;//check if srst should be 1 or 0 initially. (0x08) (flyswatter was 0x18)
@@ -3251,16 +3291,27 @@ static void olimex_jtag_blink(void)
buffer_write(high_direction);
}
-static void flyswatter_jtag_blink(void)
+static void flyswatter_jtag_blink(unsigned char led)
+{
+ buffer_write(0x82);
+ buffer_write(high_output ^ led);
+ buffer_write(high_direction);
+}
+
+static void flyswatter1_jtag_blink(void)
{
/*
* Flyswatter has two LEDs connected to ACBUS2 and ACBUS3
*/
- high_output ^= 0x0c;
+ flyswatter_jtag_blink(0xc);
+}
- buffer_write(0x82);
- buffer_write(high_output);
- buffer_write(high_direction);
+static void flyswatter2_jtag_blink(void)
+{
+ /*
+ * Flyswatter2 only has one LED connected to ACBUS2
+ */
+ flyswatter_jtag_blink(0x4);
}
static void turtle_jtag_blink(void)
diff --git a/tcl/interface/flyswatter2.cfg b/tcl/interface/flyswatter2.cfg
new file mode 100644
index 00000000..ecefd2fe
--- /dev/null
+++ b/tcl/interface/flyswatter2.cfg
@@ -0,0 +1,10 @@
+#
+# TinCanTools Flyswatter 2
+#
+# http://www.tincantools.com/product.php?productid=16134
+#
+
+interface ft2232
+ft2232_device_desc "Flyswatter2"
+ft2232_layout "flyswatter2"
+ft2232_vid_pid 0x0403 0x6010