【ZYNQ】QSPI Flash 固化程序全攻略

普通的 FPGA 一般是可以从 Flash 启动,或者被动加载,ZYNQ 的启动是由 ARM 主导的,包括 FPGA 程序的加载,ZYNQ 启动一般为最少两个步骤,在 UG585 中也有介绍。

  • Stage 0:BootROM 阶段 在 ZYNQ 上电复位或者热复位之后,处理器首先执行 BootRom 代码,这一步是最初始启动设置。BootRom 存放了一段用户不可更改的代码,代码里包含了最基本的 NAND,NOR,Quad-SPI,SD 和 PCAP 的驱动,在非 JTAG 模式下才执行。另外一个作用是把 stage 1 的代码搬运到 OCM 中,就是 FSBL(First Stage Boot Loader)代码。

  • Stage 1:FSBL 阶段 当 BootRom 搬运 FSBL 到 OCM 后,开始执行 FSBL 代码,FSBL 主要有以下几个作用:

    • 初始化 PS 端配置,这些配置也就是在 Vivado 工程中对 ZYNQ 核的配置。包括初始化 DDR,MIO,SLCR 寄存器。主要是执行 ps7_init.c 和 ps7_init.h,ps7_init.tcl 的执行效果跟 ps7_init.c 是一样的。
    • 如果有 PL 端程序,加载 PL 端 bitstream
    • 加载 SSBL(Second Stage Boot Loader)或者 bare-metal 应用程序到 DDR 存储器
    • 交接给 SSBL 或 bare-metal 应用程序
      在这里插入图片描述
  • Stage 2:SSBL 阶段 SSBL 是可选项,一般是在跑系统的情况下使用,比如 Linux 系统的 u-boot。

创建 FSBL

FSBL 是一个二级引导程序,完成 MIO 的分配、时钟、PLL、DDR 控制器初始化、SD、QSPI
控制器初始化,通过启动模式查找 bitstream 配置 FPGA,然后搜索用户程序加载到 DDR,最后
交接给应用程序执行。详情请参考 UG821 文档。

  • 新建一个 APP

在这里插入图片描述

  • 命名为 fsbl,特别注意选择最新的那个硬件平台,点击 Next

在这里插入图片描述

  • 模板选择 Zynq FSBL,点击 Finsh

在这里插入图片描述

  • fsbl_debug.h 添加调试宏定义 FSBL_DEBUG_INFO,可以在启动时输出 FSBL 的一些状态信息,有利于调试,但是会导致启动时间变长。

在这里插入图片描述

  • 修改后保存,SDK 默认会自动编译,生成 fsbl.elf 文件。

创建 BOOT 文件

  • 选择 APP 工程,右键选择 Create Boot Image
    在这里插入图片描述

  • 弹出的窗口中可以看到生成的 BIF 文件路径,BIF 文件是生成 BOOT 文件的配置文件,还有生成的 BOOT.bin 文件路径,BOOT.bin 文件是我们需要的启动文件,可以放到 SD 卡启动,也可以烧写到 QSPI Flash。

在这里插入图片描述

  • Boot image partitions 列表中是要合成的文件,第一个文件一定是 bootloader 文件,即上面生成的 fsbl.elf 文件,第二个文件是 FPGA 配置文件 bitstream,在本实验中为 check.bit,第三个是应用程序,在本实验中为 check.elf,点击 Create Image 生成。

在这里插入图片描述

  • 在生成的目录下可以找到 BOOT.bin 文件。

在这里插入图片描述

使用 SDK 烧写 QSPI

  • 在 SDK 菜单 Xilinx -> Program Flash

在这里插入图片描述

  • Hardware Platform 选择最新的,Image FIle 文件选择要烧写的 BOOT.binFSBL file 选择生成的 fsbl.elfFlash Type 选择 qspi_dual_parallel,点击 Program 等待烧写完成。

注:如果烧写时不是 JTAG 启动模式,软件会给出一个警告,所以建议烧写 QSPI 的时候设置到 JTAG 启动模式

在这里插入图片描述

  • 断电,设置启动模式为 QSPI,上电重启,可以看到 ZYNQ 已在运行。

在这里插入图片描述

使用批处理文件快速烧写 QSPI

  • 新建一个 program_qspi.txt 文本文件,扩展名改为 bat,内容填写如下:
