用68013制作JTAG下载线


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,看看是否成功!

 

最后将我的设置代码传上来供大家参考:

USBSOLUTION-USBJTAG.rar

 

你可能感兴趣的:(硬件与接口,设计与实现,descriptor,string,通讯,编程,编译器,byte)