How to program Xilinx CPLDs using TIAO USB Multi-Protocol Adapter (TUMPA) on Windows or Linux

From TIAO's Wiki
Jump to: navigation, search

10 PCS, 10cm x 10cm, 2 layers prototype for $38.80 shipped!








Buy various JTAG cables for your Satellite Receiver, Cable Modem, Wireless Router, Standard Wiggler from http://www.easymg.com and http://www.diygadget.com


Overview

In this tutorial, I am going to show you how to program TIAO Xilinx XC2C64A CoolRunner-II CPLD Dev Board (Reset Glitch) using TIAO USB Multi-Protocol Adapter (TUMPA). This method applies to all devices supported by xc3sprog.

The process is fairly straightforward.

Required Hardware and Software

XC3SPROG Supported Devices

The following is a list of supported devices of xc3sprog as of Rev646:

# IDCODE IR_len ID_Cmd Text
03642093      6    0x9 XC7K30T
03647093      6    0x9 XC7K70T
0364c093      6    0x9 XC7K160T
03651093      6    0x9 XC7K325T
03656093      6    0x9 XC7K410T

03667093      6    0x9 XC7V285T
0366C093      6    0x9 XC7V450T
03671093      6    0x9 XC7V585T
03676093      6    0x9 XC7V855T

03687093      6    0x9 XC7VX4855T

04244093     10  0x3c9 XC6VLX75T(L)
0424a093     10  0x3c9 XC6VLX130T(L)
0424c093     10  0x3c9 XC6VLX195T(L)
04250093     10  0x3c9 XC6VLX240T(L)
04252093     10  0x3c9 XC6VLX365T(L)
04256093     10  0x3c9 XC6VLX550T(L)
0423a093     10  0x3c9 XC6VLX760(L)

04286093     10  0x3c9 XC6VSX315T(L)
04288093     10  0x3c9 XC6VSX475T(L)

042c4093     10  0x3c9 XC6VCX75T
042ca093     10  0x3c9 XC6VCX130T
042cc093     10  0x3c9 XC6VCX195T
042d0093     10  0x3c9 XC6VCX240T

04000093      6    0x9 XC6SLX4
04001093      6    0x9 XC6SLX9
04002093      6    0x9 XC6SLX16
04004093      6    0x9 XC6SLX25  
04024093      6    0x9 XC6SLX25T
04008093      6    0x9 XC6SLX45
04028093      6    0x9 XC6SLX45T
0400e093      6    0x9 XC6SLX75
0402e093      6    0x9 XC6SLX75T
04011093      6    0x9 XC6SLX100
04031093      6    0x9 XC6SLX100T
0401d093      6    0x9 XC6SLX150
0403d093      6    0x9 XC6SLX150T

0286e093     10  0x3c9 XC5VLX30
02896093     10  0x3c9 XC5VLX50
028ae093     10  0x3c9 XC5VLX85
028d6093     10  0x3c9 XC5VLX110
028ec093     10  0x3c9 XC5VLX155
0290c093     10  0x3c9 XC5VLX220
0295c095     10  0x3c9 XC5VLX330

02a56093     10  0x3c9 XC5VLX20T
02a6e093     10  0x3c9 XC5VLX30T
02a96093     10  0x3c9 XC5VLX50T
02aae093     10  0x3c9 XC5VLX85T
02ad6093     10  0x3c9 XC5VLX110T
02aec093     10  0x3c9 XC5VLX155T
02b0c093     10  0x3c9 XC5VLX220T
02b5c093     10  0x3c9 XC5VLX330T

02e72093     10  0x3c9 XC5SX35T
02e9a093     10  0x3c9 XC5SX50T
02ece093     10  0x3c9 XC5SX95T
02f3e093     10  0x3c9 XC5SX260T

04502093     10  0x3c9 XC5VTX150T
0453e093     10  0x3c9 XC5VTX240T

03276093     10  0x3c9 XC5VFX30T
032c6093     10  0x3c9 XC5VFX70T
032d8093     14  0x3c9 XC5VFX100T
03300093     14  0x3c9 XC5VFX130T
03334093     14  0x3c9 XC5VFX200T

0140d093      6	   0x9 XC3S50
01414093      6	   0x9 XC3S200
0141c093      6	   0x9 XC3S400
01428093      6	   0x9 XC3S1000
01434093      6	   0x9 XC3S1500
01440093      6	   0x9 XC3S2000
01448093      6	   0x9 XC3S4000
01450093      6	   0x9 XC3S5000
	      
