/* See Segger's public documentation:
* Reference manual for J-Link USB Protocol
* Document RM08001-R6 Date: June 16, 2009
+ * (Or newer, with some SWD information).
+
+http://www.segger.com/cms/admin/uploads/productDocs/RM08001_JLinkUSBProtocol.pdf
*/
-#define VID 0x1366
-#define PID 0x0101
+/*
+ * The default pid of the segger is 0x0101
+ * But when you change the USB Address it will also
+ *
+ * pid = ( usb_address > 0x4) ? 0x0101 : (0x101 + usb_address)
+ */
+#define VID 0x1366, 0x1366, 0x1366, 0x1366
+#define PID 0x0101, 0x0102, 0x0103, 0x0104
#define JLINK_WRITE_ENDPOINT 0x02
#define JLINK_READ_ENDPOINT 0x81
switch (cmd->type)
{
case JTAG_RUNTEST: jlink_execute_runtest(cmd); break;
- case JTAG_STATEMOVE: jlink_execute_statemove(cmd); break;
+ case JTAG_TLR_RESET: jlink_execute_statemove(cmd); break;
case JTAG_PATHMOVE: jlink_execute_pathmove(cmd); break;
case JTAG_SCAN: jlink_execute_scan(cmd); break;
case JTAG_RESET: jlink_execute_reset(cmd); break;
if (speed > JLINK_MAX_SPEED)
{
- LOG_INFO("Ignoring speed request: %dkHz exceeds %dkHz maximum",
+ LOG_INFO("reduce speed request: %dkHz to %dkHz maximum",
speed, JLINK_MAX_SPEED);
- return ERROR_OK;
+ speed = JLINK_MAX_SPEED;
}
/* check for RTCK setting */
jlink_reset(0, 0);
jtag_sleep(3000);
jlink_tap_init();
- jlink_speed(jtag_get_speed());
+ int jtag_speed_var;
+ int retval = jtag_get_speed(&jtag_speed_var);
+ if (retval != ERROR_OK)
+ return retval;
+ jlink_speed(jtag_speed_var);
/* 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 */
result = jlink_usb_read(jlink_handle, 8);
if (result != 8)
{
- LOG_ERROR("J-Link command EMU_CMD_GET_STATE failed (%d)\n", result);
+ LOG_ERROR("J-Link command EMU_CMD_GET_STATE failed (%d)", result);
return ERROR_JTAG_DEVICE_ERROR;
}
}
jlink_caps = buf_get_u32(usb_in_buffer, 0, 32);
- LOG_INFO("JLink caps 0x%x", (unsigned)jlink_caps);
+ LOG_INFO("J-Link caps 0x%x", (unsigned)jlink_caps);
if (jlink_caps & (1 << EMU_CAP_GET_HW_VERSION))
{
if (major_revision >= 5)
jlink_hw_jtag_version = 3;
- LOG_INFO("JLink hw version %i", (int)jlink_hw_version);
+ LOG_INFO("J-Link hw version %i", (int)jlink_hw_version);
}
if (jlink_caps & (1 << EMU_CAP_GET_MAX_BLOCK_SIZE))
}
jlink_max_size = buf_get_u32(usb_in_buffer, 0, 32);
- LOG_INFO("JLink max mem block %i", (int)jlink_max_size);
+ LOG_INFO("J-Link max mem block %i", (int)jlink_max_size);
}
return ERROR_OK;
{
switch (CMD_ARGC) {
case 0:
- command_print(CMD_CTX, "jlink hw jtag %i", jlink_hw_jtag_version);
+ command_print(CMD_CTX, "J-Link hw jtag %i", jlink_hw_jtag_version);
break;
case 1: {
int request_version = atoi(CMD_ARGV[0]);
static void jlink_tap_append_step(int tms, int tdi)
{
- int index = tap_length / 8;
+ int index_var = tap_length / 8;
- if (index >= JLINK_TAP_BUFFER_SIZE)
+ if (index_var >= JLINK_TAP_BUFFER_SIZE)
{
LOG_ERROR("jlink_tap_append_step: overflow");
*(uint32_t *)0xFFFFFFFF = 0;
// we do not pad TMS, so be sure to initialize all bits
if (0 == bit_index)
{
- tms_buffer[index] = tdi_buffer[index] = 0;
+ tms_buffer[index_var] = tdi_buffer[index_var] = 0;
}
if (tms)
- tms_buffer[index] |= bit;
+ tms_buffer[index_var] |= bit;
else
- tms_buffer[index] &= ~bit;
+ tms_buffer[index_var] &= ~bit;
if (tdi)
- tdi_buffer[index] |= bit;
+ tdi_buffer[index_var] |= bit;
else
- tdi_buffer[index] &= ~bit;
+ tdi_buffer[index_var] &= ~bit;
tap_length++;
}