set XIL_CSE_ZYNQ_DISPLAY_UBOOT_MESSAGES=1
call D:\Software\Xilinx17\SDK\2017.4\bin\program_flash -f BOOT.bin -offset 0 -flash_type qspi_dual_parallel -fsbl fsbl.elf -verify
pause
  • 其中 set XIL_CSE_ZYNQ_DISPLAY_UBOOT_MESSAGES=1 设置显示烧写过程中的 uboot 打印信息,
    D:\Software\Xilinx17\SDK\2017.4\bin\program_flash 为我们工具路径,按照安装路径适当修改,-f 为要烧写的文件,-fsbl 为要烧写使用的 fsbl 文件,-verify 为校验选项

  • 把要烧录的 BOOT.binfsblbat 文件放在一起

在这里插入图片描述

  • 插上 JTAG 线后上电,双击 bat 文件即可烧写 flash

在这里插入图片描述

更多内容

  • 8
    点赞
  • 78
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: Zynq QSPI Flash启动是指使用Zynq芯片的QSPI闪存作为启动设备来启动系统。在这种启动方式下,Zynq芯片会从QSPI闪存中读取启动程序,然后执行该程序来启动系统。这种启动方式具有启动速度快、可靠性高等优点,因此在一些应用场合下被广泛采用。 ### 回答2: Zynq是赛灵思(Xilinx)公司推出的一种FPGA和ARM Cortex-A9双核处理器内核组成的SoC。QSPI(Quad SPI)是四线SPI模式的一种扩展,它使用四根数据线,能够提供更高的数据传输速率。QSPI Flash是一种存储器芯片,通常由Spansion、Micron、Winbond等厂商生产,它能够在低功耗的情况下提供高速度的数据存取。 在Zynq中,系统启动时会从QSPI Flash中读取启动代码,然后将代码加载到内存中执行。因此,QSPI Flash启动是Zynq启动的基础。以下是关于Zynq QSPI Flash启动的步骤: 1.配置QSPI Flash:需要通过手动设置或使用软件自动化配置工具来设置QSPI Flash的模式、时序和其他参数。这些参数需要与Zynq芯片的规格书配合设置,确保QSPI Flash与芯片能够正常通信。 2.在Vivado里进行设计: 需要在Vivado中设计一个Zynq系统,包括Zynq处理器IP核和QSPI Flash IP核,并将两个IP核链接在一起,以实现启动时芯片从QSPI Flash中读取代码。 3.生成bitstream: 在完成设计后,需要使用Vivado生成Zynq系统的bitstream。bitstream是一个二进制文件,包含了Zynq芯片的配置信息,可以在生产过程中烧录到芯片上。bitstream中的配置信息包括了QSPI Flash的配置参数、启动代码的地址位置和大小等。 4.编写启动代码:需要编写适合于Zynq的启动代码,该代码需要放置在QSPI Flash的制定地址位置以供Zynq进行启动。启动代码可以是裸机代码或操作系统(如Linux)。 5.测试系统:当设计和开发工作完成后,需要进行系统测试。通过对系统的测试,可以确保QSPI Flash启动的正确性。 在进行Zynq QSPI Flash启动设计时,需要考虑芯片与QSPI Flash之间的通信和数据传输,注重细节,确保系统的稳定性和可靠性。 ### 回答3: Zynq QSPI flash启动是指FPGA芯片通过QSPI接口连接外部闪存启动。这种启动方式具有启动速度快、布线短等优点,非常适合使用在资源受限的嵌入式系统中。 下面简要介绍Zynq QSPI flash启动的基本流程和注意事项。 1. 确定启动模式:Zynq支持两种启动模式,分别是JTAG启动和QSPI启动。在实际应用中,一般使用QSPI启动。 2. 配置引脚:根据所使用的芯片和开发板,需要确认相关的引脚连接配置。例如,需要确认QSPI数据线、时钟线、CS线等连接方式。 3. 配置闪存:在设计和布局PCB时,需要确认闪存的操作模式、地址空间、芯片选择等参数。在实际操作中,需要编写相应的启动代码和修改Vivado中的设计约束文件。 4. 切换MIO模式:为了让QSPI启动,需要切换相应引脚的MIO模式。例如,需要将SD0引脚切换为QSPI MIO模式。 5. 烧录启动镜像:制作好启动镜像后,需要使用编程器将镜像烧录到闪存中。常见的启动镜像格式包括BIF、SD等。 注意事项: 1. 保证闪存中有启动镜像。 2. 确认各个引脚的连接方式和信号电平,防止可能存在的焊接错误或短路现象。 3. 在编写启动代码和设计约束文件时,需要熟悉Zynq的启动流程和寄存器配置信息,避免出现错误。 4. 选择合适的闪存芯片和布局方式,以保证启动速度和布线长度的平衡。 总之,Zynq QSPI flash启动是一种高效、便捷的启动方式,可以大大降低嵌入式系统的启动时间,提高系统性能。但操作时需要注意各种细节,小心谨慎,以保证操作的正确性和稳定性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hello阿尔法

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值