diff --git a/src/jtag/drivers/ft2232.c b/src/jtag/drivers/ft2232.c index 881d7c772..73aea01f6 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 000000000..ecefd2fe3 --- /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