用FM25F32烧写并启动Zynq_xc7z020
- 概述
- 程序说明
- 烧写步骤
-
- 修改QSPI使能标志QE位
- 打包boot.bin烧写文件。
- 修改烧写程序
- 烧写程序
概述
对于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支持位置1QSPI模式。因此,初始化函数主要增加(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烧写文件到0x2万地址,长度为文件大小。Load当程序执行到第二个断点时,再次运行程序。