注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
lzwml的个人空间 https://home.eeworld.com.cn/space-uid-148817.html [收藏] [复制] [分享] [RSS]
日志

ARM在线升级FPGA程序方法

已有 6423 次阅读2014-10-31 11:45 |个人分类:ARM摸索| arm, FPGA, EPCS, 升级, 烧写, arm

ARMIO模拟SPI总线烧FPGA配置芯片EPCS4完成软件升级,在TQ2440上测试(附件提供部分代码,不提供启动文件和Nand相关代码)。
升级步骤:
1、  一块已经用下载器烧录FPGA程序的EPCS4ARM连接,ARM读出EPCS4所有扇区”数据保存到NandFlash中,然后拷贝到电脑备份
2、  另一块待烧录的FPGAARM连接,将刚读出的数据烧写进去。
读取的数据是最终执行的二进制Bin文件,因为Altera开发环境所生成的jicpof与最终EPCS4内的内容不一样(除非找到生成Bin的方法)。之所以读取“所有扇区”数据是因为不知道实际Bin文件大小,干脆全部读出。EPCS4存储空间是512KBIO模拟SPI时序的方式速度有限,读/512KB各需要40S,用SPI总线速度会快不少。该方法已经在2FPGA里运行没问题,怎么Bin文件并没有在烧写过程中绑定FPGA芯片序列号。
演示:
启动后按“5”进入EPCS4测试代码。
按“N”将Bin文件从Nand拷贝到SDRAM0x30200000,长度512KB
按“W”将0x30200000的数据烧录到EPCS4中,写入后计算写入前数据校验码得0x00000039,然后再读出EPCS4中“所有”数据,计算读出内容的校验码也是0x00000039,比较校验移植返回“Success!!!”,否则返回“Check sum Error!!!”。
硬件连接:
升级过程中FPGA需要掉电,或者将FPGAEPCSxx连接的引脚断开,否则3个设备连接到共用信号线无法通信。
EPCS4驱动编写、移植注意事项:
1、  演示代码驱动部分EPCS4.cEPCSxx.h采用的是IO模拟SPI总线协议,不能直接使用,需要看的是各函数实现的逻辑,照搬到WinCE上。该代码可以直接兼容EPCS4EPCS16EPCS64。对于EPCS1EPCS128只要修改页面大小、扇区大小相关宏。EPCS1EPCS128不支持epcs_read_silicon_id(具体查看EPCSxx芯片手册)。
2、  Mainboot.c文件只需要看3个函数:epcs4_write_file()epcs4_read_file()check_sum(),其中读写函数必须根据具体芯片容量而定,可以通过读取芯片ID而获得芯片类型,动态修改烧写代码容量。
3、  SPI时序CLK脉冲宽度“能宽不能窄”,芯片手册建议脉冲跨度大于20nS,演示代码中IO模拟SPI速率很低,脉冲宽度3uS,所以未加任何延时。据说2440SPI总线速率能达到20MB,所以有必要适当添加延时,或配置脉冲宽度,
4、  Read Status命令可以再任何时候发送,返回0表示处于空闲状态(具体状态意义查看芯片手册),发送Read Status以外的命令必须确定芯片处于空闲状态,否则命令被抛弃
5、  每次”发送写、擦除命令必须发送写使能命令
6、  发送“连续”读、写字节命令最大长度只能在一个Page范围之内,读写到Page末地址若还有数据请求,多余的部分被芯片抛弃。
7、  不允许在一个CS周期内发送两个命令
正确的命令是:CS拉低——发送命令1——CS拉高;CS拉低——发送命令2——CS拉高;
不允许:CS拉低——发送命令1——发送命令2——CS拉高;
建议移植代码测试步骤
1、读取芯片ID号(silicon IDDevice Identification
2、如果读取错误的话用示波表查看时序,保证CLK脉冲周期大于40ns,以及MOSI发送的内容正确(Read silicon ID——0xABRead silicon ID——0x 9F)。
3、读取扇区内容。
4、擦除、写入(写入前必须先擦除)所有扇区,并读出写入数据。
5、读取EPCSxx数据在NandFlash里建立bin文件,最后烧写到EPCSxx能运行
6、与节点管理器添加更新FPGA通信协议

本文来自论坛,点击查看完整帖子内容。

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章