#endif
/* project specific includes */
+#define INCLUDE_JTAG_INTERFACE_H
#include "jtag.h"
#include "time_support.h"
static int axm0432_jtag_init(void);
static int sheevaplug_init(void);
static int icebear_jtag_init(void);
+static int cortino_jtag_init(void);
/* reset procedures for supported layouts */
static void usbjtag_reset(int trst, int srst);
{ "comstick", comstick_init, comstick_reset, NULL },
{ "stm32stick", stm32stick_init, stm32stick_reset, NULL },
{ "axm0432_jtag", axm0432_jtag_init, axm0432_jtag_reset, NULL },
- {"sheevaplug", sheevaplug_init, sheevaplug_reset, NULL },
+ { "sheevaplug", sheevaplug_init, sheevaplug_reset, NULL },
{ "icebear", icebear_jtag_init, icebear_jtag_reset, NULL },
+ { "cortino", cortino_jtag_init, comstick_reset, NULL },
{ NULL, NULL, NULL, NULL },
};
{
if (khz==0)
{
- LOG_ERROR("RCLK not supported");
+ LOG_DEBUG("RTCK not supported");
return ERROR_FAIL;
}
}
}
-
static void ft2232_read_scan(enum scan_type type, u8* buffer, int scan_size)
{
int num_bytes = (scan_size + 7) / 8;
LOG_DEBUG("trst: %i, srst: %i, high_output: 0x%2.2x, high_direction: 0x%2.2x", trst, srst, high_output, high_direction);
}
-static int ft2232_execute_end_state(jtag_command_t *cmd)
-{
- int retval;
- retval = ERROR_OK;
-
- DEBUG_JTAG_IO("execute_end_state: %s", tap_state_name(cmd->cmd.end_state->end_state) );
-
- if (cmd->cmd.end_state->end_state != TAP_INVALID)
- ft2232_end_state(cmd->cmd.end_state->end_state);
-
- return retval;
-}
-
-
static int ft2232_execute_runtest(jtag_command_t *cmd)
{
int retval;
if (tap_get_state() != TAP_IDLE)
predicted_size += 3;
predicted_size += 3 * CEIL(cmd->cmd.runtest->num_cycles, 7);
- if ( (cmd->cmd.runtest->end_state != TAP_INVALID) && (cmd->cmd.runtest->end_state != TAP_IDLE) )
+ if ( cmd->cmd.runtest->end_state != TAP_IDLE)
predicted_size += 3;
- if ( (cmd->cmd.runtest->end_state == TAP_INVALID) && (tap_get_end_state() != TAP_IDLE) )
+ if ( tap_get_end_state() != TAP_IDLE)
predicted_size += 3;
if (ft2232_buffer_size + predicted_size + 1 > FT2232_BUFFER_SIZE)
{
/* LOG_DEBUG("added TMS scan (no read)"); */
}
- if (cmd->cmd.runtest->end_state != TAP_INVALID)
- ft2232_end_state(cmd->cmd.runtest->end_state);
+ ft2232_end_state(cmd->cmd.runtest->end_state);
if ( tap_get_state() != tap_get_end_state() )
{
require_send = 0;
first_unsent = cmd;
}
- if (cmd->cmd.statemove->end_state != TAP_INVALID)
- ft2232_end_state(cmd->cmd.statemove->end_state);
+ ft2232_end_state(cmd->cmd.statemove->end_state);
/* move to end state */
if ( tap_get_state() != tap_get_end_state() )
retval = ERROR_JTAG_QUEUE_FAILED;
/* current command */
- if (cmd->cmd.scan->end_state != TAP_INVALID)
- ft2232_end_state(cmd->cmd.scan->end_state);
+ ft2232_end_state(cmd->cmd.scan->end_state);
ft2232_large_scan(cmd->cmd.scan, type, buffer, scan_size);
require_send = 0;
first_unsent = cmd->next;
}
ft2232_expect_read += ft2232_predict_scan_in(scan_size, type);
/* LOG_DEBUG("new read size: %i", ft2232_expect_read); */
- if (cmd->cmd.scan->end_state != TAP_INVALID)
- ft2232_end_state(cmd->cmd.scan->end_state);
+ ft2232_end_state(cmd->cmd.scan->end_state);
ft2232_add_scan(cmd->cmd.scan->ir_scan, type, buffer, scan_size);
require_send = 1;
if (buffer)
switch (cmd->type)
{
- case JTAG_END_STATE: retval = ft2232_execute_end_state(cmd); break;
case JTAG_RESET: retval = ft2232_execute_reset(cmd); break;
case JTAG_RUNTEST: retval = ft2232_execute_runtest(cmd); break;
case JTAG_STATEMOVE: retval = ft2232_execute_statemove(cmd); break;
return ERROR_OK;
}
+static int cortino_jtag_init(void)
+{
+ u8 buf[3];
+ u32 bytes_written;
+
+ low_output = 0x08;
+ low_direction = 0x1b;
+
+ /* initialize low byte for jtag */
+ buf[0] = 0x80; /* command "set data bits low byte" */
+ buf[1] = low_output; /* value (TMS=1,TCK=0, TDI=0, nOE=0) */
+ buf[2] = low_direction; /* dir (output=1), TCK/TDI/TMS=out, TDO=in, nOE=out */
+ LOG_DEBUG("%2.2x %2.2x %2.2x", buf[0], buf[1], buf[2]);
+
+ if ( ( ( ft2232_write(buf, 3, &bytes_written) ) != ERROR_OK ) || (bytes_written != 3) )
+ {
+ LOG_ERROR("couldn't initialize FT2232 with 'cortino' layout");
+ return ERROR_JTAG_INIT_FAILED;
+ }
+
+ nTRST = 0x01;
+ nTRSTnOE = 0x00; /* no output enable for nTRST */
+ nSRST = 0x02;
+ nSRSTnOE = 0x00; /* no output enable for nSRST */
+
+ high_output = 0x03;
+ high_direction = 0x03;
+
+ /* initialize high port */
+ buf[0] = 0x82; /* command "set data bits high byte" */
+ buf[1] = high_output;
+ buf[2] = high_direction;
+ LOG_DEBUG("%2.2x %2.2x %2.2x", buf[0], buf[1], buf[2]);
+
+ if ( ( ( ft2232_write(buf, 3, &bytes_written) ) != ERROR_OK ) || (bytes_written != 3) )
+ {
+ LOG_ERROR("couldn't initialize FT2232 with 'stm32stick' layout");
+ return ERROR_JTAG_INIT_FAILED;
+ }
+
+ return ERROR_OK;
+}
+
static void olimex_jtag_blink(void)
{
/* Olimex ARM-USB-OCD has a LED connected to ACBUS3