Revision 475
Added by markw over 8 years ago
eclaireXL/hardware/test/boundary_scan/usb_blaster_protocol.txt | ||
---|---|---|
http://sf.net/apps/mediawiki/urjtag/index.php?title=Cable_Altera_USB-Blaster
|
||
----------------------------------------------------------------------------
|
||
|
||
Altera USB-Blaster
|
||
------------------
|
||
|
||
General
|
||
-------
|
||
_________
|
||
| |
|
||
| AT93C46 |
|
||
|_________|
|
||
__|__________ _________
|
||
| | | |
|
||
USB__| FTDI 245BM |__| EPM7064 |__JTAG (B_TDO,B_TDI,B_TMS,B_TCK)
|
||
|_____________| |_________|
|
||
__|__________ _|___________
|
||
| | | |
|
||
| 6 MHz XTAL | | 24 MHz Osc. |
|
||
|_____________| |_____________|
|
||
|
||
|
||
Quoting from ixo.de (http://www.ixo.de/info/usb_jtag/)
|
||
usb_jtag/device/c51/usbjtag.c comments:
|
||
|
||
usb_jtag firmware now happens to behave just like the combination of
|
||
FT245BM and Altera-programmed EPM7064 CPLD in Altera's USB-Blaster.
|
||
The CPLD knows two major modes: Bit banging mode and Byte shift mode.
|
||
It starts in Bit banging mode. While bytes are received from the host
|
||
on EP2OUT, each byte B of them is processed as follows:
|
||
|
||
Bit banging mode
|
||
----------------
|
||
1. Remember bit 6 (0x40) in B as the "Read bit".
|
||
2. If bit 7 (0x80) is set, switch to Byte shift mode for the coming X
|
||
bytes ( X := B & 0x3F ), and don't do anything else now.
|
||
3. Otherwise, set the JTAG signals as follows:
|
||
- TCK/DCLK high if bit 0 was set (0x01), otherwise low
|
||
- TMS/nCONFIG high if bit 1 was set (0x02), otherwise low
|
||
- nCE high if bit 2 was set (0x04), otherwise low
|
||
- nCS high if bit 3 was set (0x08), otherwise low
|
||
- TDI/ASDI/DATAO high if bit 4 was set (0x10), otherwise low
|
||
- Output Enable/LED active if bit 5 was set (0x20), otherwise low
|
||
4. If "Read bit" (0x40) was set, record the state of TDO(CONF_DONE) and
|
||
DATAOUT/(nSTATUS) pins and put is as a byte( (DATAOUT<<1)|TDO) in the
|
||
output FIFO _to_ the host.
|
||
|
||
Byte shift mode
|
||
---------------
|
||
1. Load shift register with byte from host
|
||
2. Do 8 times (i.e. for each bit of the byte; implemented in shift.a51)
|
||
- if nCS=1, set carry bit from TDO, else set carry bit from DATAOUT
|
||
(Active Serial mode)
|
||
- Rotate shift register through carry bit
|
||
- TDI := Carry bit
|
||
- Raise TCK, then lower TCK.
|
||
3. If "Read bit" was set when switching into byte shift mode, record the
|
||
shift register content and put it into the FIFO to the host.
|
Also available in: Unified diff
Taken from https://github.com/swetland/jtag