现在的位置: 首页 > FPGA开发 > 正文

cyclone iii 器件远程升级(Remote Update)小结

2017年09月30日 FPGA开发 ⁄ 共 998字 ⁄ 字号 cyclone iii 器件远程升级(Remote Update)小结已关闭评论 ⁄ 阅读 3,043 次

由于项目需要,前段时间做了ALTERA cyclone iii  FPGA的远程升级功能,由于项目时间紧迫,在最初的时候考虑做的简单一些,不加bootloader代码,只在主程序中加一个函数接收上位机的升级数据,然后刷FLASH,由于有之前在ARM上做的经验,这样实现起来相对简单很多,但是有很大隐患,万一升级过程中掉电、通信线缆出现问题、或者其他不可控因素,很容易导致设备OVER,不能用了,只能拆开板子重新连jtag口烧写程序,这样对于后期设备维护很是不方便,所以决定将EPCS分为两个区域,Bootloader区及App区,Bootloader代码编写调试完成之后烧到EPCS中就固定了,以后需要更新功能真是通过Bootloader刷App区的代码,这样就算出现掉电或其他不可能因素,某一次升级失败了,下次还可以连接上Bootloader重新进行App区的代码更新,这样设备的可维护性可以大大提高。

由于之前没有在FPGA平台上做过Remote Update,所以刚开始只是了解个大概,很多技术细节都不清楚,所以一边搜资料一边写代码测试,前前后后差不多折腾了一个星期才把功能实现稳定,包括写了一个小上位机软件,具体细节另开文章来写,这里只记录一下遇到的几个问题吧:

1、通信部分的代码:数据接收一定要做好,不能丢字节,这样数据帧校验不成功的话重传会大大增加升级时间;

2、自己写的启动文件(BootRom)的运行及加载位置:控制好程序的代码段及只读数据段的位置,此部分可以修改连接脚本来实现;

3、Cache问题:确定NIOS中是否开了数据Cache,我在此部分折腾了两天多时间,查看了无数次代码,调试了不下一百次程序,Flash中的程序重定位到Sram之后就是不对,导致跳转过去程序就飞了,因为我打印出FLASH中的程序与烧写文件进行过对比,已经确认烧写过程是正确的,很是郁闷,不经意间我想到cache问题,打开SOPC Builder Nios中果然开了D Cache,关不掉D Cache,重新编译果然正常了。(此处可以不关闭d cache,只要记得有cache数据写回也可以)。

大问题差不多就这么多吧,附上一张上位机升级界面,可单独升级软件及硬件配置文件:

update

update

×