详细解读Zynq的三种启动方式(JTAG,SD,QSPI)
本文介绍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
- Xilinx Kintex UltraScale 一半尺寸的 PCI Express 平台 (HTG-K816)(06-15)
- Xilinx全新参考设计提供业界首个单芯片400G解决方案(02-12)
- Xilinx用于工业自动化的机器视觉解决方案(11-30)
- Xilinx多协议机器视觉摄像机参考设计(12-01)
- 机器视觉技术原理解析及解决方案集锦(02-06)
- 机器视觉在汽车电子方向的应用解决方案(02-13)