http://www.usbsolution.com/forum_posts.asp?TID=612
声明:以下所有代码参考 http://www.ixo.de/info/usb_jtag 源文件请下载usb_jtag-20070215-1134.zip,下载地址:http://www.ixo.de/info/usb_jtag/usb_jtag-20070215-1134.zip
我参考的是老的fx2框架版本,fx2.old文件夹下。这个代码相信开发过fx2的网友会比较容易理解一些。但是这个版本只支持jtag模式,不支持as,ps模式。新的版本基于开源的编译器sdcc开发,我不熟悉。所以先从简单的入手。
本来我做了一款用于学习fx2的开发板,也是我考虑了近半年的时间,什么样的开发板有利于我们学习fx2?另外根据对 fx2的应用了解,我觉得大部分的开发都会加入一个cpld逻辑来控制。还有就是单单一片68013的板子,实际上我们是不能真正了解fx2的工作原理。 fx2的难点就在于gpif编程和slave fifo编程,如果没有外围的芯片提供数据源,实际上根本无法了解fx2的本质。所以我做了一款68013+cpld的简单实用的开发板。同时可以利用这 块板子学习cpld,一举两得.
我决定做几个真正的例子,来演示bulk,iso,interrupt,control传输.等准备好了,我会在网站上提供此开发板.希望大家支持.我也希望这块板子能够让初学者快速入门.
由于这块板子有一个cpld,所以就需要一个下载电缆.而我又不愿意用并口下载电缆.而usb下载电缆又很贵.正好我找到了上面我给出的开源程序.经过实践证明,jtag模式非常好用.
首先弄来一根10针的扁平电缆,一端可以插到你的下载插座插座上,另一端将线拨开.各个引脚定义见下面的图,实际上我们只用到其中的4根.
实际上我们要连接到68013上的只需要4根线,TCK,TDO,TMS,TDI.
这四根线要焊到68013的管脚上确实不容易!我费了一个小时的时间终于焊上了(关键是我的焊技太差),也许你的板子的 IO直接引出来了,那么就只需动一下电烙铁了.我在想,如果我当初设计板子的时候,直接把PA口连到EPM3128的几个JTAG引脚就好了.不过还好, 我没挨着引脚焊,实际上我是用了PA0,PA2,PA4,PA6,这样有些间隔还好焊些.
在调试过程中,我多次遇到问题,最主要的问题可能就是在FIRMWARE中定义的引脚和与JTAG下载定义引脚没对应上,所以这点大家在实际做的时候多注意!
由于我用的是PA0=TCK,PA2=TDO,PA4=TMS,PA6=TDI,所以在USBJTAG.C文件中我改成了:
sbit TCK = 0x80 + 0;
sbit TDO = 0x80 + 2;
sbit TMS = 0x80 + 4;
sbit TDI = 0x80 + 6;
#define bmTCKOE bmBIT0
#define bmTDOOE bmBIT2
#define bmTMSOE bmBIT4
#define bmTDIOE bmBIT6
在shift.a51中改为:
TCK BIT 080H+0H
TDO BIT 080H+2H
TMS BIT 080H+4H
TDI BIT 080H+6H
并且设置相应的PA口为输出:
OEA = bmTDIOE | bmTCKOE | bmTMSOE;
如果你用其他口连接,只改动上面的设置应该就可以.
另外,我没有仔细看为什么程序中要摹拟一个EEPROM和主机通讯.实际上返回的信息与ALTERA 的USB BLASTER不符合,所以直接将
if(SETUPDAT[1] == 0x90) // READ EEPROM
{
BYTE addr = (SETUPDAT[4]<<1) & 0x7F;
EP0BUF[0] = PROM[addr];
EP0BUF[1] = PROM[addr+1];
}
改为:
if(SETUPDAT[1] == 0x90) // READ EEPROM
{
EP0BUF[0] = 0;
EP0BUF[1] = 0;
}
并且将VID,PID改成USB-BLASTER的VID(09FB),PID(6001),这样我们的设备枚举后,会加载USB-BLASTER的驱动,并通过QUARTUS程序与我们的设备通讯.
将desc.a51中的
dw 016C0H ;; Vendor ID
dw 006ADH ;; Product ID
改为
dw 0FB09H
dw 00160H
好了,不过USB-BLASTER驱动还会验证是否产品描述符为USB-BLASTER,否则你在QUARTUS的Programmer中还是看不到下载设备,最后我们将:
StringDscr2:
db StringDscr2End-StringDscr2 ;; Descriptor length
db DSCR_STRING
db 'U',00
db 'S',00
db 'B',00
db '-',00
db 'J',00
db 'T',00
db 'A',00
db 'G',00
db '-',00
db 'I',00
db 'F',00
StringDscr2End:
改为:
StringDscr2:
db StringDscr2End-StringDscr2 ;; Descriptor length
db DSCR_STRING
db 'U',00
db 'S',00
db 'B',00
db '-',00
db 'B',00
db 'l',00
db 'a',00
db 's',00
db 't',00
db 'e',00
db 'r',00
StringDscr2End:
好了,这时你启动quartus II 软件,选择Tools>>Programmer,再点击Hardware Setup...按钮,你会看到我们的USB-Blaster设备了.添加一个文件,点击Start,看看是否成功!
最后将我的设置代码传上来供大家参考: