SDK烧Flash
启动CPU1
在CPU0处需要加入一下代码以启动CPU1
void start_cpu1()
{
Xil_Out32(0Xfffffff0, 0x1000000);
dmb();
sev();
}
其中0x1000000
需要和CPU1的ddr地址保持一致,该地址可以在CPU1的lscript.ld
文件中找到。
创建FSBL工程
选择file->new->application project,创建新工程命名FSBL。
然后点击next,选择最后一项Zynq FSBL,点击Finish即可。
创建Boot Image
在Project Explorer空白处或CPU0的工程文件夹右键,选择Create Boot Image,如图所示。
选择create new BIF file,如果这个SDK工程之前没有创建过Boot Image,默认就是创建新的BIF,然后两个output文件夹选择默认即可。最下面的文件路径框需要按顺序放入FSBL的elf文件,工程的bit文件,SDK的elf文件,如果是双核SDK,就依次选择cortex0和cortex1的elf文件,然后点击create image即可。然后在刚刚的output路径下就会生成两个文件,一个bin文件,一个bif文件。
烧写Flash
点击SDK上方导航栏的Program Flash按钮,然后选择刚刚生成的bin文件和FSBL的elf文件,勾选verify after flash,其它默认即可,点击Program。
特殊情况
一般情况下按照上述步骤就可以顺利烧写Flash,但是如果这片FPGA在之前烧写到一半被强行终止,上述步骤就会出现失败的情况。此时需要在FSBL工程中强制启动模式为JTAG模式,但是生成的bin文件还是需要在默认模式下生成,因此,按照上述步骤失败再来执行该步骤不需要重新生成bin文件。
打开FSBL工程的main.c文件,找到Read bootmode register代码段,强制BootModeRegister为JTAG_MODE。然后重新执行烧写Flash步骤即可。