固化程序和配置到SD卡和 QSPI FLASH

460 阅读4分钟

固化程序就是PS部分产生的二进制代码,配置是PL部分产生的比特流文件   

ZYNQ7启动的三个阶段:

BOOTROM(处理器固化的引导程序,初始化基本的处理器硬件,PLL,处理器等,判断跳线设置的模式MIO2 - MIO8 ,从指定的位置调入First Stage BootLoader(第一阶段加载文件);识别启动文件头部并调用FSBL到OCM(只有192K ) , 开始执行BOOTLOADER) ->

FSBL(初始化特定的片内外硬件,比如DDR2(内存)以及以太网外设等,这部分代码长度限制在192K可以由用户修改,之后将用户程序用通讯介质或者存储介质调入DDR2存储器,运行) ->

用户程序或者SSBL(比如LINUX 引导程序,有此二级引导程序的原因是:FSML限制了192K的大小)。

2,图形化生成启动文件:First Stage BootLoader、比特流文件、用户实际代码。

实例:把上一个程序固化到SD卡和QFLASH里面

先打开路径E:\FPGA\Example\pl_ps_led_sw_guhua\project_1\project_1.sdk

再打开SDK软件(路径在Xilink里面)-把路径粘贴到上面-工具栏下Create Boot Image(启动映像)

\

在上一行路径下新建一个文件boot_img-把比特流配置文件拷进去(路径E:\FPGA\Example\pl_ps_led_sw_guhua\project_1\project_1.runs\impl_1里面的.bit文件)-把二进制执行文件拷进去(路径E:\FPGA\Example\pl_ps_led_sw_guhua\project_1\project_1.sdk\LED_SW_TEST\Debug下的.elf文件)-把启动文件拷进去(官方自带,路径E:\FPGA\教学视频\6,固化程序和配置到SD卡和 QSPI FLASH\ZedBoard_OOB_Design6\ZedBoard_OOB_Design\boot_image下的zynq_fsbl.elf)

\

接着上面启动映像

上面不是.elf是.bif

同样的方式把另外两个文件添加进去,它们的文件格式都选datafile-然后下图

\

后缀如果是.mcs就是16进制文件,可以直接向spi-flash里面调用烧写

同样的步骤生成一个16进制文件,下图是有变动的地方:

现在路径下有这些文件

把BOOT.bin拷到SD卡,从SD卡启动就可以了

下一种四线SPI配置烧录过程:工具-Program flash

接下来就下载进去了,然后把启动方式改成QSPI启动(跳线帽下上下下下),再开关一下电源就可以看见运行效果(用开关控制LED状态)

大体流程是先给ZYNQ处理器下一个程序,然后这个程序通过JTAG口和上位机通讯,把要写的数读到处理器上,然后处理器再把程序写到QSPI里面

 

3,命令行生成启动文件。

上面添加三个文件也可以用下图方式:

上面这些操作也可以用命令行实现:

把从别处找到的makeboot.bat和bootgen.exe复制到上面路径下, makeboot更改里面的内容为上图,然后双击 makeboot就会生成BIN和mcs文件(不需要SDK直接生成),以下是剩余完整脱机操作:

剩下的是总结:\

4,PL配置的时机由PS来决定。 PS不用到PL外设之前可以先不配置PL(例如这个例子的Flash Loader用到了SD卡和QSPI,但是没用到PL所以会在合适的时候再配置比特流文件),PS及其专属的外设可以独立运行。并且FSBL我们可以不用来做引导,可以直接运行小的程序(比如把bootloader换成别的文件也会执行,但是不加载下面的比特流文件和用户代码,加不加载取决于程序怎么写)。

\

5,启动文件本身就集合了多个文件,需要被BOOTROM识别,必须按照BOOTROM的头部格式来组织,其实这个启动文件本身内部就相当于有了文件系统,这点尤其是在没有文件系统的QSPI FLASH 上必须需要的。

6,BOOTGEN 生成的启动文件BOOT.BIN或者BOOT.MCS有两部分基本作用:包含了可以被BOOTROM和官方FSL识别的ROM头。前者是必须的,后者可选的。FSBL是用户可选配置,所以可以采用任何具体的方式进行配置了,可以不从BOOT.BIN文件里面要PL配置的配置和SSBL。

通过看FSBL的程序可以看到关于SD卡的程序都是灰色的,所以即使FSBL能编译过也不会从SD卡中加载程序(这是不可用的),如果用到了SD卡需要把SD卡的接口打开    

\

通过以下方法查看FSBL程序:

这样生成的FSBL不能直接用,还是用官方的zynq_fsbl.elf