Altera usb blaster 制作(绝对详细资料)
版本:max3378 缓冲,epm240 作为cpld器件,ft245r usb 芯片
序:其实altera的usb blaster的原理图早就公开了,只是芯片内部的程序一直没有公开,不知道什么时候网上开始有人仿制出来了,据说最开始是一个老外公开的代码,接着国人开发发辉我们的优势-仿!
遍地开花,我也是其中的一个,当然就是为了开发方便,工欲善其事,必先利其器!usb blaster比起病口的blaster还是有很大的优势的,当然成本也高很多!目前来看,下载的速度不是瓶颈,quartus的编译速度才让人忍受,不如正题。
首先,usb blaster 的原理图基本没什么,重要的是有2个芯片,一个是cpld内部的程序,一个是usb芯片的固件程序。所以一共有3个需要准备的资料,当然你还需要一个并口的下载线!
1、原理图:
SCH文件
PS:这个板是07年6月份画的,后来改第二版的时候,直接在原理图上修改,忘了备份了,所以最初的原理图没有了,现在的图是我根据pcb 还原的,应该没有什么错误,但是不敢保证,所以仅供参考!
bom文件
2、CPLD程序:
VHDL程序
TCL文件
3、usb 固件:
驱动程序:CDM_Setupexe
ept文件:alteraept
软件:
1 cpld 下载软件:quartus或者maxplusII
2 usb 固件下载软件:MProg30_Setupexe
测试流程:
前期准备,焊接好板子,保证没有焊接错误或者虚焊;安装了quartus或者maxplusII;安装了CDM_Setupexe;手上有一个可以给cpld下载程序的下载线(usb的或者并口的)
1建立cpld工程文件,导入 vhdl 程序和tcl文件
2管脚锁定
3编译、下载(下载程序到cpld emp240内部)
4下载usb固件程序
5打开quartus 加载 usb blaster 驱动
其他资料:
1别人的原理图(仅供参考):
Altera 原厂:Altera原厂的原理图
sm fish的:sm_fish的原理图
另外一个网友的:网友的原理图
PS:本文的版本是将 sm fish 和 另外一个网友综合的
2 tcl文件的使用,管脚锁定。
说明:
1网上现在公开的usb blaster
有很多版本,都是改乱套了的。好像altera公开的版本上没有加入缓存器,有的加入了也是244的版本(只见过一款,其他的还不知道)有人用max3378做缓冲,优点是可以支持全系列的altera芯片,支持低电压的fpga和cpld;缺点就是max3378的价格高!(自己diy的话,可以向maxim公司申请样片)淘宝上公开的价格是20元一片,
一个板子上需要2片作为缓冲。还有244的版本,曾经做了一块244的,但是把244的输入输出画反了,现在也懒得重新开板制作了,毕竟也不想公开出售,就是自己用。
2usb 芯片的选型同样有2种或者多种,选用的是 ft245rl,还有用ft245bm的。
ft245rl 把时钟和eeprom都集成到内部了,双列的封装;
ft245bm 四面的封装,需要时钟以及一个存储芯片,一般用93c46,为了方便,直接画的ft245rl。
3cpld的选用,这个没什么好说的了,只要cpld的资源够用,选用那款都可以,管脚锁定就ok了 !
4版本,有了上面的3条相互组合就可以有很多的版本来了,可以说我的是“版本原创”起码没有直接用别人的电路图,呵呵,当然程序还是别人的,估计是老外的!
!千万注意 !
制作不成功,怎样检查:
1焊接检查,从新焊接一遍 cpld 晶振 usb芯片和max3378芯片,再次测量电压 !
2从 Mprog 中 读取已经 写入的文件,查看是否已经写入
3观看 晶振是否起振,用示波器,或者自己写一个测试程序,使下载指示灯输出
检测 cpld 是否工作正常
4如果还不要用,我也没有办法了
贴图:
pcb 3D图:
焊接成品:
tcl 文件用法
打开 quartus (maxplus II不会用了,也没有安装)
建立工程 编译通过之后,下载程序之前,需要把芯片的管脚进行对应,可以如3楼 pulan说的,自己一个一个的从 pin 上对应,
专业一点的都是制作 tcl 文件,类似xilinx中的 ucf 文件 ,这样的好处是,修改方便, *** 作好
*** 作步骤:确保编译通过之后,
按下 快捷键 Alt + 2 打开 tcl *** 作台
之后在 “#”后输入:source ubtcl 回车就ok了,
可以打开 pin planner 看一下 对应的情况
之后,Ctrl + l 编译连接,之后就可以用并口的 下载线 download 程序到 emp240中了
Altera usb blaster 制作全套资料(以上10个文件打包下载):>
USB转串口CH341
调试程序如下:
#include<reg51h>
#define uchar unsigned char
#define uint unsigned int
sbit DI=P3^5;
sbit RW=P3^6;
sbit E=P3^7;
sbit CS1=P3^3;
sbit CS2=P3^4;
sbit RST=P3^2;
uchar code hzXXJC[256] = {
0x00,0xFE,0x01,0x02,0xE0,0x00,0xE6,0x08,0xF0,0x0C,0xE2,0x01,0x00,0xC0,0x3F,0x20,
0x00,0xFF,0x00,0x00,0x1F,0x00,0x7F,0x40,0x4F,0x40,0x7F,0x00,0x06,0x61,0x8C,0x10,
0x00,0x04,0x44,0xE4,0x14,0x0C,0x74,0x84,0x34,0x44,0x04,0x00,0xFE,0x00,0x80,0x40,
0x00,0x08,0x08,0x0A,0x12,0x22,0xC2,0x22,0x12,0x08,0x12,0x14,0xFF,0x16,0x11,0x10,
0x00,0x04,0x04,0x04,0x04,0x04,0xFC,0x04,0x04,0x04,0x04,0x00,0xFE,0x80,0x40,0x20,
0x00,0x20,0x21,0x21,0x21,0x21,0x27,0x21,0x21,0xE1,0x39,0x26,0x23,0x20,0x20,0x00,
0x00,0x04,0x04,0x04,0x04,0x04,0x04,0xFC,0x04,0x04,0x04,0x04,0xFC,0x04,0x04,0x04,
0x00,0x40,0x41,0x41,0x41,0x41,0x41,0x7F,0x40,0x40,0x40,0x40,0x43,0x40,0x40,0x00,
0x00,0x0C,0x90,0xA0,0x80,0xFE,0x81,0xB2,0x88,0x04,0xF0,0x0C,0x02,0xC0,0x3F,0x20,
0x00,0x40,0x4F,0x4A,0x4A,0x4A,0x6A,0x5A,0x4F,0x40,0x7F,0x00,0x07,0x60,0x84,0x08,
0x00,0x0E,0x02,0xF2,0x22,0x22,0x22,0x22,0xFC,0x20,0x20,0x20,0x20,0xF0,0x00,0x00,
0x00,0x00,0x00,0x1F,0x12,0x12,0x12,0x12,0xFF,0x12,0x12,0x12,0x12,0x1F,0x00,0x00,
0x00,0x0E,0x02,0xF2,0x22,0x22,0x22,0x22,0xFC,0x20,0x20,0x20,0x20,0xF0,0x00,0x00,
0x00,0x00,0x00,0x1F,0x12,0x12,0x12,0x12,0xFF,0x12,0x12,0x12,0x12,0x1F,0x00,0x00,
0x00,0x40,0x44,0x4E,0xD8,0x60,0x40,0x40,0xF0,0x58,0x44,0x42,0x00,0xFF,0x00,0x00,
0x00,0x00,0x08,0x08,0x7F,0x08,0x08,0x08,0x7F,0x08,0x08,0x40,0xE8,0x1F,0x04,0x02,
};
uchar code hzdoo[256] = {
0x00,0x00,0xFC,0x02,0x04,0xC0,0x30,0x08,0x24,0x72,0xA0,0x30,0x10,0xD0,0x38,0x10,
0x00,0x00,0x0F,0x08,0x08,0xFF,0x08,0x08,0x04,0x24,0x24,0x24,0x27,0x24,0x24,0x04,
0x00,0x00,0x7E,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x7E,0x00,0xE0,0x18,0x04,0x02,
0x00,0x00,0x1E,0x12,0x12,0x12,0x52,0x72,0x92,0x12,0x12,0x12,0x1F,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xFC,0x04,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x1C,0x13,0x00,0x13,0x1C,0x10,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6C,0x6C,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0xE0,0x40,0x40,0x40,0x40,0xFF,0x40,0x40,0x40,0x40,0xE0,0x00,0x00,
0x00,0x00,0x10,0x3F,0x10,0x10,0x10,0x10,0xFF,0x10,0x10,0x10,0x10,0x3F,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0xFE,0x01,0x02,0x00,0x00,0x00,0x00,0xFF,0x00,0x80,0x40,
0x00,0x02,0x22,0x22,0x22,0x23,0x22,0x22,0x22,0x02,0x44,0xCE,0x63,0x21,0x10,0x08,
0x00,0x02,0x32,0x7A,0xA2,0x22,0x32,0x12,0x92,0x52,0x32,0x14,0x04,0xF8,0x04,0x02,
0x00,0x04,0x44,0x44,0x44,0x45,0x44,0x46,0x45,0x44,0x04,0x00,0x20,0x73,0x82,0x02,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6C,0x6C,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
};
uchar code hzWQD[256] = {
0x00,0x8C,0x90,0x20,0x0E,0x02,0x02,0x32,0x42,0x02,0x3C,0x00,0x80,0x9C,0x06,0x00,
0x00,0x00,0x20,0x21,0x21,0x22,0x24,0x29,0xF2,0x2C,0x22,0x21,0x20,0x20,0x20,0x00,
0x00,0x04,0x06,0x0C,0x30,0xC0,0x00,0x00,0xE0,0x18,0x04,0x02,0xFF,0x80,0x40,0x20,
0x00,0x04,0x04,0x34,0x64,0x87,0x04,0xFF,0x04,0x04,0x04,0x04,0xFF,0x00,0x0C,0x10,
0x00,0x00,0x00,0x00,0x00,0xFE,0x01,0x02,0x00,0x00,0x00,0x00,0xFF,0x00,0x80,0x40,
0x00,0x02,0x22,0x22,0x22,0x23,0x22,0x22,0x22,0x02,0x44,0xCE,0x63,0x21,0x10,0x08,
0x00,0x02,0x32,0x7A,0xA2,0x22,0x32,0x12,0x92,0x52,0x32,0x14,0x04,0xF8,0x04,0x02,
0x00,0x04,0x44,0x44,0x44,0x45,0x44,0x46,0x45,0x44,0x04,0x00,0x20,0x73,0x82,0x02,
0x00,0x00,0xFC,0x02,0x04,0xC0,0x30,0x08,0x24,0x72,0xA0,0x30,0x10,0xD0,0x38,0x10,
0x00,0x00,0x0F,0x08,0x08,0xFF,0x08,0x08,0x04,0x24,0x24,0x24,0x27,0x24,0x24,0x04,
0x00,0x00,0x7E,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x7E,0x00,0xE0,0x18,0x04,0x02,
0x00,0x00,0x1E,0x12,0x12,0x12,0x52,0x72,0x92,0x12,0x12,0x12,0x1F,0x00,0x00,0x00,
0x00,0x08,0x0C,0x18,0x10,0x20,0x40,0x80,0xFF,0x80,0x60,0x10,0x08,0x08,0x04,0x04,
0x00,0x02,0x02,0x12,0x12,0x12,0x12,0x12,0xFF,0x13,0x12,0x12,0x12,0x12,0x02,0x02,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x6C,0x6C,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, };
/ ----------- LCD 驱动部分函数说明-------------/
void delayy(uint v); / 延时子函数说明 /
void reset();
void hzXXJCC(); / 复位子函数说明 /
void lcdinit(); / LCD初始化子函数说明 /
void clear_disp(); / 清显示屏子函数说明 /
void dispon_off(uchar on); / 显示屏开/关子函数说明 /
void wcode(uchar c,uchar cs1,uchar cs2); / 写命令子函数说明 /
void set_adr(uchar x,uchar y, uchar cs1,uchar cs2); / 设置显示位置(页址x,
列址y,左区cs1,右区cs2) 子函数说明 /
void set_startline(uchar z); / 设置显示起始行z子函数说明 /
void wdata(uchar c,uchar cs1,uchar cs2); / 写显示数据子函数说明 /
void hzXXJC_disp(); / 显示汉字子函数说明 /
void hzWQD_disp();
void hzdoo_disp();
void hzdee_disp();
void key(void);
void delay();
void delays();
int k,i;
void delay()
{for(i=0;i<30000;i++);}
uchar zdzt;
void main(void)
{delayy(10);
reset(); / 复位 /
lcdinit(); / 初始化 /
delayy(10);
hzXXJCC();
{
while(1)
{key();
if(zdzt==0x0c)
{P0=0xff;
hzWQD_disp();} / 初始化 /
else if(zdzt==0)
{P0=0xfe;
hzdee_disp();
delay();
}
else if(zdzt==0x0b)
{P0=0xfd;
hzdoo_disp();
delay();
}
}
}
}
void key(void)
{if(!(P1&0x01))
{delays();
while(!(P1&0x01));
zdzt=0;
}
else if(!(P1&0x02))
{delays();
while(!(P1&0x02));
zdzt=0x0b;
}
else if(!(P1&0x04));
{delays();
while(!(P1&0x04))
zdzt=0x0c;
}
}
void delays()
{for(k=0;k<1200;k++);}
void delayy(uint v)
{while(v--);}
/ ---------------复位子函数部分--------------/
void hzXXJCC()
{
P0=0xff;
hzXXJC_disp();
delay();
delay();
key();
if(zdzt==0x0c)
{P0=0xff;
hzWQD_disp();}
else
{delay();
delay();
P0=0xfe;
hzdee_disp();
delay();
P0=0xfd;
hzdoo_disp();}
}
void reset()
{RST=0;
delayy(20);
RST=1;
delayy(20);
}
/ ---------------LCD初始化子函数部分--------------/
void lcdinit()
{clear_disp(); / 清显示屏 /
dispon_off(0); / 关显示 /
dispon_off(1); / 开显示 /
set_startline(0); / 设置起始行为第0行 /
}
/ ---------------清显示屏子函数部分--------------/
void clear_disp()
{uchar i,j,x;
for(i=0;i<8;i++)
{x=i+0xb8;
wcode(x,1,1); / 设置左右屏页地址 /
wcode(0x40,1,1); / 设置左右屏初始列地址 /
for(j=0;j<64;j++) / 每清一位0, 列地址会自动加1 /
wdata(0x00,1,1); / 向左右屏设置地址处写显示数据0x00,即清显示屏 /
}
}
/ ---------------写命令子函数部分--------------/
void wcode(uchar c,uchar cs1,uchar cs2)
{CS1=cs1;
CS2=cs2;
DI=0;
RW=0;
P2=c;
E=0;
delayy(10);
E=1;
delayy(10);
E=0;
}
/ ---------------显示屏开/关子函数部分--------------/
void dispon_off(uchar on)
{on=on+0x3e;
wcode(on,1,1);
}
/ ---------------设置显示位置(页址x列址y)子函数部分--------------/
void set_adr(uchar x,uchar y, uchar cs1,uchar cs2)
{ x=x+0xb8;y=y+0x40;
wcode(x,cs1,cs2);
wcode(y,cs1,cs2);
}
/ ---------------设置显示起始行z子函数部分--------------/
void set_startline(uchar z)
{z=z+0xc0;
wcode(z,1,1);
}
/ ---------------写显示数据子函数部分--------------/
void wdata(uchar c,uchar cs1,uchar cs2)
{CS1=cs1;
CS2=cs2;
DI=1;
RW=0;
P2=c;
E=0;
delayy(10);
E=1;
delayy(10);
E=0;
}
void hzXXJC_disp() / 显示汉字点阵数组hzdot[]中序号为order的汉字 /
{uchar h,order;
set_adr(6,0,1,1); / 设置左右区、第4页(汉字上半部)、第0列地址 /
for(order=0;order<4;order++)
{for(h=0;h<16;h++)
{wdata(hzXXJC[order32+h],1,0); / 写左区汉字上半部 /
wdata(hzXXJC[order32+h+128],0,1); / 写右区汉字上半部 /
}
}
set_adr(7,0,1,1); / 设置左右区、第5页(汉字下半部)、第0列地址 /
for(order=0;order<4;order++)
{for(h=0;h<16;h++)
{wdata(hzXXJC[order32+h+16],1,0); / 写左区汉字下半部 /
wdata(hzXXJC[order32+h+16+128],0,1); / 写右区汉字下半部 /
}
}
}
void hzWQD_disp() / 显示汉字点阵数组hzdot[]中序号为order的汉字 /
{uchar h,order;
set_adr(4,0,1,1); / 设置左右区、第4页(汉字上半部)、第0列地址 /
for(order=0;order<4;order++)
{for(h=0;h<16;h++)
{wdata(hzWQD[order32+h],1,0); / 写左区汉字上半部 /
wdata(hzWQD[order32+h+128],0,1); / 写右区汉字上半部 /
}
}
set_adr(5,0,1,1); / 设置左右区、第5页(汉字下半部)、第0列地址 /
for(order=0;order<4;order++)
{for(h=0;h<16;h++)
{wdata(hzWQD[order32+h+16],1,0); / 写左区汉字下半部 /
wdata(hzWQD[order32+h+16+128],0,1); / 写右区汉字下半部 /
}
}
}
void hzdoo_disp() / 显示汉字点阵数组hzdot[]中序号为order的汉字 /
{uchar h,order;
set_adr(4,0,1,1); / 设置左右区、第4页(汉字上半部)、第0列地址 /
for(order=0;order<4;order++)
{for(h=0;h<16;h++)
{wdata(hzWQD[order32+h],1,0); / 写左区汉字上半部 /
wdata(hzdoo[order32+h+128],0,1); / 写右区汉字上半部 /
}
}
set_adr(5,0,1,1); / 设置左右区、第5页(汉字下半部)、第0列地址 /
for(order=0;order<4;order++)
{for(h=0;h<16;h++)
{wdata(hzWQD[order32+h+16],1,0); / 写左区汉字下半部 /
wdata(hzdoo[order32+h+16+128],0,1); / 写右区汉字下半部 /
}
}
}
void hzdee_disp() / 显示汉字点阵数组hzdot[]中序号为order的汉字 /
{uchar h,order;
set_adr(4,0,1,1); / 设置左右区、第4页(汉字上半部)、第0列地址 /
for(order=0;order<4;order++)
{for(h=0;h<16;h++)
{wdata(hzWQD[order32+h],1,0); / 写左区汉字上半部 /
wdata(hzdoo[order32+h],0,1); / 写右区汉字上半部 /
}
}
set_adr(5,0,1,1); / 设置左右区、第5页(汉字下半部)、第0列地址 /
for(order=0;order<4;order++)
{for(h=0;h<16;h++)
{wdata(hzWQD[order32+h+16],1,0); / 写左区汉字下半部 /
wdata(hzdoo[order32+h+16],0,1); / 写右区汉字下半部 /
}
}
}
把程序写入单片机!下串口调试软件和下位机对接!随便发送命令~!如果能正常接收!说明你的单片机和PC机通信成功!
FTDI类型的芯片如FT245等或者PL2303都是USB转串口的芯片。STM32增强型的单片机或者互联型的单片机有USB接口,同时ST公司提供了USB固件库,如果你不用USB转串口,可以自己参照例程编写一个USB通信程序,不过一般不是通用的USB类的话,是需要自己写PC端的驱动程序的。
楼主的问题不好,C#只是一种编程语言,你要开发C#的应用软件,据我所知,在PC端对USB口的应用和普通文件 *** 作相差不大,但是要考虑异步IO的问题。主要还是STM32端的程序和PC的驱动的问题。
因为所有的USB通信都是由PC发起的,而单片机串口的最高速率一般为115200bps,加上上位机轮询的时间间隔,传输的速度往往只有100KByte/S左右,如果速度上有要求,建议放弃USB转串口的方案。
1现在市面上99%的都是用M8的端口去模拟USB的,用FT245是可以降低一些难度,但是增加成本。
2无论哪种方式,肯定要给M8写入固件才能运行。单片机没程序能运行吗?
3多余的IO口当然可以做别的使用,看你做什么用了。
4如果想以后从USB口烧录程序,那需要使用单片机的bootloader功能,就是一个引导程序,在启动时判断是否满足USB烧录的条件,否则就是正常的USB-ISP功能。但是存储bootloader程序的ROM区域大小是有限的,最大只有1024word,所以程序不能写的很大,使用第1种方式模拟USB的程序都很大,bootloader区肯定装不下,那就只能使用FT245了,这能化简程序,缩短程序的长度,但能不能放下还是个问题。
Altera usb blaster 制作(绝对详细资料)
版本:max3378 缓冲,epm240 作为cpld器件,ft245r usb 芯片
序:其实altera的usb blaster的原理图早就公开了,只是芯片内部的程序一直没有公开,不知道什么时候网上开始有人仿制出来了,据说最开始是一个老外公开的代码,接着国人开发发辉我们的优势-仿!
遍地开花,我也是其中的一个,当然就是为了开发方便,工欲善其事,必先利其器!usb blaster比起病口的blaster还是有很大的优势的,当然成本也高很多!目前来看,下载的速度不是瓶颈,quartus的编译速度才让人忍受,不如正题。
首先,usb blaster 的原理图基本没什么,重要的是有2个芯片,一个是cpld内部的程序,一个是usb芯片的固件程序。所以一共有3个需要准备的资料,当然你还需要一个并口的下载线!
1、原理图:
SCH文件
PS:这个板是07年6月份画的,后来改第二版的时候,直接在原理图上修改,忘了备份了,所以最初的原理图没有了,现在的图是我根据pcb 还原的,应该没有什么错误,但是不敢保证,所以仅供参考!
bom文件
2、CPLD程序:
VHDL程序
TCL文件
3、usb 固件:
驱动程序:CDM_Setupexe
ept文件:alteraept
软件:
1 cpld 下载软件:quartus或者maxplusII
2 usb 固件下载软件:MProg30_Setupexe
测试流程:
前期准备,焊接好板子,保证没有焊接错误或者虚焊;安装了quartus或者maxplusII;安装了CDM_Setupexe;手上有一个可以给cpld下载程序的下载线(usb的或者并口的)
1建立cpld工程文件,导入 vhdl 程序和tcl文件
2管脚锁定
3编译、下载(下载程序到cpld emp240内部)
4下载usb固件程序
5打开quartus 加载 usb blaster 驱动
其他资料:
1别人的原理图(仅供参考):
Altera 原厂:Altera原厂的原理图
sm fish的:sm_fish的原理图
另外一个网友的:网友的原理图
PS:本文的版本是将 sm fish 和 另外一个网友综合的
2 tcl文件的使用,管脚锁定。
说明:
1网上现在公开的usb blaster
有很多版本,都是改乱套了的。好像altera公开的版本上没有加入缓存器,有的加入了也是244的版本(只见过一款,其他的还不知道)有人用max3378做缓冲,优点是可以支持全系列的altera芯片,支持低电压的fpga和cpld;缺点就是max3378的价格高!(自己diy的话,可以向maxim公司申请样片)淘宝上公开的价格是20元一片,
一个板子上需要2片作为缓冲。还有244的版本,曾经做了一块244的,但是把244的输入输出画反了,现在也懒得重新开板制作了,毕竟也不想公开出售,就是自己用。
2usb 芯片的选型同样有2种或者多种,选用的是 ft245rl,还有用ft245bm的。
ft245rl 把时钟和eeprom都集成到内部了,双列的封装;
ft245bm 四面的封装,需要时钟以及一个存储芯片,一般用93c46,为了方便,直接画的ft245rl。
3cpld的选用,这个没什么好说的了,只要cpld的资源够用,选用那款都可以,管脚锁定就ok了 !
4版本,有了上面的3条相互组合就可以有很多的版本来了,可以说我的是“版本原创”起码没有直接用别人的电路图,呵呵,当然程序还是别人的,估计是老外的!
!千万注意 !
制作不成功,怎样检查:
1焊接检查,从新焊接一遍 cpld 晶振 usb芯片和max3378芯片,再次测量电压 !
2从 Mprog 中 读取已经 写入的文件,查看是否已经写入
3观看 晶振是否起振,用示波器,或者自己写一个测试程序,使下载指示灯输出
检测 cpld 是否工作正常
4如果还不要用,我也没有办法了
贴图:
pcb 3D图:
焊接成品:
tcl 文件用法
打开 quartus (maxplus II不会用了,也没有安装)
建立工程 编译通过之后,下载程序之前,需要把芯片的管脚进行对应,可以如3楼 pulan说的,自己一个一个的从 pin 上对应,
专业一点的都是制作 tcl 文件,类似xilinx中的 ucf 文件 ,这样的好处是,修改方便, *** 作好
*** 作步骤:确保编译通过之后,
按下 快捷键 Alt + 2 打开 tcl *** 作台
之后在 “#”后输入:source ubtcl 回车就ok了,
可以打开 pin planner 看一下 对应的情况
之后,Ctrl + l 编译连接,之后就可以用并口的 下载线 download 程序到 emp240中了
Altera usb blaster 制作全套资料(以上10个文件打包下载):
以上就是关于Altera usb blaster 制作全部的内容,包括:Altera usb blaster 制作、怎样用VB读FT245RL、单片机与PC机usb通信,有几种设计思路请高手们介绍一下等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)