网上看到很多朋友和我遇到一样的问题,貌似都没有解决,所以在此记录下。
背景:1.利用QuartusII与NiosII EDS软件进行软硬件开发;
2.硬件:黑金开发板AX301,
3.软件:led流水灯
这里简单介绍下软硬件开发的步骤:
首先是硬件系统的搭建,利用tools --> sopc builder,其中各部分模块分别是 CPU,SDRAM,EPCS16,SYSTEM ID,JTAG UART,PIO_LED,其中需要注意的是在cpu里的reset vector要选择epcs,exception vector选择sdram,若选择NiosII/f类型,那data cache要选择none,具体原因看黑金niosII教程。
在sdram中需要注意sdram芯片(相当于pc的内存条)的型号,在AX301开发板中,sdram是16bitx16M,row address:A0~A12,column address:A0~A8,所以row和column两个空里填13和9,这里注意下,其他都默认。
EPCS的地址可以锁定在0x0,也可以不锁定。
添加完IP核之后,分配基地址,而后Generate。
建立锁相环pll,这里如果输出50MHz的频率给nios核,那么可以不用再输出同频不同相的时钟给外部sdram的时钟管脚。
然后再在顶层例化锁相环和nios核,然后再分配管脚以及设置device and pin options,其中在从configeration中选择相应的epcs型号,把unused pins设置为as input tri-stated,然后把dual-purpose pins的管脚都改成regular IO。最后开始编译。
第二步是软件的开发,本人使用的是NiosII EDS,使用方法详见黑金Nios教程。这里讲讲我下载时遇到的一些问题。
刚开始遇到system ID hash not found at········,这个问题主要是.bsp(.syslib)文件与硬件系统即.sopcinfo文件不匹配造成的,可以右键单击所建的.bsp文件,选择niosII --> generate bsp,这样就更新好了。
然后就是遇到error code 5············后面一堆代码,这个问题我是没有例化epcs的四个管脚,等例化完这几个管脚之后,又遇到了error code 255············后面一堆代码,下载的时候总是到66%的时候出现错误导致失败,擦出都没有完成,感觉总下不进去,上网找了半天也没有解决这个问题,不过受到在黑金论坛上帮助我的网友的启发和网上找到的另一个下载程序的方法,成功解决了固化程序的问题。
(http://www.cnblogs.com/liu_xf/archive/2011/10/23/2221880.html)这个是原创博客的网址。
刚开始就直接在niosII command shell里输入所给的命令代码,结果不好使,其实是输入的代码不对,然后受到黑金论坛的一位网友启发,应当将文件的地址也都输入,输出也是,这样才能得到hex文件。这里我贴下我的输入命令,仅供参考。
sof2flash --input="d:\George\NiosII_practice\hello\hello.sof" --output="d:\George\NiosII_practice\hello\flash\hw.flash" --epcs --verbose
elf2flash --input="d:\..\led.elf" --output="d:\..\flash\sw.flash" --epcs --after="d:\..\flash\hw.flash" --verbose
(注:其中"d:\..\"里面要输入的是文件的路径,不是"..",下面也是,这个注意下,我是偷点懒)
上面是转化成.flash文件的命令
接下来是将.flash文件转化为.hex文件的命令
nios2-elf-objcopy -I srec -O ihex “d:\..\hw.flash” “d:\..\hw.hex”
nios2-elf-objcopy -I srec -O ihex “d:\..\sw.flash” “d:\..\sw.hex”
接下来就按照原创博客所介绍的方法做就可以了。
这里再次感谢强大的网友朋友。
造成这个问题的原因应该是epcs flash的时钟管脚没有加20到40欧的电阻,导致信号的振荡,也就是没有匹配阻抗。