用FM25F32烧写并启动Zynq_xc7z020

概述

对于Xilinx公司Zynq系列的FPGA支持QSPI方式启动加载,但在Vivado开发环境SDK中不能够支持国产化厂家复旦微电子生产的Nor QSPI Flash,为此在测试板上面进行了验证,验证FPGA采用XC7Z020,Nor FLASH采用FM25F32。并成功烧写了uboot和FSBL,启动加载成功。
因为SDK不能支持这款FLASH,所以用SDK自带烧写工具不能够烧写成功。因此采用自编测试程序进行烧写。
资源地址:
Zynq_xc7z020配合复旦微QspiFLASH_FM25F32烧写配置程序_back_20170613

程序说明

该工程主函数(int main();)所在路径为: \flash_test\src\testperiph.c
该程序是在Xilinx官网提供的FLASH测试程序基础上进行的修改。由于Zynq系列的FPGA默认采用QSPI方式加载,但FM25F32默认为标准SPI读写方式,手册有明确说明需要将QE位置1,才能够支持QSPI模式。因此主要增加了初始化函数(int FWNOR_init(XQspiPs *QspiPtr)),该函数修改了QE状态标志位,并且只需要写一次状态就会被固化,断电后无需重复置位。

烧写步骤

修改QSPI使能标志QE位

将FWNOR_init函数中的下面两句话注释解开,重新编译并进行在线加载,设置断电在该函数执行结束位置,全速运行,程序停在断点后完成。该设置每个芯片只需要在首次加电时进行一次设置即可,该位能够固化,重新上电无需再次修改。

//	XQspiPs_PolledTransfer(QspiPtr, WriteEnableCmd, NULL,
//					sizeof(WriteEnableCmd));
//	XQspiPs_PolledTransfer(QspiPtr, WriteStuRegCmd, NULL,
//					sizeof(WriteStuRegCmd));

打包boot.bin烧写文件。

与其他Flash打包boot.bin文件方法一样,不再赘述。

修改烧写程序

由于每个烧写程序大小不一样,因此需要根据实际程序大小修改烧写程序,本例程烧写文件大小为470012Byte,见附件Boot.bin。需要修改PAGE_COUNT的值,计算方法为:
烧写文件字节数/256 (如有小数则应+1,因为FLASH只能进行页写,不能支持随机写)。

烧写程序

因为我们已经使能了QE位,因此需要将FWNOR_init函数中的下面两行屏蔽掉:

//	XQspiPs_PolledTransfer(QspiPtr, WriteEnableCmd, NULL,
//					sizeof(WriteEnableCmd));
//	XQspiPs_PolledTransfer(QspiPtr, WriteStuRegCmd, NULL,
//					sizeof(WriteStuRegCmd));

编译并在线加载程序,分别在程序第331行(FLASH擦出后烧写前)、第357行设置断点,运行到第一个断点后需要通过仿真器在线load烧写文件到0x20000000地址,长度为文件大小。Load成功后再次运行程序,当程序执行至第二个断点后烧写完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值