01C10093      6    0x9 XC3S100E
01C1A093      6    0x9 XC3S250E
01C22093      6    0x9 XC3S500E
01C2E093      6    0x9 XC3S1200E
01C3A093      6    0x9 XC3S1600E

02210093      6    0x9 XC3S50A
02218093      6    0x9 XC3S200A
02220093      6    0x9 XC3S400A
02228093      6    0x9 XC3S700A
02230093      6    0x9 XC3S1400A

02610093      6    0x9 XC3S50AN
02618093      6    0x9 XC3S200AN
02620093      6    0x9 XC3S400AN
02628093      6    0x9 XC3S700AN
02630093      6    0x9 XC3S1400AN

03840093      6    0x9 XC3SD1800
0384E093      6    0x9 XC3SD3400

01008093      6	   0x9 XC2V40
01010093      6	   0x9 XC2V80
01018093      6	   0x9 XC2V250
01020093      6	   0x9 XC2V500
01028093      6	   0x9 XC2V1000
01030093      6	   0x9 XC2V1500
01038093      6	   0x9 XC2V2000
01040093      6	   0x9 XC2V3000
01050093      6	   0x9 XC2V4000
01060093      6	   0x9 XC2V6000
01070093      6	   0x9 XC2V8000

05044093      8    0xfe XCF01S
05045093      8    0xfe XCF02S
05046093      8    0xfe XCF04S

05057093     16   0xfe XCF08P
05058093     16   0xfe XCF16P
05059093     16   0xfe XCF32P

00608093      5	  0x9 XC2S15
0060c093      5	  0x9 XC2S30
00610093      5	  0x9 XC2S50
00614093      5	  0x9 XC2S100
00618093      5	  0x9 XC2S150
0061c093      5	  0x9 XC2S200
	      
#XC95XL
09602093      8  0xfe XC9536XL
09604093      8  0xfe XC9572XL
09608093      8  0xfe XC95144XL
09616093      8  0xfe XC95288XL
#XC95XV
09702093      8  0xfe XC9536XV
09704093      8  0xfe XC9572XV
09708093      8  0xfe XC95144XV
09716093      8  0xfe XC95288XV

#XC2C
06c1c093      8   0x1 XC2C32_VQ44
06c1d093      8   0x1 XC2C32_PC44/64
06c1b093      8   0x1 XC2C32A_QF32
06d1d093      8   0x1 XC2C32A_PC44
06e1b093      8   0x1 XC2C32A_CP56
06e1c093      8   0x1 XC2C32A_VQ44
06e1d093      8   0x1 XC2C32A_PC44/64

06c5a093      8   0x1 XC2C64-PC44
06c5b093      8   0x1 XC2C64-CP132
06c5c093      8   0x1 XC2C64-VQ100
06c5d093      8   0x1 XC2C64-CP56
06c5e093      8   0x1 XC2C64-VQ44

06e59093      8   0x1 XC2C64A-QF48
06e5a093      8   0x1 XC2C64A-PC44
06e5b093      8   0x1 XC2C64A-CP132
06e5c093      8   0x1 XC2C64A-VQ100
06e5d093      8   0x1 XC2C64A-CP56
06e5e093      8   0x1 XC2C64A-VQ44

06d8a093      8   0x1 XC2C128_VQ100
06d8b093      8   0x1 XC2C128_CP132
06d8c093      8   0x1 XC2C128_TQ144
06d8e093      8   0x1 XC2C128_FT256

06d4a093      8   0x1 XC2C256_VQ100
06d4b093      8   0x1 XC2C256_CP132
06d4c093      8   0x1 XC2C256_TQ144
06d4d093      8   0x1 XC2C256_PQ208
06d4e093      8   0x1 XC2C256_FT256

06d5a093      8   0x1 XC2C384_FG324
06d5b093      8   0x1 XC2C384_CP204
06d5c093      8   0x1 XC2C384_TQ144
06d5d093      8   0x1 XC2C384_PQ208
06d5e093      8   0x1 XC2C384_FT256

06d7a093      8   0x1 XC2C512_FG324
06d7c093      8   0x1 XC2C512_PQ208
06d7e093      8   0x1 XC2C512_FT256

