Re,
I put an answer that I got on another forum.
https://community.intel.com/t5/Programmable-Devices/USB-blaster-and-LCOMX256C-Lattice/td-p/1536288From what I understood, the USB Blaster simply does what is asked by the software and should work with this component.
I don’t know any more than that.
Only thing I could read is to add a 4.7kohms/ Ground pull resistor on the TCK signal
I’ll test it tomorrow
THE ANSWER:That is not quite accurate is to what goes on inside the USB-Blaster series of device.
Here is a simple block diagram of a USB Blaster. Basically just a USB to byte parallel FIFO transceiver.
Could also use a USB to serial protocol transceiver with the appropriate change in the interface to the
EPM7064 CPLD device.
In particular the USB Blaster knows NOTHING about the Altera/Intel device bitstream or file encoding per se.
It ONLY knows how to twiddle the JTAG lines based on simple commands sent from the host (JAM STAPL here,
or Quartus Programmer, etc).
So the USB Blaster is really a pretty general purpose USB to JTAG interface device that about any host software
could use to interface to JTAG.
/*
* USB-JTAG, Altera USB-Blaster and compatibles are typically implemented as
* an FTDIChip FT245 followed by a CPLD which handles a two-mode protocol:
*
* _________
* | |
* | AT93C46 |
* |_________|
* __|__________ _________
* | | | |
* USB__| FTDI 245BM |__| EPM7064 |__JTAG (B_TDO,B_TDI,B_TMS,B_TCK)
* |_____________| |_________|
* __|__________ _|___________
* | | | |
* | 6 MHz XTAL | | 24 MHz Osc. |
* |_____________| |_____________|
*
* Protocol details are given in the code below.
*
* It is also possible to emulate this configuration using a single-chip USB
* controller like the Cypress FX2.
*/
From the comments in the JAM STAPL USB Blaster interface driver describing the USB Blaster protocol. The simplest mode
is to just use the BIT BANGING mode with bit 7 set to zero. Then bits 4,1,0 set TDI, TMS, TCK based on their value. TDO can
be read back by setting bit 6.
That's all the USB Blaster does. Really pretty simple just bit banging the JTAG pins. It does not care what kinds of devices
are connected, just that they follow the JTAG serial protocol.
But the complexity is that you have to send JTAG commands to devices that they understand.
And of course any software that wants to use the USB Blaster to talk JTAG needs to follow the below protocol definition.
/* The following code doesn't fully utilize the possibilities of the
* USB-Blaster. It only buffers data up to the maximum packet size of 64 bytes.
*
* Actually, the USB-Blaster offers a byte-shift mode to transmit up to 504 data
* bits (bidirectional) in a single USB packet. A header byte has to be sent as
* the first byte in a packet with the following meaning:
*
* Bit 7 (0x80): Must be set to indicate byte-shift mode.
* Bit 6 (0x40): If set, the USB-Blaster will also read data, not just write.
* Bit 5..0: Define the number N of following bytes
*
* All N following bytes will then be clocked out serially on TDI. If Bit 6 was
* set, it will afterwards return N bytes with TDO data read while clocking out
* the TDI data. LSB of the first byte after the header byte will appear first
* on TDI.
*/
/* Simple bit banging mode:
*
* Bit 7 (0x80): Must be zero (see byte-shift mode above)
* Bit 6 (0x40): If set, you will receive a byte indicating the state of TDO
* in return.
* Bit 5 (0x20): Output Enable/LED.
* Bit 4 (0x10): TDI Output.
* Bit 3 (0x08): nCS Output (not used in JTAG mode).
* Bit 2 (0x04): nCE Output (not used in JTAG mode).
* Bit 1 (0x02): TMS Output.
* Bit 0 (0x01): TCK Output.
*
* For transmitting a single data bit, you need to write two bytes. Up to 64
* bytes can be combined in a single USB packet.
* It isn't possible to read a data without transmitting data.
*/