本文介绍zynq上三种办法发动文件的生成和留意事项,包含只用片上RAM(OCM)和运用DDR3两种状况。
JTAG办法
JTAG办法是调试中最常用的办法,在SDK中
在“Project Explorer”窗口工程上右键->Debug As->Debug ConfiguraTIons能够看到以下窗口
初次翻开左面窗口中Xilinx C/C++ applicaTIon(GDB)下没有子项,这时双击Xilinx C/C++ applicaTIon(GDB)即可新建一个调试;
这时右边窗口会主动填充如上图,若没有则手动填入;
在右边ApplicaTIon窗口指定要下载调试的.elf文件;
在右边STDIO Connection能够指定规范输入输出串口,即printf打印串口,若这儿挑选开发板上uart的com口,则调试时printf的信息打印到调试时Console窗口,一起也可从Console窗口输入数据,以此将数据经过串口发送到开发板上
以上设置完成后点击Debug即可开端调试;
若以上在“Project Explorer”窗口工程上右键->Run As->Run Configurations;装备与此相似,最终点击run即可开端运转,仅仅不是调试而是直接上板运转。
只用OCM
只用OCM指不运用DDR3的办法,与运用DDR3的办法略有不同。这儿不必FSBL来加载PL部分的.bit文件和第二阶段发动程序(裸机程序),而直接用BootROM加载裸机程序到OCM,行将裸机程序作为FSBL来运转,当然还要以下处理才能够:
包含进头文件:#include “ps7_init.h”
在裸机程序main函数开端处调用:ps7_init()
从design_1_wrapper_hw_platform_1目录仿制ps7_init.c和ps7_init.h文件到裸机程序地点的src目录中
留意:这儿样调用ps7_init()只适用于只用OCM的状况,经测验翻开DDR3后再这样调用会在ps7_init()中初始化失利,调试发现在初始化PLL时失利(原因不知道)。
为何要调用ps7_init()呢?从上面图片调试能够看到初始化文件(Initialization files)ps7_init.tcl,其与ps7_init()作用相同;一起在调试装备窗口右下角也能够看到“Summary of operations to be performed”也有调试时的运转进程,也有调用ps7_init等,之后再加载要调试的elf;因为不是经过JTAG运转,所以没有运转这儿ps7_init.tcl中,所以直接在裸机程序开端处调用ps7_init()。
这儿没有运用FSBL,不能加载.bit文件(zynq发动进程另介绍),所以只适用于没有运用PL(包含PL逻辑或PL的IO等)的状况;因为OCM巨细为256KB,而在BootROM阶段只能拜访192KB,所以“只用OCM”时要求裸机程序小于192KB才行。
从SD发动
要从SD卡发动,则需求BOOT.bin文件(添加了BootROM辨认的头信息文件),生成办法如下:
在“Project Explorer”窗口工程上右键->Create Boot Image 或Xilinx Tools ->Create zynq Boot Image;能够得到以下界面
一般翻开该窗口后各项已填好,不然需求
1、挑选Create new BIF file
2、然后挑选BIF文件目录
3、在Boot image partitions中Add裸机程序.elf文件,要将Partition type挑选为bootloader
确认输出文件为BOOT.bin后点击Create Image即可生成
此刻只要将BOOT.bin仿制到SD卡,设置板子为SD卡发动,从头上电即可。
从QSPI发动
有了以上SD发动的操作,从QSPI就比较简单了,检查部分材料,烧写到QSPI需求.mcs文件,在Create Boot Image中生成BOOT.bin的一起也生成了.mcs文件,但是在我运用SDK版别中(2015.3)生成BOOT.bin文件时发现没有.mcs文件,再查材料发现能够经过bootgen指令能够生成.mcs文件;最终从Create Boot Image窗口的上面部分有阐明,只要将输出文件BOOT.bin的后缀改为.mcs即可生成.mcs格式文件。有了.mcs文件就能够下载了,Xilinx Tools ->Program Flash得到以下窗口
挑选.mcs文件点击Program即可。仔细的朋友能够发现在挑选.mcs文件时也能够挑选.bin文件,经测验直接挑选.bin文件下载到flash也能够成功发动,或许这便是新版SDK中不一起生成.mcs文件的原因吧。
然后设置板子为QSPI发动,从头上电即可。
运用DDR
运用DDR办法即可需求运用FSBL来加载裸机程序,一起当然也支撑装备PL部分.bit文件。所以除了裸机程序工程外还需求树立FSBL程序工程,该工程直接用SDK自带FSBL模板即可,如下图
留意挑选运用与裸机程序同一个BSP;点击next
这儿挑选Zynq FSBL,然后点击finish即可生成FSBL工程。
留意:若提示不能创立则一般是在BSP中没有翻开对应的库(xilffs和xilrsa),如下图
在“Project Explorer”窗口BSP上右键->Board Support Package Setting,翻开两个库即可
从SD发动
相似的,从SD卡发动也需求BOOT.bin文件,生成办法相似前面,仅仅在Create zynq Boot Image窗口需求Add:
挑选FSBL作为bootloader
挑选PL部分.bit文件
挑选裸机程序.elf
以上次序需求留意,如下图
同上,这时只要将BOOT.bin仿制到SD卡,板子设置为SD卡发动,在板子从头上电即可。
从QSPI发动
相似只用OCM的状况,将.bin下载然后然后设置板子为QSPI发动,从头上电即可。
这儿需求特别留意,“运用DDR”时用SD卡和QSPI发动需求在vivado中将zynq上SD模块和QSPI模块翻开,不像“只用OCM”时不翻开这些模块也能发动;剖析检查FSBL程序可知必需求界说了XPAR_PS7_DDR_0_S_AXI_BASEADDR才能从SD或QSPI发动,所以这儿也有必要翻开DDR模块。
留意
调试或下载犯错时引荐处理过程,直到问题解决
. 从头插拔下载器
. 板子断电后上电
. 封闭SDK从头翻开(一起最好只翻开一个SDK)
. 检查调试选项,是否设置好
. 检查zynq设置(如当用到DDR时,若挑选DDR类型不对也是不能调试的)
若发动不正常能够测验调试FSBL:
. 若要检查FSBL打印调试信息,则在fsbl_debug.h中界说宏FSBL_DEBUG_INFO(#define FSBL_DEBUG_INFO),当然在调试设置中也要设置STDIO为对应UART(默许波特率为115200)或运用其它UART检查打印信息
. 调试FSBL时留意,当改动板子发动办法后需求从头上电或POR复位后才收效