Here's the patch against urjtag SVN r1672 I've been using.  It's adapted
from the blackfin codebase for the gnICE+; I changed the VID/PID so it
detects the ARM-USB-TINY-H instead.  Enjoy!

  - a

Index: src/tap/cable.c
===================================================================
--- src/tap/cable.c	(revision 1672)
+++ src/tap/cable.c	(working copy)
@@ -51,6 +51,7 @@
 extern urj_cable_driver_t urj_tap_cable_ft2232_jtagkey_driver;
 extern urj_cable_driver_t urj_tap_cable_ft2232_armusbocd_driver;
 extern urj_cable_driver_t urj_tap_cable_ft2232_gnice_driver;
+extern urj_cable_driver_t urj_tap_cable_ft2232_gniceplus_cable_driver;
 extern urj_cable_driver_t urj_tap_cable_ft2232_oocdlinks_driver;
 extern urj_cable_driver_t urj_tap_cable_ft2232_signalyzer_driver;
 extern urj_cable_driver_t urj_tap_cable_ft2232_turtelizer2_driver;
@@ -92,6 +93,7 @@
     &urj_tap_cable_ft2232_jtagkey_driver,
     &urj_tap_cable_ft2232_armusbocd_driver,
     &urj_tap_cable_ft2232_gnice_driver,
+    &urj_tap_cable_ft2232_gniceplus_cable_driver,
     &urj_tap_cable_ft2232_oocdlinks_driver,
     &urj_tap_cable_ft2232_signalyzer_driver,
     &urj_tap_cable_ft2232_turtelizer2_driver,
Index: src/tap/cable/generic_usbconn.c
===================================================================
--- src/tap/cable/generic_usbconn.c	(revision 1672)
+++ src/tap/cable/generic_usbconn.c	(working copy)
@@ -49,6 +49,7 @@
 extern urj_usbconn_cable_t urj_tap_cable_usbconn_armusbocd_ftd2xx;
 extern urj_usbconn_cable_t urj_tap_cable_usbconn_armusbocdtiny_ftd2xx;
 extern urj_usbconn_cable_t urj_tap_cable_usbconn_gnice_ftd2xx;
+extern urj_usbconn_cable_t urj_tap_cable_usbconn_gniceplus_ftd2xx;
 extern urj_usbconn_cable_t urj_tap_cable_usbconn_jtagkey_ftd2xx;
 extern urj_usbconn_cable_t urj_tap_cable_usbconn_oocdlinks_ftd2xx;
 extern urj_usbconn_cable_t urj_tap_cable_usbconn_turtelizer2_ftd2xx;
@@ -62,6 +63,7 @@
 extern urj_usbconn_cable_t urj_tap_cable_usbconn_armusbocd_ftdi;
 extern urj_usbconn_cable_t urj_tap_cable_usbconn_armusbocdtiny_ftdi;
 extern urj_usbconn_cable_t urj_tap_cable_usbconn_gnice_ftdi;
+extern urj_usbconn_cable_t urj_tap_cable_usbconn_gniceplus_ftdi;
 extern urj_usbconn_cable_t urj_tap_cable_usbconn_jtagkey_ftdi;
 extern urj_usbconn_cable_t urj_tap_cable_usbconn_oocdlinks_ftdi;
 extern urj_usbconn_cable_t urj_tap_cable_usbconn_turtelizer2_ftdi;
@@ -100,6 +102,7 @@
     &urj_tap_cable_usbconn_armusbocd_ftd2xx,
     &urj_tap_cable_usbconn_armusbocdtiny_ftd2xx,
     &urj_tap_cable_usbconn_gnice_ftd2xx,
+    &urj_tap_cable_usbconn_gniceplus_ftd2xx,
     &urj_tap_cable_usbconn_jtagkey_ftd2xx,
     &urj_tap_cable_usbconn_oocdlinks_ftd2xx,
     &urj_tap_cable_usbconn_turtelizer2_ftd2xx,
@@ -113,6 +116,7 @@
     &urj_tap_cable_usbconn_armusbocd_ftdi,
     &urj_tap_cable_usbconn_armusbocdtiny_ftdi,
     &urj_tap_cable_usbconn_gnice_ftdi,
+    &urj_tap_cable_usbconn_gniceplus_ftdi,
     &urj_tap_cable_usbconn_jtagkey_ftdi,
     &urj_tap_cable_usbconn_oocdlinks_ftdi,
     &urj_tap_cable_usbconn_turtelizer2_ftdi,
Index: src/tap/cable/ft2232.c
===================================================================
--- src/tap/cable/ft2232.c	(revision 1672)
+++ src/tap/cable/ft2232.c	(working copy)
@@ -45,6 +45,9 @@
 /* Maximum TCK frequency of FT2232 */
 #define FT2232_MAX_TCK_FREQ 6000000
 
