JTAG方式 JTAG方式是调试中最常用的方式

本文介绍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启动,重新上电即可。

同上,这时只要将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复位后才生效

使用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

  • JTAG方式 JTAG方式是调试中最常用的方式已关闭评论
    A+
发布日期:2019年07月02日  所属分类:参考设计