annotate doc/Unbuffered-FT2232x-JTAG @ 52:ace3ed1d5ddf

Unbuffered FT2232x JTAG article written
author Mychaela Falconia <falcon@freecalypso.org>
date Tue, 23 Apr 2019 01:22:41 +0000
parents
children 96232f00bc9c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
52
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
1 How to make a safe JTAG adapter out of a generic unbuffered FT2232x board
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
2 =========================================================================
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
3
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
4 Among the FOSS community of tinkerers who use OpenOCD to operate on the JTAG
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
5 interfaces of various hardware targets, one of the most common JTAG adapter
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
6 choices (if not the most common) is to use some adapter gadget based on an FTDI
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
7 chip, most commonly one of FT2232x variants. However, a major distinction needs
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
8 to be drawn between specialized purpose-made JTAG adapter products which just
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
9 happen to use an FT2232x chip internally, versus generic FT2232x breakout boards
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
10 which the user wires up for JTAG on his or her own.
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
11
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
12 In an ideal world, using a purpose-made buffered JTAG adapter (one that has a
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
13 buffer inserted between FT2232x I/O pins and the target connection interface)
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
14 would be strongly preferable for a whole host of reasons. However, to this
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
15 author's disappointment, there are very few community vendors who make such
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
16 adapters, and I was NOT able to find any high-quality buffered JTAG adapter
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
17 which can be bought in the present and which comes with published schematics.
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
18 (There is one very well-known vendor of "community" JTAG adapters who refuses
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
19 to publish schematics for their current model; they have an older model for
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
20 which they did publish schematics, but it is discontinued and they are not
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
21 interested in bringing it back into production or handing the complete design
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
22 over to the community - probably because it would then compete with their
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
23 current sans-schematics product! Selling JTAG adapters to the community while
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
24 keeping their schematics secret is just assinine, and I refuse to give my
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
25 business to such vendors.)
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
26
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
27 Given the current sorry state of availability of buffered JTAG adapters, I have
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
28 given more thought to the unbuffered option, and I found what appears to be a
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
29 way to make them safe - but my method requires programming the EEPROM on the
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
30 FT2232x board with a special custom configuration, and in this article I am
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
31 going to provide the full details and instructions.
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
32
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
33 To begin with, an unbuffered JTAG adapter (one in which the target JTAG signals
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
34 are connected directly to FT2232x I/O pins without any buffer in between) can
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
35 work only with targets that operate their JTAG interface at 3.3 V, or perhaps
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
36 a slightly lower but still fully 3.3V-compatible logic voltage level like the
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
37 2.8 V I/O on Calypso GSM baseband processors. An unbuffered adapter CANNOT
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
38 work with, say, a 1.8 V JTAG interface - but as long as your target runs at
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
39 3.3 or 2.8 V, then we can continue.
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
40
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
41 The next big problem with unbuffered FT2232x adapters is that if you don't put
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
42 a special configuration in the EEPROM (or if your FT2232x board omits the EEPROM
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
43 altogether), the channel which you are going to wire up for JTAG (can only be
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
44 Channel A on FT2232C/D, can be either channel on FT2232H) is going to come up
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
45 in FTDI's default UART mode on power-up, and it is going to stay in that mode
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
46 until and unless you run OpenOCD, which will then switch it into MPSSE mode for
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
47 JTAG. Why is it a problem? Answer: you need to connect the TDO line from the
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
48 target to the FT2232x chip's ADBUS2 pin for JTAG to work via MPSSE, but in the
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
49 power-up default UART mode this ADBUS2 pin is the RTS output. FT2232x RTS
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
50 output fighting with the target's TDO output - not good, and it could even fry
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
51 one or both of the chips.
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
52
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
53 Unfortunately FTDI's stupid chip design does not allow the desired MPSSE mode
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
54 to be configured in the EEPROM so that it is there right from power-up. But
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
55 there is a workaround: if the EEPROM config is set up to put Channel A (the one
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
56 that will be wired for JTAG) into the rarely-used 245 FIFO mode instead of UART,
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
57 all 8 ADBUS pins (including ADBUS2 where TDO will be connected) will power up
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
58 as inputs with weak internal pull-ups (as long as the ACBUS2 control line is
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
59 left unconnected), which is much safer than what these pins do in the default
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
60 UART mode.
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
61
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
62 And if we need to program the EEPROM with a special custom config to change
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
63 Channel A from 232 UART to 245 FIFO, we can also assign a different USB VID:PID
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
64 at the same time. FTDI's default FT2232x ID of 0403:6010 works great when both
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
65 channels of the FT2232x device are used as UARTs - the Linux kernel recognizes
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
66 this USB ID, creates a pair of ttyUSB devices (one for each channel), and
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
67 everything Just Works. But what if Channel A is used for JTAG and is therefore
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
68 not a valid UART channel? If the default USB ID is left unchanged, what happens
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
69 is that a pair of ttyUSB devices still gets created, with the first out of the
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
70 pair being completely bogus and non-functional. And when you run OpenOCD, that
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
71 bogus Channel A ttyUSB device disappears, while the Channel B ttyUSB device
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
72 (which will actually work if Channel B is wired as a UART) remains, creating a
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
73 gap in ttyUSB numbers. If you have a ton of ttyUSB devices on your system and
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
74 are struggling to keep track of which is which, this behaviour certainly does
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
75 not help.
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
76
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
77 As it happens, our company Falconia Partners LLC has received a block of 8 PIDs
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
78 from FTDI, allocated out of FTDI's VID range - these PIDs have been officially
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
79 allocated by FTDI to our company for use in products based on FTDI chips. And
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
80 because we can spare one PID for a worthy cause, one of these PIDs (0403:7151)
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
81 is hereby being donated to the community for use on generic FT2232x boards in
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
82 the unbuffered JTAG adapter configuration.
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
83
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
84 As of this writing, this 0403:7151 PID has not been submitted to Linux ftdi_sio
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
85 kernel maintainers yet, thus if you program it into your FT2232x EEPROM
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
86 following the instructions below, the kernel will leave that FT2232x device
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
87 completely alone. If you are interested only in JTAG and don't need an extra
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
88 UART on Channel B, this arrangement should be fully sufficient - you simply
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
89 configure your OpenOCD in userspace to find your unbuffered and ad-hoc-wired
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
90 JTAG adapter at that USB ID. And if you do need the UART on Channel B, you can
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
91 trivially patch your ftdi_sio.c kernel driver, adding the new ID to the table
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
92 with JTAG quirk (&ftdi_jtag_quirk) specified.
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
93
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
94 Choice of FT2232x breakout board
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
95 ================================
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
96
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
97 Here at FreeCalypso HQ we make very extensive use of FT2232C/D breakout boards
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
98 by PLDkit, and I officially recommend and endorse this vendor:
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
99
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
100 http://pldkit.com/other/ft2232d-module
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
101
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
102 These modules were originally made with FT2232D chips, then the vendor found a
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
103 stash of old but still good FT2232C chips, so apparently the current ones are
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
104 FT2232C, not D - but this distinction makes no difference for the present
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
105 purpose.
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
106
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
107 These days FT2232H chips and FT2232H breakout boards are much more popular, but
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
108 I generally prefer FT2232C/D for classicness and simplicity. Additionally,
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
109 FTDI's AN_184 document lists I/O pin behaviour of various FTDI chips including
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
110 FT2232D and FT2232H; according to this document FT2232H I/O pins go through a
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
111 brief phase of acting as UART signals (including RTS output on ADBUS2) while
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
112 the EEPROM is being read, whereas FT2232D I/O pins are tristated during this
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
113 time. Thus I strongly recommend using an FT2232D breakout board.
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
114
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
115 Programming the EEPROM
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
116 ======================
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
117
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
118 The officially recommended FT2232D breakout boards from PLDkit have 93C46
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
119 EEPROMs on them, and the boards are shipped with blank EEPROMs. The blank
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
120 EEPROM state is perfectly good for operating the board as a dual UART, but our
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
121 JTAG application calls for custom EEPROM programming. A number of people in
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
122 the FOSS community have produced several different tools for programming FTDI
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
123 EEPROMs, and you could even use FTDI's official Winblows tools if you like, but
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
124 I am going to describe how to program the EEPROM using the tools which I
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
125 developed and which are used in production here at Falconia Partners LLC.
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
126
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
127 To compile my FTDI EEPROM tools, go into the fteeprom directory and run make
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
128 there; you will need to have libftdi (the classic one, not libftdi1) installed
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
129 on your system. If all you seek to do is to program this one EEPROM, you don't
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
130 need to install my tools system-wide - you can just run them from the directory
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
131 where they are compiled.
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
132
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
133 If you have the FT2232D board in its initial blank-EEPROM state plugged into
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
134 your system and you don't have any other FT2232x devices with 0403:6010 IDs,
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
135 you can program the EEPROM for JTAG as follows - run this pipeline from the top
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
136 directory of this code repository:
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
137
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
138 fteeprom/ftee-gen2232c eeproms/jtag-unbuf | fteeprom/fteeprom-prog i:0x0403:0x6010
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
139
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
140 Then unplug and replug the FT2232D board, and it should come back with the new
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
141 0403:7151 USD ID. If you wish to bring it back to its original blank-EEPROM
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
142 state, you can do so by erasing the EEPROM:
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
143
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
144 fteeprom-erase i:0x0403:0x7151
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
145
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
146 Wire connections
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
147 ================
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
148
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
149 The JTAG signal connections to ADBUS0 through ADBUS3 are fixed by FTDI, and if
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
150 you go against my advice and use FT2232H rather than FT2232C/D, then ADBUS7 is
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
151 also reserved for RTCK. The I/O pins available for reset and other sideband or
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
152 GPIO signals are ADBUS4 through ADBUS7 on FT2232C/D adapters, or ADBUS4 through
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
153 ADBUS6 and ACBUS5 through ACBUS7 on FT2232H. The other pins should be left
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
154 untouched to avoid problems with the 245 FIFO mode which is active in the time
ace3ed1d5ddf Unbuffered FT2232x JTAG article written
Mychaela Falconia <falcon@freecalypso.org>
parents:
diff changeset
155 window being power-up (USB plug-in) and running OpenOCD.