zynq的三种启动方式(JTAG,SD,QSPI)

本文介绍zynq上三种方式启动文件的生成和注意事项,包括只用片上RAM(OCM)和使用DDR3两种情况

JTAG方式

JTAG方式是调试中最常用的方式,在SDK中

  • 在“Project Explorer”窗口工程上右键->Debug As->Debug Configurations可以看到以下窗口

JTAG调试配置界面

  • 首次打开左边窗口中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;可以得到以下界面

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得到以下窗口

Program Flash

选择.mcs文件点击Program即可。细心的朋友可以发现在选择.mcs文件时也可以选择.bin文件,经测试直接选择.bin文件下载到flash也可以成功启动,可能这就是新版SDK中不同时生成.mcs文件的原因吧。

然后设置板子为QSPI启动,重新上电即可。

使用DDR

使用DDR方式即可需要使用FSBL来加载裸机程序,同时当然也支持配置PL部分.bit文件。所以除了裸机程序工程外还需要建立FSBL程序工程,该工程直接用SDK自带FSBL模板即可,如下图

新建FSBL1,建立FSBL程序工程

注意选择使用与裸机程序同一个BSP;点击next

新建FSBL2,选择Zynq FSBL

这里选择Zynq FSBL,然后点击finish即可生成FSBL工程。

注意:若提示不能创建则通常是在BSP中没有打开对应的库(xilffs和xilrsa),如下图

新建FSBL0,BSP中没有打开对应的库提示

在“Project Explorer”窗口BSP上右键->Board Support Package Setting,打开两个库即可

Board Support Package Setting

从SD启动

类似的,从SD卡启动也需要BOOT.bin文件,生成方法类似前面,只是在Create zynq Boot Image窗口需要Add:

  • 选择FSBL作为bootloader
  • 选择PL部分.bit文件
  • 选择裸机程序.elf

以上顺序需要注意,如下图

Create zynq Boot Image(FSBL)

同上,这时只要将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模块。

注意

调试或下载出错时推荐处理步骤,直到问题解决

  1. 重新插拔下载器
  2. 板子断电后上电
  3. 关闭SDK重新打开(同时最好只打开一个SDK)
  4. 检查调试选项,是否设置好
  5. 检查zynq设置(如当用到DDR时,若选择DDR型号不对也是不能调试的)

若启动不正常可以尝试调试FSBL:

  • 若要查看FSBL打印调试信息,则在fsbl_debug.h中定义宏FSBL_DEBUG_INFO(#define FSBL_DEBUG_INFO),当然在调试设置中也要设置STDIO为对应UART(默认波特率为115200)或使用其它UART查看打印信息
  • 调试FSBL时注意,当改变板子启动方式后需要重新上电或POR复位后才生效
文档共60页。主要向初学者提供了Zynq开发的技术方向,针对不同应用给出了基本的参考文档;同时对Zynq双核AMP加载方式做了详细描述,对Zynq的fsbl启动流程做了简单介绍。章节如下: Zynq User Guide 1 介绍 4 2 快速上手指南 4 3 多核开发教程 4 3.1 AMP开发说明 6 3.1.1 快速生成amp工程 6 3.1.2 Generating Boot File 8 3.1.3 烧写程序 9 3.1.4 启动 10 3.1.5 调试 10 3.1.6 总结 11 3.2 SMP开发说明 11 4 ZC706启动代码分析 11 4.1 启动代码 12 4.2 FSBL流程(FOR AMP) 13 4.3 CPU0启动CPU1流程 14 5 程序在线烧写方案及流程 14 5.1 程序烧写需求 14 5.2 提出该需求的原因 14 5.3 程序烧写方案 14 5.3.1 BOOT.BIN组成 14 5.3.2 BOOT.BIN生成方法 15 5.4 FSBL.BIN和APP.BIN等的生成 15 5.5 制作*BIN及烧写的具体步骤 15 5.5.1 制作*bin流程 15 5.5.2 BOOT.bin制作过程 15 5.5.3 FSBL.bin和APP.bin等的生成过程 22 5.6 烧写BOOT.BIN步骤 26 5.6.1 通过SDK工具烧写步骤 26 5.6.2 通过上位机烧写软件的烧写步骤 29 5.6.3 通过串口调试助手烧写步骤 29 6 Zynq Qspi控制器 30 6.1 基本特性 30 6.2 I/O接口 31 6.3 QSPI控制器模式 33 6.3.1 I/O模式 33 6.3.2 线性地址(linear address)模式 33 6.3.3 传统(legacy)SPI模式 34 6.4 QSPI 例程 34 6.5 QSPI控制器支持访问32MB方法 35 6.5.1 Bank地址寄存器(Bank address register) 35 6.5.2 扩展地址模式(Extended address mode) 35 6.5.3 使用新写命令(New commands) 35 6.6 QSPI FLASH选择 35 6.7 作为BOOT器件考虑 35 7 µC/OS系统启动指南 36 7.1 INTRODUCTION 36 7.1.1 Software Requirements 36 7.1.2 Hardware Requirements 36 7.2 HARDWARE DESIGN 37 7.2.1 Step 1. Invoke the Vivado IDE and Create a project 37 7.2.2 Step 2. Create an IP Integrator Design 39 7.2.3 Step 3. Add and setup the Zynq processor system IP block 39 7.2.4 Step 4. Customize the Zynq block for our design 41 7.2.5 Step 5. Add the soft peripherals 45 7.2.6 Step 6. Generate HDL Design Files 47 7.2.7 Step 7. Synthesis, Implement and Generate Bitstream 48 7.3 SOFTWARE DESIGN 49 7.3.1 Step 1. Installation of the µC/OS Repository 49 7.3.2 Step 2. Generate the µC/OS BSP 50 7.3.3 Step 3. Build and Debug the Demonstration Project 54 7.3.4 Step 4. Program the AXI Timer 0 with the ucos_axitimer Driver 55 7.3.5 Step 5. Program the AXI Timer 1 with the Xilinx tmrctr Driver 58 7.4 CONCLUSION 59 8 Linux系统启动指南 59
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值