Hi,
here is the patch I used to flash via an Amontec JTAGkey2, see
http://www.amontec.com/jtagkey2.shtml
http://www.amontec.com/jtagkey.shtml
This FTDI 2232H variant has an additional output enable, which will be
set to its "on" (L) when CS is pulled low.
But it lacks a power supply - so you need an external 3V3 source.
The attached patch adds "jtagkey" as "type" parameter for FT2232_SPI.
It should work in theory with all JTAGkeys (JTAGkey, JTAGkey-tiny and
JTAGkey2) but I only have a JTAGkey2 here for testing.
Signed-off-by: Joerg Fischer <[email protected]>
Index: ft2232_spi.c
===================================================================
--- ft2232_spi.c (Revision 1099)
+++ ft2232_spi.c (Arbeitskopie)
@@ -45,6 +45,17 @@
#define BITMODE_BITBANG_NORMAL 1
#define BITMODE_BITBANG_SPI 2
+ /* Set data bits low-byte command:
+ * value: 0x08 CS=high, DI=low, DO=low, SK=low
+ * dir: 0x0b CS=output, DI=input, DO=output, SK=output
+ *
+ * Jtagkey(2) needs to enable its output via Bit4 / GPIOL0
+ * value: 0x18 OE=high, CS=high, DI=low, DO=low, SK=low
+ * dir: 0x1b OE=output, CS=output, DI=input, DO=output, SK=output
+ *
+ */
+static unsigned char CS_Bits = 0x08;
+static unsigned char Pin_Dir = 0x0b;
static struct ftdi_context ftdic_context;
static int send_buf(struct ftdi_context *ftdic, const unsigned char *buf, int
size)
@@ -86,6 +97,12 @@
ft2232_type = FTDI_FT2232H;
else if (!strcasecmp(arg, "4232H"))
ft2232_type = FTDI_FT4232H;
+ else if (!strcasecmp(arg, "jtagkey")) {
+ ft2232_type = 0xCFF8;
+ ft2232_interface = INTERFACE_A;
+ CS_Bits = 0x18;
+ Pin_Dir = 0x1b;
+ }
else {
msg_perr("Error: Invalid device type specified.\n");
free(arg);
@@ -178,14 +195,9 @@
return -1;
msg_pdbg("Set data bits\n");
- /* Set data bits low-byte command:
- * value: 0x08 CS=high, DI=low, DO=low, SK=low
- * dir: 0x0b CS=output, DI=input, DO=output, SK=output
- */
-#define CS_BIT 0x08
buf[0] = SET_BITS_LOW;
- buf[1] = CS_BIT;
- buf[2] = 0x0b;
+ buf[1] = CS_Bits;
+ buf[2] = Pin_Dir;
if (send_buf(ftdic, buf, 3))
return -1;
@@ -230,8 +242,8 @@
*/
msg_pspew("Assert CS#\n");
buf[i++] = SET_BITS_LOW;
- buf[i++] = 0 & ~CS_BIT; /* assertive */
- buf[i++] = 0x0b;
+ buf[i++] = 0 & ~CS_Bits; /* assertive */
+ buf[i++] = Pin_Dir;
if (writecnt) {
buf[i++] = 0x11;
@@ -272,8 +284,8 @@
msg_pspew("De-assert CS#\n");
buf[i++] = SET_BITS_LOW;
- buf[i++] = CS_BIT;
- buf[i++] = 0x0b;
+ buf[i++] = CS_Bits;
+ buf[i++] = Pin_Dir;
ret = send_buf(ftdic, buf, i);
failed |= ret;
if (ret)
_______________________________________________
flashrom mailing list
[email protected]
http://www.flashrom.org/mailman/listinfo/flashrom