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);
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);
/* 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);
.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,
LOG_DEBUG("thisrun_read: %i, bytes_read: %i",
thisrun_read,
(int)bytes_read);
- receive_pointer += bytes_read;
}
return ERROR_OK;
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)
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)
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;
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)
return ftx232_dbus_write();
}
+/*
+ * The reference schematic from TI for the XDS100v2 has a CPLD on which opens
+ * the door for a number of different configurations
+ *
+ * Known Implementations:
+ * http://processors.wiki.ti.com/images/9/93/TMS570LS20216_USB_STICK_Schematic.pdf
+ *
+ * http://processors.wiki.ti.com/index.php/XDS100 (rev2)
+ * * CLPD logic: Rising edge to enable outputs (XDS100_PWR_RST)
+ * * ACBUS3 to transition 0->1 (OE rising edge)
+ * * CPLD logic: Put the EMU0/1 pins in Hi-Z:
+ * * ADBUS5/GPIOL1 = EMU_EN = 1
+ * * ADBUS6/GPIOL2 = EMU0 = 0
+ * * ACBUS4/SPARE0 = EMU1 = 0
+ * * CPLD logic: Disable loopback
+ * * ACBUS6/SPARE2 = LOOPBACK = 0
+ */
+#define XDS100_nEMU_EN (1<<5)
+#define XDS100_nEMU0 (1<<6)
+
+#define XDS100_PWR_RST (1<<3)
+#define XDS100_nEMU1 (1<<4)
+#define XDS100_LOOPBACK (1<<6)
static int xds100v2_init(void)
{
- low_output = 0x3A;
- low_direction = 0x7B;
+ /* These are in the lower byte */
+ nTRST = 0x10;
+ nTRSTnOE = 0x10;
+
+ /* These aren't actually used on 14 pin connectors */
+ /* These are in the upper byte */
+ nSRST = 0x01;
+ nSRSTnOE = 0x01;
+
+ low_output = 0x08 | nTRST | XDS100_nEMU_EN;
+ low_direction = 0x0b | nTRSTnOE | XDS100_nEMU_EN | XDS100_nEMU0;
- /* initialize low byte for jtag */
if (ft2232_set_data_bits_low_byte(low_output,low_direction) != ERROR_OK)
{
LOG_ERROR("couldn't initialize FT2232 with 'xds100v2' layout");
return ERROR_JTAG_INIT_FAILED;
}
- nTRST = 0x10;
- nTRSTnOE = 0x0; /* not output enable for nTRST */
- nSRST = 0x00; /* TODO: SRST is not supported yet */
- nSRSTnOE = 0x00; /* no output enable for nSRST */
-
- high_output = 0x00;
- high_direction = 0x59;
+ high_output = 0;
+ high_direction = nSRSTnOE | XDS100_LOOPBACK | XDS100_PWR_RST | XDS100_nEMU1;
/* initialize high byte for jtag */
if (ft2232_set_data_bits_high_byte(high_output,high_direction) != ERROR_OK)
{
- LOG_ERROR("couldn't initialize FT2232 with 'xds100v2' layout");
+ LOG_ERROR("couldn't put CPLD in to reset with 'xds100v2' layout");
return ERROR_JTAG_INIT_FAILED;
}
- high_output = 0x86;
- high_direction = 0x59;
+ high_output |= XDS100_PWR_RST;
/* initialize high byte for jtag */
if (ft2232_set_data_bits_high_byte(high_output,high_direction) != ERROR_OK)
{
- LOG_ERROR("couldn't initialize FT2232 with 'xds100v2' layout");
+ LOG_ERROR("couldn't bring CPLD out of reset with 'xds100v2' layout");
return ERROR_JTAG_INIT_FAILED;
}
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)
}
else
{
- LOG_ERROR("expected exactly one argument to ft2232_serial <serial-number>");
+ return ERROR_COMMAND_SYNTAX_ERROR;
}
return ERROR_OK;
COMMAND_HANDLER(ft2232_handle_layout_command)
{
if (CMD_ARGC != 1) {
- LOG_ERROR("Need exactly one argument to ft2232_layout");
- return ERROR_FAIL;
+ return ERROR_COMMAND_SYNTAX_ERROR;
}
if (layout) {
}
else
{
- LOG_ERROR("expected exactly one argument to ft2232_latency <ms>");
+ return ERROR_COMMAND_SYNTAX_ERROR;
}
return ERROR_OK;