您的位置 首页 开关

ARM在线晋级FPGA程序办法(逆向工程)

为什么写该文公司有款产品采用FPGA做处理器,需要远程升级——不使用烧写器,通过网络对其升级。领导提议既然程序是存储在外部存储器上的

为什么写该文

公司有款产品选用FPGA做处理器,需求长途晋级—— 不运用烧写器,经过网络对其晋级。领导提议已然程序是存储在外部存储器上的,那么能否经过EPCS4与ARM SPI 总线通讯衔接改写FPGA程序呢?所以就有了下文的实践。
要完结该功用有几种办法:
1. 解析编译出的FPGA下载文件jic、pof,将解析后的内容烧录到EPCS4中。但是否这两种文件格局揭露存储结构呢?芯片厂商是否对此保密?
2. 直接读取EPCS4的程序,烧录到另一块EPCS4中。但是否读取的EPCS4内容以及依据FPGA序列号做了加密呢?
权衡使命组织时刻,挑选第二种计划,究竟就算第一种计划可行,也需求规划第二计划的读写操作。 可喜的是这次逆向工程就这么搞定了。
详细完结
ARM用IO模仿SPI总线烧FPGA装备芯片EPCS4完结软件晋级,在TQ2440上测验,工程能够经过下面的 github衔接取得。该工程与TQ2440渠道定制,在其他渠道未必能运转,主张只看 BitOpt.h,EPCS4.c,EPCSxx.h,mainboot.c几个文件,其他无关代码不用多看。
晋级过程:
1、一块现已用下载器烧录FPGA程序的EPCS4与ARM衔接,ARM读出EPCS4“一切扇区”数据保存到NandFlash中,然后拷贝到电脑备份。
2、另一块待烧录的FPGA与ARM衔接,将刚读出的数据烧写进去。
读取的数据是终究履行的二进制Bin文件,由于Altera开发环境所生成的jic、pof与终究EPCS4内的内容不一样(除非找到生成Bin的办法)。之所以读取“一切扇区”数据是由于不知道实践Bin文件巨细,爽性悉数读出。EPCS4存储空间是512KB。IO模仿SPI时序的办法速度有限,读/写512KB各需求40S,用SPI总线速度会快不少。该办法现已在2块FPGA里运转没问题,证明Bin文件并没有在烧写过程中绑定FPGA芯片序列号。
演示:
发动后按“5”进入EPCS4测验代码。
按“N”将Bin文件从Nand拷贝到SDRAM的0x30200000,长度512KB。
按“W”将0x30200000的数据烧录到EPCS4中,写入后核算写入前数据校验码得0x00000039,然后再读出EPCS4中“一切”数据,核算读出内容的校验码也是0x00000039,比较校验移植回来“Success!!!”,不然回来“Check sum Error!!!”。
硬件衔接:
晋级过程中FPGA需求掉电,或许将FPGA与EPCSxx衔接的引脚断开,不然3个设备衔接到共用信号线无法通讯。
EPCS4驱动编写、移植注意事项:
1、演示代码驱动部分EPCS4.c、EPCSxx.h选用的是IO模仿SPI总线协议,不能直接运用,需求看的是各函数完结的逻辑,照搬到WinCE上。该代码能够直接兼容EPCS4、EPCS16、EPCS64。关于EPCS1、EPCS128只需修正页面巨细、扇区巨细相关宏。EPCS1、EPCS128不支持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 ID或Device Identification)
2、假如读取过错的话用示波表检查时序,确保CLK脉冲周期大于40ns,以及MOSI发送的内容正确(Read silicon ID——0xAB或Read silicon ID——0x 9F)。
3、读取扇区内容。
4、擦除、写入(写入前有必要先擦除)一切扇区,并读出写入数据。
5、读取EPCSxx数据在NandFlash里树立bin文件,最终烧写到EPCSxx能运转
6、与节点管理器增加更新FPGA通讯协议

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/dianyuan/kaiguan/263165.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部