Marcel Jost <marcel.jost@bfh.ch>:
[openocd.git] / src / jtag / ft2232.c
index c38d7d47443b05a0941388fb5f586801245c2e42..4cba9d908560453b472005d50d46c151619c4c9d 100644 (file)
@@ -50,9 +50,9 @@
 
 #include <assert.h>
 
-#if (BUILD_FT2232_FTD2XX==1 && BUILD_FT2232_LIBFTDI==1)
+#if (BUILD_FT2232_FTD2XX == 1 && BUILD_FT2232_LIBFTDI == 1)
 #error "BUILD_FT2232_FTD2XX && BUILD_FT2232_LIBFTDI are mutually exclusive"
-#elif (BUILD_FT2232_FTD2XX!=1 && BUILD_FT2232_LIBFTDI!=1)
+#elif (BUILD_FT2232_FTD2XX != 1 && BUILD_FT2232_LIBFTDI != 1)
 #error "BUILD_FT2232_FTD2XX || BUILD_FT2232_LIBFTDI must be chosen"
 #endif
 
@@ -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,14 +258,14 @@ 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)
        {
                bool bit = tms_bits & 1;
 
                if (bit)
-                       tms_byte |= (1<<tms_ndx);
+                       tms_byte |= (1 << tms_ndx);
 
                /* always do state transitions in public view */
                tap_set_state(tap_state_transition(tap_get_state(), bit));
@@ -274,7 +275,7 @@ static void clock_tms(uint8_t mpsse_cmd, int tms_bits, int tms_count, bool tdi_b
                */
                ++tms_ndx;
 
-               if (tms_ndx==7  || i==tms_count-1)
+               if (tms_ndx == 7  || i == tms_count-1)
                {
                        buffer_write(mpsse_cmd);
                        buffer_write(tms_ndx - 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]);
@@ -498,7 +499,7 @@ static int ft2232_speed_div(int speed, int* khz)
 
 static int ft2232_khz(int khz, int* jtag_speed)
 {
-       if (khz==0)
+       if (khz == 0)
        {
 #ifdef BUILD_FTD2XX_HIGHSPEED
                *jtag_speed = 0;
@@ -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;
@@ -760,7 +761,7 @@ static void ft2232_add_pathmove(tap_state_t* path, int num_states)
                if (tap_state_transition(walker, false) == desired_next_state)
                        ;       /* bit within tms_bits at index state_ndx is already zero */
                else if (tap_state_transition(walker, true) == desired_next_state)
-                       tms_bits |= (1<<state_ndx);
+                       tms_bits |= (1 << state_ndx);
                else
                {
                        LOG_ERROR("BUG: %s -> %s isn't a valid TAP transition",
@@ -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);
@@ -2049,7 +2050,7 @@ static int ft2232_init(void)
        const ft2232_layout_t* cur_layout = ft2232_layouts;
        int i;
 
-       if (tap_get_tms_path_len(TAP_IRPAUSE,TAP_IRPAUSE)==7)
+       if (tap_get_tms_path_len(TAP_IRPAUSE,TAP_IRPAUSE) == 7)
        {
                LOG_DEBUG("ft2232 interface using 7 step jtag state transitions");
        }
@@ -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 {
-                       // <space>A not defined
+                       // <space > A not defined
                        // so create it
                        sprintf(buf, "%s A", ft2232_device_desc);
                        ft2232_device_desc_A = strdup(buf);

Linking to existing account procedure

If you already have an account and want to add another login method you MUST first sign in with your existing account and then change URL to read https://review.openocd.org/login/?link to get to this page again but this time it'll work for linking. Thank you.

SSH host keys fingerprints

1024 SHA256:YKx8b7u5ZWdcbp7/4AeXNaqElP49m6QrwfXaqQGJAOk gerrit-code-review@openocd.zylin.com (DSA)
384 SHA256:jHIbSQa4REvwCFG4cq5LBlBLxmxSqelQPem/EXIrxjk gerrit-code-review@openocd.org (ECDSA)
521 SHA256:UAOPYkU9Fjtcao0Ul/Rrlnj/OsQvt+pgdYSZ4jOYdgs gerrit-code-review@openocd.org (ECDSA)
256 SHA256:A13M5QlnozFOvTllybRZH6vm7iSt0XLxbA48yfc2yfY gerrit-code-review@openocd.org (ECDSA)
256 SHA256:spYMBqEYoAOtK7yZBrcwE8ZpYt6b68Cfh9yEVetvbXg gerrit-code-review@openocd.org (ED25519)
+--[ED25519 256]--+
|=..              |
|+o..   .         |
|*.o   . .        |
|+B . . .         |
|Bo. = o S        |
|Oo.+ + =         |
|oB=.* = . o      |
| =+=.+   + E     |
|. .=o   . o      |
+----[SHA256]-----+
2048 SHA256:0Onrb7/PHjpo6iVZ7xQX2riKN83FJ3KGU0TvI0TaFG4 gerrit-code-review@openocd.zylin.com (RSA)