+/* Maximum TCK frequency of FT2232H / FT4232H  */
+#define FT2232H_MAX_TCK_FREQ 30000000
+
 /* The default driver if not specified otherwise during connect */
 #ifdef ENABLE_LOWLEVEL_FTD2XX
 #define DEFAULT_DRIVER "ftd2xx-mpsse"
@@ -52,7 +55,6 @@
 #define DEFAULT_DRIVER "ftdi-mpsse"
 #endif
 
-
 /* repeat the definitions for MPSSE command processor here
    since we cannot rely on the existence of ftdi.h even though
    they're defined there */
@@ -80,6 +82,9 @@
 #define TCK_DIVISOR     0x86
 #define SEND_IMMEDIATE  0x87
 
+/* FT2232H / FT4232H only commands */
+#define DISABLE_CLOCKDIV  0x8A /* Disables the clk divide by 5 to allow for a 60MHz master clock */
+#define ENABLE_CLOCKDIV   0x8B /* Enables the clk divide by 5 to allow for backward compatibility with FT2232D */
 
 /* bit and bitmask definitions for GPIO commands */
 #define BIT_TCK         0
@@ -228,30 +233,42 @@
 
 
 static void
-ft2232_set_frequency (urj_cable_t *cable, uint32_t new_frequency)
+ft2232h_disable_clockdiv_by5( urj_cable_t *cable )
 {
+  params_t *params = (params_t *)cable->params;
+  urj_tap_cable_cx_cmd_root_t *cmd_root = &(params->cmd_root);
+  urj_tap_cable_cx_cmd_queue( cmd_root, 0 );
+  urj_tap_cable_cx_cmd_push( cmd_root, DISABLE_CLOCKDIV );
+}
+
+static void
+ft2232_set_frequency_common (urj_cable_t *cable, uint32_t new_frequency, uint32_t max_frequency)
+{
     params_t *params = (params_t *) cable->params;
     urj_tap_cable_cx_cmd_root_t *cmd_root = &(params->cmd_root);
 
-    if (!new_frequency || new_frequency > FT2232_MAX_TCK_FREQ)
-        new_frequency = FT2232_MAX_TCK_FREQ;
+    if (!new_frequency || new_frequency > max_frequency)
+        new_frequency = max_frequency;
 
     /* update ft2232 frequency if cable setting changed */
     if (new_frequency != params->mpsse_frequency)
     {
         uint32_t div;
 
-        div = FT2232_MAX_TCK_FREQ / new_frequency;
-        if (FT2232_MAX_TCK_FREQ % new_frequency)
+        div = max_frequency / new_frequency;
+        if (max_frequency % new_frequency)
             div++;
 
         if (div >= (1 << 16))
         {
             div = (1 << 16) - 1;
-            urj_warning (_("Setting lowest supported frequency for FT2232: %d\n"),
-                         FT2232_MAX_TCK_FREQ / div);
+            urj_warning( _("Warning: Setting lowest supported frequency for FT2232%s: %d\n"),
+                         max_frequency == FT2232H_MAX_TCK_FREQ ? "H" : "", max_frequency/div );
         }
 
+        if (max_frequency == FT2232H_MAX_TCK_FREQ)
+          ft2232h_disable_clockdiv_by5( cable );
+
         /* send new divisor to device */
         div -= 1;
         urj_tap_cable_cx_cmd_queue (cmd_root, 0);
@@ -262,12 +279,24 @@
         urj_tap_cable_cx_xfer (cmd_root, &imm_cmd, cable,
                                URJ_TAP_CABLE_COMPLETELY);
 
-        params->mpsse_frequency = FT2232_MAX_TCK_FREQ / (div + 1);
+        params->mpsse_frequency = max_frequency / (div + 1);
         cable->frequency = params->mpsse_frequency;
     }
 }
 
 
