#define JLINK_USB_TIMEOUT 100
-#define JLINK_IN_BUFFER_SIZE 2064
-#define JLINK_OUT_BUFFER_SIZE 2064
+#define JLINK_IN_BUFFER_SIZE 8192
+#define JLINK_OUT_BUFFER_SIZE 8192
#define JLINK_EMU_RESULT_BUFFER_SIZE 64
#define EMU_CMD_VERSION 0x01
#define EMU_CMD_SET_SPEED 0x05
#define EMU_CMD_GET_STATE 0x07
-#define EMU_CMD_HW_JTAG 0xcf
+#define EMU_CMD_HW_JTAG3 0xcf
#define EMU_CMD_HW_RESET0 0xdc
#define EMU_CMD_HW_RESET1 0xdd
#define EMU_CMD_HW_TRST0 0xde
break;
case JTAG_STATEMOVE:
- DEBUG_JTAG_IO("statemove end in %i",
- cmd->cmd.statemove->end_state);
+ DEBUG_JTAG_IO("statemove end in %i", cmd->cmd.statemove->end_state);
if (cmd->cmd.statemove->end_state != -1)
{
break;
case JTAG_PATHMOVE:
- DEBUG_JTAG_IO("pathmove: %i states, end in %i",
- cmd->cmd.pathmove->num_states,
- cmd->cmd.pathmove->path[cmd->cmd.pathmove->num_states - 1]);
+ DEBUG_JTAG_IO("pathmove: %i states, end in %i", \
+ cmd->cmd.pathmove->num_states, \
+ cmd->cmd.pathmove->path[cmd->cmd.pathmove->num_states - 1]);
jlink_path_move(cmd->cmd.pathmove->num_states, cmd->cmd.pathmove->path);
break;
break;
case JTAG_RESET:
- DEBUG_JTAG_IO("reset trst: %i srst %i",
- cmd->cmd.reset->trst,
- cmd->cmd.reset->srst);
+ DEBUG_JTAG_IO("reset trst: %i srst %i", cmd->cmd.reset->trst, cmd->cmd.reset->srst);
jlink_tap_execute();
LOG_DEBUG("trst: %i, srst: %i", trst, srst);
/* Signals are active low */
- if (trst == 0)
+ if (srst == 0)
{
- jlink_simple_command(EMU_CMD_HW_TRST1);
+ jlink_simple_command(EMU_CMD_HW_RESET1);
}
- else if (trst == 1)
+ else if (srst == 1)
{
- jlink_simple_command(EMU_CMD_HW_TRST0);
+ jlink_simple_command(EMU_CMD_HW_RESET0);
}
- if (srst == 0)
+ if (trst == 0)
{
- jlink_simple_command(EMU_CMD_HW_RESET1);
+ jlink_simple_command(EMU_CMD_HW_TRST1);
}
- else if (srst == 1)
+ else if (trst == 1)
{
- jlink_simple_command(EMU_CMD_HW_RESET0);
+ jlink_simple_command(EMU_CMD_HW_TRST0);
}
}
/***************************************************************************/
/* J-Link tap functions */
-/* We use the maximal value observed */
-#define JLINK_TAP_BUFFER_SIZE 390
+/* 2048 is the max value we can use here */
+#define JLINK_TAP_BUFFER_SIZE 2048
static int tap_length;
static u8 tms_buffer[JLINK_TAP_BUFFER_SIZE];
u8 *buffer;
} pending_scan_result_t;
-#define MAX_PENDING_SCAN_RESULTS 16
+#define MAX_PENDING_SCAN_RESULTS 256
static int pending_scan_results_length;
static pending_scan_result_t pending_scan_results_buffer[MAX_PENDING_SCAN_RESULTS];
byte_length = tap_length / 8;
- usb_out_buffer[0] = EMU_CMD_HW_JTAG;
+ usb_out_buffer[0] = EMU_CMD_HW_JTAG3;
usb_out_buffer[1] = 0;
usb_out_buffer[2] = (tap_length >> 0) & 0xff;
usb_out_buffer[3] = (tap_length >> 8) & 0xff;
/* usb_set_configuration required under win32 */
usb_set_configuration(result->usb_handle, dev->config[0].bConfigurationValue);
usb_claim_interface(result->usb_handle, 0);
+
+#if 0
+ /*
+ * This makes problems under Mac OS X. And is not needed
+ * under Windows. Hopefully this will not break a linux build
+ */
usb_set_altinterface(result->usb_handle, 0);
+#endif
return result;
}
}
if (result == out_length)
{
result = jlink_usb_read(jlink_jtag);
- if (result == in_length)
+ if (result == in_length || result == in_length+1)
{
- /* Must read the result from the EMU too */
- result2 = jlink_usb_read_emu_result(jlink_jtag);
- if (1 == result2)
+ if (result == in_length)
{
- /* Check the result itself */
- if (0 == usb_emu_result_buffer[0])
+ /* Must read the result from the EMU too */
+ result2 = jlink_usb_read_emu_result(jlink_jtag);
+ if (1 == result2)
{
- return result;
+ /* Check the result itself */
+ if (0 == usb_emu_result_buffer[0])
+ {
+ return result;
+ }
+ else
+ {
+ LOG_ERROR("jlink_usb_read_emu_result (requested=0, result=%d)", usb_emu_result_buffer[0]);
+ return -1;
+ }
}
else
{
- LOG_ERROR("jlink_usb_read_emu_result (requested=0, result=%d)", usb_emu_result_buffer[0]);
- return -1;
+ LOG_ERROR("jlink_usb_read_emu_result len (requested=1, result=%d)", result2);
+ return -1;
}
}
else
{
- LOG_ERROR("jlink_usb_read_emu_result len (requested=1, result=%d)", result2);
- return -1;
+ /* Check the result itself */
+ if (0 == usb_in_buffer[result-1])
+ {
+ return result-1;
+ }
+ else
+ {
+ LOG_ERROR("jlink_usb_read_emu_result (requested=0, result=%d)", usb_in_buffer[result]);
+ return -1;
+ }
}
}
else
return result;
}
-
#ifdef _DEBUG_USB_COMMS_
#define BYTES_PER_LINE 16