#include "config.h"
#endif
+#define INCLUDE_JTAG_INTERFACE_H
#include "jtag.h"
#include <usb.h>
.quit = jlink_quit
};
-static void jlink_execute_end_state(jtag_command_t *cmd)
-{
- DEBUG_JTAG_IO("end_state: %i", cmd->cmd.end_state->end_state);
-
- if (cmd->cmd.end_state->end_state != TAP_INVALID)
- jlink_end_state(cmd->cmd.end_state->end_state);
-}
-
static void jlink_execute_runtest(jtag_command_t *cmd)
{
DEBUG_JTAG_IO("runtest %i cycles, end in %i",
cmd->cmd.runtest->num_cycles,
cmd->cmd.runtest->end_state);
- if (cmd->cmd.runtest->end_state != TAP_INVALID)
- jlink_end_state(cmd->cmd.runtest->end_state);
+ jlink_end_state(cmd->cmd.runtest->end_state);
jlink_runtest(cmd->cmd.runtest->num_cycles);
}
{
DEBUG_JTAG_IO("statemove end in %i", cmd->cmd.statemove->end_state);
- if (cmd->cmd.statemove->end_state != TAP_INVALID)
- {
- jlink_end_state(cmd->cmd.statemove->end_state);
- }
+ jlink_end_state(cmd->cmd.statemove->end_state);
jlink_state_move();
}
DEBUG_JTAG_IO("scan end in %s", tap_state_name(cmd->cmd.scan->end_state));
- if (cmd->cmd.scan->end_state != TAP_INVALID)
- jlink_end_state(cmd->cmd.scan->end_state);
+ jlink_end_state(cmd->cmd.scan->end_state);
scan_size = jtag_build_buffer(cmd->cmd.scan, &buffer);
DEBUG_JTAG_IO("scan input, length = %d", scan_size);
static int jlink_init(void)
{
int check_cnt;
-
+ int i;
+
jlink_jtag_handle = jlink_usb_open();
if (jlink_jtag_handle == 0)
jlink_tap_init();
jlink_speed(jtag_speed);
+ /* v5/6 jlink seems to have an issue if the first tap move
+ * is not divisible by 8, so we send a TLR on first power up */
+ for (i = 0; i < 8; i++) {
+ jlink_tap_append_step(1, 0);
+ }
+ jlink_tap_execute();
+
return ERROR_OK;
}
DEBUG_JTAG_IO("pending scan result, length = %d", length);
#ifdef _DEBUG_USB_COMMS_
- jlink_debug_buffer(buffer, byte_length);
+ jlink_debug_buffer(buffer, TAP_SCAN_BYTES(length));
#endif
if (jtag_read_buffer(buffer, command) != ERROR_OK)