#unsupported
#Virtex2
01020093      6     5 XC2V500
#XC95
09502093      8  0xfd XC9536
09504093      8  0xfd XC9572
09506093      8  0xfd XC95108
09508093      8  0xfd XC95144
09512093      8  0xfd XC95216
09516093      8  0xfd XC95288
#XC18
05024093      8  0xfd XC18V01
05025093      8  0xfd XC18V02
05026093      8  0xfd XC18V04
05023093      8  0xfd XC18V512

##Atmel
#list should not care for the version part
0978203f      4   0x1 AT90USB
0958103f      4   0x1 AT90CAN32
0968103f      4   0x1 AT90CAN64
0978103f      4	  0x1 AT90CAN128
0970403f      4	  0x1 ATmega1281
0970303f      4	  0x1 ATmega1280
0970203f      4	  0x1 ATmega128
0960803f      4   0x1 ATMEGA640
0960603f      4   0x1 ATMEGA6450
0960503f      4   0x1 ATMEGA645
0960403f      4   0x1 ATMEGA6490
0960303f      4   0x1 ATMEGA649
0960a03f      4   0x1 ATMEGA644p
0960903f      4   0x1 ATMEGA644
0960603f      4   0x1 ATMEGA650
0960203f      4	  0x1 ATmega64
0950103f      4	  0x1 ATmega323
0950203f      4	  0x1 ATmega32
0940a03f      4	  0x1 ATmega164p
0940703f      4	  0x1 ATmega165(p)
0940403f      4	  0x1 ATmega162
0940503f      4	  0x1 ATmega169(p)
0940303f      4	  0x1 ATmega16
0940403f      4	  0x1 ATmega162
0940503f      4	  0x1 ATmega169

0964203f      4   0x3 ATxmega64A3
0964403f      4   0x3 ATxmega96A3
0964e03f      4   0x3 ATxmega64A1
0964c03f      4   0x3 ATxmega64A3R
0964d03f      4   0x3 ATxmega96A3R
0965003f      4   0x3 ATxmega96A1
0974a03f      4   0x3 ATxmega128AR
0974c03f      4   0x3 ATxmega128A
0984203f      4   0x3 ATxmega256A3
0984303f      4   0x3 ATxmega256A3B

05b1703f      3     0 AT91SAM7X256
#AVR32
01e8203f     5   0x1 AT32AP7000

#STM 
06410041     5   0x1 STM32L1_Med_density
06411041     5   0x1 STM32F2
06412041     5   0x1 STM32F1_Low_density
06414041     5   0x1 STM32F1_High_density
06418041     5   0x1 STM32F1_Connectivity_line
06420041     5   0x1 STM32F1_Low_Med_density_value
06428041     5   0x1 STM32F1_High_density_value
06430041     5   0x1 STM32F1_XL_density
06413041     5   0x1 STM32F4

#ARM Debug
3BA00477     4   0xe ARM_Cortex-M3_r1p1-01rel0
4BA00477     4   0xe ARM-Cortex-M4F_r0p1

#Manufacturer list
00000093        99  0 Xilinx_Unknown
0000003f	99  0 Atmel_Unknown

Software Installation

  • Since I am going to program CPLD, download CPLD's map file from here. Unzip to a directory, e.g. d:\dev\.
  • Download TIAO patched xc3sprog from here, unzip it to a directory. In my example, I unzipped to d:\dev\ directory. After you unzip it, a directory TIAO-xc3sprog will be created. The Windows applications are under win32, Linux applications are in linux32.


Xc3sprog.tumpa.dir.png

Hardware preparation

In our example, we use XC2C64A (RGH Hack Dev Board), it takes +3.3V power. TUMPA provides both +5V and +3.3V, thus a separate power supply to power up CPLD is not needed.

Connect TUMPA's TDI, TDO, TCK, TMS, +3.3V and GND pins to our XC2C64A dev board's TDI, TDO, TCK, TMS, +3.3V and GND respectively using the supplied female to female flexible cable.

