X-Git-Url: https://review.openocd.org/gitweb?p=openocd.git;a=blobdiff_plain;f=src%2Fjtag%2Fft2232.c;h=e17d51d6b0530f2fcda5761d983a132b14f3589e;hp=07b4bec4f97ddeadc7c43831e05fc36db9c043e1;hb=a239d6b3346cd67d9fd85bd1beeb33bb53a331cf;hpb=3813fda44adcea486b7308423a699f63d79273ee diff --git a/src/jtag/ft2232.c b/src/jtag/ft2232.c index 07b4bec4f9..e17d51d6b0 100644 --- a/src/jtag/ft2232.c +++ b/src/jtag/ft2232.c @@ -156,6 +156,7 @@ static const ft2232_layout_t ft2232_layouts[] = { "oocdlink", jtagkey_init, jtagkey_reset, NULL }, { "signalyzer", usbjtag_init, usbjtag_reset, NULL }, { "evb_lm3s811", usbjtag_init, usbjtag_reset, NULL }, + { "luminary_icdi", usbjtag_init, usbjtag_reset, NULL }, { "olimex-jtag", olimex_jtag_init, olimex_jtag_reset, olimex_jtag_blink }, { "flyswatter", flyswatter_init, flyswatter_reset, flyswatter_jtag_blink }, { "turtelizer2", turtle_init, turtle_reset, turtle_jtag_blink }, @@ -188,7 +189,7 @@ static jtag_command_t* first_unsent; /* next command that has to be sent static int require_send; -/* http://urjtag.wiki.sourceforge.net/Cable+FT2232 says: +/* http://urjtag.wiki.sourceforge.net/Cable + FT2232 says: "There is a significant difference between libftdi and libftd2xx. The latter one allows to schedule up to 64*64 bytes of result data while libftdi fails @@ -257,7 +258,7 @@ static void clock_tms(uint8_t mpsse_cmd, int tms_bits, int tms_count, bool tdi_b assert(tms_count > 0); -// LOG_DEBUG("mpsse cmd=%02x, tms_bits=0x%08x, bit_count=%d", mpsse_cmd, tms_bits, tms_count); +// LOG_DEBUG("mpsse cmd=%02x, tms_bits = 0x%08x, bit_count=%d", mpsse_cmd, tms_bits, tms_count); for (tms_byte = tms_ndx = i = 0; i < tms_count; ++i, tms_bits>>=1) { @@ -411,8 +412,8 @@ static int ft2232_read(uint8_t* buf, uint32_t size, uint32_t* bytes_read) if (*bytes_read < size) { - LOG_ERROR("couldn't read the requested number of bytes from FT2232 device (%i < %i)", - (unsigned int)(*bytes_read), + LOG_ERROR("couldn't read the requested number of bytes from FT2232 device (%i < %i)", + (unsigned int)(*bytes_read), (unsigned int)size); return ERROR_JTAG_DEVICE_ERROR; } @@ -470,7 +471,7 @@ static int ft2232_speed(int speed) ft2232_adaptive_clocking(speed); buf[0] = 0x86; /* command "set divisor" */ - buf[1] = speed & 0xff; /* valueL (0=6MHz, 1=3MHz, 2=2.0MHz, ...*/ + buf[1] = speed & 0xff; /* valueL (0 = 6MHz, 1 = 3MHz, 2 = 2.0MHz, ...*/ buf[2] = (speed >> 8) & 0xff; /* valueH */ LOG_DEBUG("%2.2x %2.2x %2.2x", buf[0], buf[1], buf[2]); @@ -623,8 +624,8 @@ static int ft2232_send_and_recv(jtag_command_t* first, jtag_command_t* last) int scan_size; enum scan_type type; int retval; - uint32_t bytes_written=0; - uint32_t bytes_read=0; + uint32_t bytes_written = 0; + uint32_t bytes_read = 0; #ifdef _DEBUG_USB_IO_ struct timeval start, inter, inter2, end; @@ -876,7 +877,7 @@ static void ft2232_add_scan(bool ir_scan, enum scan_type type, uint8_t* buffer, buffer_write(buffer[cur_byte]); } - if (( ir_scan && (tap_get_end_state() == TAP_IRSHIFT)) + if ((ir_scan && (tap_get_end_state() == TAP_IRSHIFT)) || (!ir_scan && (tap_get_end_state() == TAP_DRSHIFT))) { if (type == SCAN_IO) @@ -965,7 +966,7 @@ static int ft2232_large_scan(scan_command_t* cmd, enum scan_type type, uint8_t* LOG_ERROR("couldn't write MPSSE commands to FT2232"); exit(-1); } - LOG_DEBUG("ft2232_buffer_size: %i, bytes_written: %i", + LOG_DEBUG("ft2232_buffer_size: %i, bytes_written: %i", ft2232_buffer_size, (int)bytes_written); ft2232_buffer_size = 0; @@ -1019,8 +1020,8 @@ static int ft2232_large_scan(scan_command_t* cmd, enum scan_type type, uint8_t* LOG_ERROR("couldn't write MPSSE commands to FT2232"); exit(-1); } - LOG_DEBUG("ft2232_buffer_size: %i, bytes_written: %i", - ft2232_buffer_size, + LOG_DEBUG("ft2232_buffer_size: %i, bytes_written: %i", + ft2232_buffer_size, (int)bytes_written); ft2232_buffer_size = 0; @@ -1031,8 +1032,8 @@ static int ft2232_large_scan(scan_command_t* cmd, enum scan_type type, uint8_t* LOG_ERROR("couldn't read from FT2232"); exit(-1); } - LOG_DEBUG("thisrun_read: %i, bytes_read: %i", - thisrun_read, + LOG_DEBUG("thisrun_read: %i, bytes_read: %i", + thisrun_read, (int)bytes_read); receive_pointer += bytes_read; } @@ -1129,8 +1130,8 @@ static int ft2232_large_scan(scan_command_t* cmd, enum scan_type type, uint8_t* LOG_ERROR("couldn't write MPSSE commands to FT2232"); exit(-1); } - LOG_DEBUG("ft2232_buffer_size: %i, bytes_written: %i", - ft2232_buffer_size, + LOG_DEBUG("ft2232_buffer_size: %i, bytes_written: %i", + ft2232_buffer_size, (int)bytes_written); ft2232_buffer_size = 0; @@ -1141,8 +1142,8 @@ static int ft2232_large_scan(scan_command_t* cmd, enum scan_type type, uint8_t* LOG_ERROR("couldn't read from FT2232"); exit(-1); } - LOG_DEBUG("thisrun_read: %i, bytes_read: %i", - thisrun_read, + LOG_DEBUG("thisrun_read: %i, bytes_read: %i", + thisrun_read, (int)bytes_read); receive_pointer += bytes_read; } @@ -1588,7 +1589,7 @@ static int ft2232_execute_pathmove(jtag_command_t *cmd) DEBUG_JTAG_IO("pathmove: %i states, current: %s end: %s", num_states, tap_state_name(tap_get_state()), tap_state_name(path[num_states-1]) - ); +); /* only send the maximum buffer size that FT2232C can handle */ predicted_size = 3 * CEIL(num_states, 7); @@ -1884,7 +1885,7 @@ static int ft2232_init_ftd2xx(uint16_t vid, uint16_t pid, int more, int* try_mor { LOG_ERROR("ListDevices: %lu\n", num_devices); for (i = 0; i < num_devices; i++) - LOG_ERROR("%i: \"%s\"", i, desc_array[i]); + LOG_ERROR("%" PRIu32 ": \"%s\"", i, desc_array[i]); } for (i = 0; i < num_devices; i++) @@ -2163,6 +2164,15 @@ static int usbjtag_init(void) low_output = 0x88; low_direction = 0x8b; } + else if (strcmp(ft2232_layout, "luminary_icdi") == 0) + { + nTRST = 0x0; + nTRSTnOE = 0x00; + nSRST = 0x20; + nSRSTnOE = 0x20; + low_output = 0x88; + low_direction = 0xcb; + } else { LOG_ERROR("BUG: usbjtag_init called for unknown layout '%s'", ft2232_layout); @@ -2194,8 +2204,8 @@ static int usbjtag_init(void) /* 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, xRST high) */ - buf[2] = low_direction; /* dir (output=1), TCK/TDI/TMS=out, TDO=in */ + buf[1] = low_output; /* value (TMS = 1,TCK = 0, TDI = 0, xRST high) */ + buf[2] = low_direction; /* dir (output = 1), TCK/TDI/TMS = out, TDO = in */ 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)) @@ -2218,8 +2228,8 @@ static int axm0432_jtag_init(void) /* 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 */ + 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)) @@ -2289,8 +2299,8 @@ static int jtagkey_init(void) /* 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 */ + 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)) @@ -2372,8 +2382,8 @@ static int olimex_jtag_init(void) /* 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 */ + 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)) @@ -2440,8 +2450,8 @@ static int flyswatter_init(void) /* 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[12]=out, n[ST]srst=out */ + 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[12]=out, n[ST]srst = 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)) @@ -2487,8 +2497,8 @@ static int turtle_init(void) /* 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 */ + 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)) @@ -2528,8 +2538,8 @@ static int comstick_init(void) /* 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 */ + 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)) @@ -2572,8 +2582,8 @@ static int stm32stick_init(void) /* 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 */ + 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)) @@ -2616,8 +2626,8 @@ static int sheevaplug_init(void) /* 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 */ + 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 */ 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)) @@ -2667,8 +2677,8 @@ static int cortino_jtag_init(void) /* 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 */ + 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)) @@ -2794,7 +2804,7 @@ static int ft2232_handle_device_desc_command(struct command_context_s* cmd_ctx, cp[-2] = 0; ft2232_device_desc = strdup(buf); } else { - // A not defined + // A not defined // so create it sprintf(buf, "%s A", ft2232_device_desc); ft2232_device_desc_A = strdup(buf);