Connect Four (Well Six if You Count VDD and GND)
Now comes the easy part – just connect the boards and let it rip! The JTAG interface of the CMOD board does NOT include a RESET pin, which seems to be typical. So if you really munge things up in the state machine, remember there’s no hardware reset – so just unplug and replug USB. By cutting the 5V USB supply to the FT232, you’ll also power down the CMOD. You could alternately just disconnect the 3.3V supply to the CMOD, but it’s way easier to replug USB.
Below is the wiring used in the demo tool. Remember, you have the freedom to switch around any of the JTAG lines to any of the FT232 bitbang pins if you don’t like this wiring below. In these examples, we will pretend that the pinout is as it would be if the USB connecter were the IC notch. We will not count the 4-pin header at the bottom, so pin 1 is top right below, and pin 18 is bottom right. As it stands, the wiring diagram is as follows

Fig 3 – Wiring Diagram for Sparkfun FT232 as JTAG Programmer
Here’s that wiring diagram in text form for you colorblind hackers out there.
- CMOD VCC – FT232 +3.3V. Either tie to the header we’ve shown here, or pin 5
- GND – FT232 GND. Either tie to the header as we’ve shown here, or pin 16
- TCK – FT232 RI, Pin 15
- TDO – FT232 DCD, Pin 18
- TDI – FT232 DSR, Pin 17
- TMS – FT232 RXD, Pin 14
If it’s the first time you’re running the tool with the CPLD connected, it’s best to single step. That way, you can see each write/read of data and the device’s reply which is VERY useful for debugging. After you have verified that the thing is working properly, go ahead and untick the Single Step checkbox and let it rip.
The software is more reliable when run from the .exe than it is in the VB6 debugger. Specifically, single stepping the read data section – between the check for data in the buffer and the actual read of the buffer – can be unreliable if stepped. No idea why, but that section of code is so bloody simple it must be something due to calling with VB6. If you want to debug this section, then set a trap on the line AFTER the actual read of the buffer so the tool can query and read the buffer at a fairly quick pace.
Well folks, that’s pretty much it. Please download and play around with the Openschemes_FT232_SVF_Player. This download contains both source and executable, as well as a copy of the old version for reading and writing one byte at a time in case your interface is flaky and you can’t stand the RAW BIT BANG FURY! Enjoy.
NOTE: The software in the link above is now outdated.
We will always update this section with a link to the newest version, and the release info on what the heck was changed.
Go to Openschemes FT232 SVF Player v0.11





Link for the Openschemes_FT232_SVF_Player appears to be broken.
The link is working.
The software doesnt works. Firstly, it requires to have directory c:/temp created. I figured that out using procmon. Now, it doesnt detects my ft232r (No Interfaces yet.. in interfaces list). I’m sure that FT232R is connected and configured: I can use it with my terminal. I tryed both kinds of drivers: D2xx and VCP with no success. I’m runnung windows 7 OS. It would be great, If you figure out what is happening and fix the program. Thanks.
Good catch on the temp directory, a corrected version will be up soon. As far as the device description, what was the device description you had that did not contain FT232R? It would be dangerous to open it up to any interface, but easy to add another or a few more descriptions of common boards.
It was my own board, so I had description field filled with my product’s name.
Oh, The problem was in device description. It has to contain “FT232R” string. Thank you!
the nextstate array is wrong.
0×0: Test-logic-reset 0 1
0×1: Run-test/Idle 1 0
0×2: Select-DR-scan 3 9
should be
0×0: Test-logic-reset 1 0
0×1: Run-test/Idle 1 2
0×2: Select-DR-scan 3 9
Chears
Good eye! Rest assured that the code is right, it just didn’t get translated to the text. The text is now updated.
Hi, does it work with FT232BM? Interface has been recognized, but none activity on selected signals..p.
Good question. We’ve looked it up on the FTDI page, and it seems that FT232B does NOT have bit bang mode. FT232R does have it.
..FT232BM does support bitbang mode – ie see app note AN232BM-01 (..”The purpose of this mode was intended to be used to program FPGA devices..” y2002). Would be nice to get it working..There is a lot of modules around..p.
Good find – we stand corrected. It looks like the BM device contains a non-synchronous bit bang mode. With a little work, the tool could probably be adapted to use this FT232BM device, but the speed might be slower. Give it a try!
..and the FT245BM (parallel FIFO bi-directional data transfer up to 1MB/sec).. also worth considering. And much easier to solder
. Thanks.
success! i wanted to tell you that with this instruction i was able to ‘tag my [device]. thank you!
Glad to hear that it worked for you. Your comment has been cleaned a little, to remove identifying remarks. So what CPLD did you use?
I have a question – does this software work with FT2232? Is FT2232 faster?
No, just FT232. There’s a million tools for jtag with 2232.
For me, there wasn’t any broken piece of metal. It was a screw that was ssupoped to hold down the circuit board, just rolling around loose. All the other screws on that card were also loose. Tightened them and re-installed the loose one. Now maybe it won’t be the cause of any more unexpected freezes and resets. Thanks for the help in getting the case opened.Funny, just last week found a loose screw in our InFocus projector. That one let heat out of the lamp assembly, shutting the unit off!
It works with XC9572XL!!! Thank you!!!!
I will programing a Xc2c64a chip.
I receive always this faliure
here is a log
“Opening c:\temp\falcon.svf
> // Created using Xilinx Cse Software [Lab Tools - 13.2]
> // Date: Mon Sep 26 14:40:05 2011
> TRST OFF;
No control over RST, ignoring
> ENDIR IDLE;
Set IR end state to IDLE
> ENDDR IDLE;
Set DR end state to IDLE
> STATE RESET;
> STATE IDLE;
> FREQUENCY 1E6 HZ;
My frequency is very low, ignoring this directive..
> //Operation: Program -p 0 -e -v
> TIR 0 ;
0 leading IR bits OK
> HIR 0 ;
0 trailing IR bits OK
> TDR 0 ;
0 leading DR bits OK
> HDR 0 ;
0 trailing DR bits OK
> TIR 0 ;
0 leading IR bits OK
> HIR 0 ;
0 trailing IR bits OK
> HDR 0 ;
0 trailing DR bits OK
> TDR 0 ;
0 leading DR bits OK
> //Loading device with ‘idcode’ instruction.
> SIR 8 TDI (01) SMASK (ff) ;
lNumBytes= 24
Sent: 01
Got: 00
> SDR 32 TDI (00000000) SMASK (ffffffff) TDO (f6e5f093) MASK (0fff8fff) ;
lNumBytes= 96
Sent: 00000000
Got: 00000000
Masked Expectation: 06E58093, Masked Result: 00000000 Fail! Bailing out…
”
Waht is the problem?
Can you help me?
You are only receiving 0′s for any communication. Your wiring is not connected properly, or your pin selection is wrong.