The pinout of the JTAG connector (Complete pinout is here: TIAO USB Multi Protocol Adapter User's Manual#20 PIN JTAG Connector):

Tumpa.jtag.connector.1.png
Pin # Description
5 TDI
7 TMS
9 TCK
13 TDO
4, 6, 8, 10, 12, 14, 16, 18, 20 GND

The +3.3V and GND pin can be obtained from TTL Level Serial Connector.

Pinout of TTL Level Serial Connector (Complete pinout: TIAO USB Multi Protocol Adapter User's Manual#TTL Level Serial Connector):

Tumpa.ttl.connector.png
Pin # Description
9 +3.3V
11, 12 GND


The pinout of our XC2C64A Dev Board (JTAG pins and V3.3, GND are on P1):

RGH-PINs.png
Pin # Description
P1.1 TDI
P1.2 TMS
P1.4 TCK
P1.3 TDO
P1.11 GND
P1.12 +3.3V


Now connect TDI, TDO, TCK, TMS, GND and +3.3V together:

Tumpa-rgh-1.jpg

Tumpa-rgh-2.jpg

Tumpa-rgh-3.jpg

Program CPLD

Copy the trinity.jed (or your jed file) to TIAO-xc3sprog\win32 or linux32 directory. In my case, I copied it to TIAO-xc3sprog\win32 directory as I am testing on Windows 7 64bit.

Connect TUMPA to PC using a USB cable:

Tumpa-rgh-4.jpg

Now, open a dos prompt windows, change directory to where you have unzipped TIAO-xc3sprog\win32, run the following command to detect JTAG chain:

xc3sprog -c tumpa -L

The -c tumpa option is to specify using TUMPA JTAG adapter. The -L option is to tell xc3sprog to use FTDI's D2xx driver instead of LibUSB and LIBFTDI. This is recommended.

Your CPLD should be detected:

Xc3sprog.tumpa.png

Now, run the following command to program the CPLD:

xc3sprog -c tumpa -L -m D:\dev\cpld.data trinity.jed

The option -m D:\dev\cpld.data specifies the CPLD map file directory. If you have map files in a different, specify it by -m <CPLD map file location>. -v is for verbose output. The last parameter is the jed file you wish to write to CPLD. In my case, it is trinity.jed. xc3sprog will program the jed to CPLD and verify it.

Xc3sprog.tumpa.xc2c64a.png


Now, you have successfully programmed our RGH dev board.

There are other commands available from xc3sprog, such as erase, read. Run xc3sprog without any parameter to print out the usage:

XC3SPROG (c) 2004-2011 xc3sprog project $Rev: 646 $ OS: Windows
Free software: If you contribute nothing, expect nothing!
Feedback on success/failure/enhancement requests:
	http://sourceforge.net/mail/?group_id=170565 
Check Sourceforge for updates:
	http://sourceforge.net/projects/xc3sprog/develop

usage:	xc3sprog -c cable [options] <file0spec> <file1spec> ...
	filespec is filename:action:offset:style:length
	action on of 'w|W|v|r|R'
	w: erase whole area, write and verify
	W: Write with auto-sector erase and verify
	v: Verify device against filename
	r: Read from device,write to file, don't overwrite existing file
	R: Read from device and write to file, overwrite existing file
	Default action is 'w'

	Default offset is 0

	style: One of BIT|BIN|MCS|IHEX|HEX
	BIT: Xilinc .bit format
	BIN: Binary format
	MCS: XILINX Prom format
	IHEX: INTEL Hex format (= MCS with bits reversed)
	HEX:  Hex dump format
	Default for FPGA|SPI|XCF is BIT
	Default for CPLD is JED
	Default for XMEGA is IHEX
	Default length is whole device

Possible options:
   -p val[,val...]  Use device at JTAG Chain position <val>.
             Default (0) is device connected to JTAG Adapter TDO.
   -e        Erase whole device.
   -h        Print this help.
   -I[file]  Work on connected SPI Flash (ISF Mode),
             after loading 'bscan_spi' bitfile if given.
   -j        Detect JTAG chain, nothing else (default action).
   -l        Program lockbits if defined in fusefile.
   -m <dir>  Directory with XC2C mapfiles.
   -R        Try to reconfigure device(No other action!).
   -T val    Test chain 'val' times (0 = forever) or 10000 times default.
   -J val    Run at max with given JTAG Frequency, 0(default) means max. Rate of device
             Only used for FTDI cables for now
   -D        Dump internal devlist and cablelist to files
             In ISF Mode, test the SPI connection.
   -v        Verbose output.

Programmer specific options:
   -d        (pp only     ) Parallel port device.
   -s num    (usb devices only) Serial number string.
   -L        (ftdi only       ) Don't use LibUSB.

Device specific options:
   -E file   (AVR only) EEPROM file.
   -F file   (AVR only) File with fuse bits.









Buy various JTAG cables for your Satellite Receiver, Cable Modem, Wireless Router, Standard Wiggler from http://www.easymg.com and http://www.diygadget.com



10 PCS, 10cm x 10cm, 2 layers prototype for $38.80 shipped!