MiZ702学习笔记6——ZYNQ如何固化程序

上次,我们讲到了EMIO的使用,其实那就是一个最简的“PS + PL”运用的体现。我们之前是通过JTAG先下载bit流文件,再下载elf文件,之后点击Run As来运行的程序。但是这样只要一断电,程序就没了。那么今天我们就来试试如何让程序断电不消失。

之前,JTAG的方法是通过TCL脚本来初始化PS,然后用JTAG收发信息,可用于在线调试。这次我们得想办法把,程序放到一个非易失的存储器件里。

那我们先要稍微了解下zynq的启动过程,启动过程有3个阶段:

阶段 0:即传统的BootROM过程,zynq芯片里有个rom里面固化了一段不可修改的程序,只有zynq一上电,这段程序就会执行,它将对zynq的NAND、NOR、SD等基本外设控制器进行初始化。把SD卡这类易失的存储器件初始化好了之后,就会把其中的程序拷贝到zynq的OCM(On-chip memory),那么这个被拷贝到片上RAM执行的程序就是我们今天要制作的文件——BOOT.bin。

这里有个疑问,zynq他怎么知道BOOT.bin是在SD还是NAND或是NOR?看到MiZ702按键旁的拨码开关了吗?MiZ702默认拨码的顺序,就是让BootRom去SDRAM中寻找启动代码。怎么配置拨码开关详见MiZ702的硬件使用手册。

阶段 1:说到BOOT.bin,他其实是由3个文件制作而成,第一个是FSBL.elf, 第二个是bit文件,第三个是运行在PS

上的elf文件。第二个和第三个上次我们已经见过了,bit文件是由vivado产生里面包含了zynq PS的配置部分内容,

以及PL部分的逻辑内容。第三个文件就是SDK里写的用户程序生成的。那么第一个文件FSBL.elf是干嘛的呢?

它做的这个事情就是第一阶段的内容:,根据bit文件,首先配置PS部分,PS完成初始化后,会去配置PL部分,之后会去加载第二阶段的代码。

阶段 2:这一阶段是可选的,完成Linux系统启动过程(U-BOOT)。我们这次是还是裸奔,不需要。

再回到最初的问题,如何制作BOOT.bin。因为制作BOOT.bin需要三个文件,第二个和第三个我们已经有了,现在就差FSBL.elf了。

下面就介绍如何生成FSBL.elf,SDK可以完成这个过程,虽然你自己也可以写,但是xilinx提供了,你不用吗?哈哈!

过程如下:

1、直接双击SDK,选择一个工作空间之后,新建一个FSBL的工程:


那么,编译之后,就会生成FSBL.elf,再把上一个工程的生成的bit和elf文件找到,就可以开始,制作BOOT.bin了。

2、在SDK的工具栏找到:Xilinx Tool->Creat Zynq Boot Image

3、分别添加以上3个文件,但是最好按顺序添加,因为FSBL最先启动,然后配置PS,最后配置PL,所以顺序就是1、FSBL.elf 2、bit 3、程序的elf。

4、点击add,添加FSBL.elf

5、点击add,添加LED_wrapper.bit

6、点击add,添加led.elf

7、点击Creat Image生成BOOT.bin

看到这条信息的时候,就是BOOT.bin制作好的时候:

在之前设定的文件夹下找到,BOOT.bin并且将其拷到SD卡中,再把SD卡插到MiZ702,打开电源,和上次工程出现的现象重现了,这次断电之后,程序也不会消失了~~

这次,我把1、FSBL.elf 2、bit 3、程序的elf,这三个文件,以及BOOT.bin都上传,大家可以试试。最后提醒下放大SD卡的bin文件,一定得叫BOOT.bin,不然不识别,具体为什么可以参考FSBL的源代码。