+static void
+ft2232_set_frequency( urj_cable_t *cable, uint32_t new_frequency )
+{
+  ft2232_set_frequency_common( cable, new_frequency, FT2232_MAX_TCK_FREQ);
+}
+
+static void
+ft2232h_set_frequency( urj_cable_t *cable, uint32_t new_frequency )
+{
+  ft2232_set_frequency_common( cable, new_frequency, FT2232H_MAX_TCK_FREQ);
+}
+ 
 static int
 ft2232_generic_init (urj_cable_t *cable)
 {
@@ -419,7 +448,7 @@
 
 
 static int
-ft2232_gnice_init (urj_cable_t *cable)
+ft2232_gnice_init_common (urj_cable_t *cable, uint32_t frequency)
 {
     params_t *params = (params_t *) cable->params;
     urj_tap_cable_cx_cmd_root_t *cmd_root = &(params->cmd_root);
@@ -451,7 +480,7 @@
     urj_tap_cable_cx_cmd_push (cmd_root, params->high_byte_value);
     urj_tap_cable_cx_cmd_push (cmd_root, params->high_byte_dir);
 
-    ft2232_set_frequency (cable, FT2232_MAX_TCK_FREQ);
+    ft2232_set_frequency (cable, frequency);
 
     params->bit_trst = BIT_GNICE_nTRST + 8;     /* member of HIGH byte */
     params->bit_reset = -1;     /* not used */
@@ -462,8 +491,19 @@
     return URJ_STATUS_OK;
 }
 
+static int
+ft2232_gnice_init( urj_cable_t *cable )
+{
+  return ft2232_gnice_init_common( cable, FT2232_MAX_TCK_FREQ );
+}
 
 static int
+ft2232_gniceplus_init( urj_cable_t *cable )
+{
+  return ft2232_gnice_init_common( cable, FT2232H_MAX_TCK_FREQ );
+}
+
+static int
 ft2232_oocdlinks_init (urj_cable_t *cable)
 {
     params_t *params = (params_t *) cable->params;
@@ -1767,6 +1807,7 @@
 urj_usbconn_cable_t urj_tap_cable_usbconn_ft2232_ftdi;
 urj_usbconn_cable_t urj_tap_cable_usbconn_armusbocd_ftdi;
 urj_usbconn_cable_t urj_tap_cable_usbconn_gnice_ftdi;
+urj_usbconn_cable_t urj_tap_cable_usbconn_gniceplus_ftdi;
 urj_usbconn_cable_t urj_tap_cable_usbconn_jtagkey_ftdi;
 urj_usbconn_cable_t urj_tap_cable_usbconn_oocdlinks_ftdi;
 urj_usbconn_cable_t urj_tap_cable_usbconn_turtelizer2_ftdi;
@@ -1787,6 +1828,9 @@
     conn = &urj_tap_cable_usbconn_gnice_ftdi;
     if (strcasecmp (conn->name, cablename) == 0)
         goto found;
+    conn = &urj_tap_cable_usbconn_gniceplus_ftdi;
+    if (strcasecmp( conn->name, cablename ) == 0)
+      goto found;
     conn = &urj_tap_cable_usbconn_jtagkey_ftdi;
     if (strcasecmp (conn->name, cablename) == 0)
         goto found;
@@ -1920,6 +1964,44 @@
     ft2232_flush,
     ft2232_usbcable_help
 };
+urj_cable_driver_t urj_tap_cable_ft2232_gniceplus_cable_driver = {
+  "gnICE+",
+  N_("Analog Devices Blackfin gnICE+ (FT2232H) Cable (EXPERIMENTAL)"),
+  URJ_CABLE_DEVICE_USB,
+  { .usb = ft2232_connect, },
+  urj_tap_cable_generic_disconnect,
+  ft2232_cable_free,
+  ft2232_gniceplus_init,
+  ft2232_gnice_done,
+  ft2232h_set_frequency,
+  ft2232_clock,
+  ft2232_get_tdo,
+  ft2232_transfer,
+  ft2232_set_signal,
+  urj_tap_cable_generic_get_signal,
+  ft2232_flush,
+  ft2232_usbcable_help
+};
+
+urj_usbconn_cable_t urj_tap_cable_usbconn_gniceplus_ftdi = {
+  "gnICE+",            /* cable name */
+  NULL,               /* string pattern, not used */
+  "ftdi-mpsse",       /* default usbconn driver */
+  //  0x0456,             /* VID */
+  //  0xF001              /* PID */
+    0x15BA,
+    0x002A
+};
+urj_usbconn_cable_t usbconn_cable_gniceplus_ftd2xx = {
+  "gnICE+",            /* cable name */
+  "",               /* string pattern, not used */
+  "ftd2xx-mpsse",     /* default usbconn driver */
+  //0x0456,             /* VID */
+  //0xF001              /* PID */
+  0x15BA,
+  0x002A
+};
+
 urj_usbconn_cable_t urj_tap_cable_usbconn_gnice_ftdi = {
     "gnICE",                    /* cable name */
     NULL,                       /* string pattern, not used */
@@ -2089,15 +2171,15 @@
     "Signalyzer",               /* cable name */
     NULL,                       /* string pattern, not used */
     "ftdi-mpsse",               /* default usbconn driver */
-    0x0000,                     /* VID */
-    0x0000                      /* PID */
+    0x0403,                     /* VID */
+    0xbca1                      /* PID */
 };
 urj_usbconn_cable_t urj_tap_cable_usbconn_signalyzer_ftd2xx = {
     "Signalyzer",               /* cable name */
     NULL,                       /* string pattern, not used */
     "ftd2xx-mpsse",             /* default usbconn driver */
-    0x0000,                     /* VID */
-    0x0000                      /* PID */
+    0x0403,                     /* VID */
+    0xbca1                      /* PID */
 };
 
 urj_cable_driver_t urj_tap_cable_ft2232_flyswatter_driver = {
------------------------------------------------------------------------------
This SF.Net email is sponsored by the Verizon Developer Community
Take advantage of Verizon's best-in-class app development support
A streamlined, 14 day to market process makes app distribution fast and easy
Join now and get one step closer to millions of Verizon customers
http://p.sf.net/sfu/verizon-dev2dev 
_______________________________________________
UrJTAG-development mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/urjtag-development

Reply via email to