学会Zynq(6)固化程序到SD卡或QSPI Flash

30 篇文章 207 订阅

SDK调试程序时都是通过JTAG,将PL的bit流文件和应用程序的ELF文件下载到Zynq中,运行查看效果。调试验证功能后需要将程序固化到板子上,使板子上电后可以从存储单元中加载程序,而无需SDK的调试环境。Zynq支持多种存储设备,本文将介绍如何将程序固化到常用的SD卡和QSPI Flash中。


配置SD卡

首先要查看开发板原理图中SD卡与MIO的连接关系。以火龙果Red Pitaya开发板为例,外部的SD卡插槽通过一个SDIO端口扩展芯片与PS的MIO40-47相连。
在这里插入图片描述
配置Zynq时在外设中选择与硬件对应的SD0,可以看到SD信号与硬件之间保持对应关系(因为这部分硬件设计是比较固定的)。CD和WP信号可能不是所有的开发板都有,根据硬件实际情况进行选择。
在这里插入图片描述
在Peripheral I/O Pins窗口中,我们可以看到其实可以选择3组MIO作为SD0,硬件设计时选择其中一组用于SD卡存储即可。
在这里插入图片描述
Clock Configuration的IO Peripheral Clocks中,可以看到SDIO的默认时钟频率为100MHz。该时钟的设置应该处于SD卡支持的范围内。
在这里插入图片描述


配置QSPI Flash

同样也要查看开发板原理图中QSPI Flash与MIO的连接关系。以火龙果Red Pitaya开发板为例,QSPI Flash芯片与MIO1-6相连。
在这里插入图片描述
配置Zynq时选中与硬件对应的QSPI Flash,信号与硬件之间保持对应关系。
在这里插入图片描述
在Peripheral I/O Pins窗口中,我们可以看到QSPI Flash只能通过MIO1-6与Zynq相连,硬件设计时要特别注意。
在这里插入图片描述
同样在IO Peripheral Clocks中,也可以配置QSPI的时钟频率,应该处于QSPI Flash芯片支持的范围内。


Zynq启动模式的选择

如果板子上有多种程序存储设备,Zynq在上电时通过一些MIO的电平状态决定采用哪种启动模式,具体见下表。可以看到主要与MIO3-5三个管脚有关。
在这里插入图片描述
米联的MZ7XA开发板集成了QSPI和SD卡,控制启动模式的电路图如下:
在这里插入图片描述
从表中可以看到QSPI和SD卡的区别仅在于MIO4,通过一个拨码开关控制模式间的切换,其它MIO固定拉高或拉低即可。注意这个板子的原理图设计时MODE0-4与上表中的BOOT_MODE0-4并不对应,不要混淆。
在这里插入图片描述
火龙果开发板的设计要更简洁。它将其它MIO的电平固定拉高或拉低,MIO4直接由SD卡的检测信号驱动,实现了SD卡和QSPI启动模式之间的自动切换。


制作BOOT.bin

BOOT.bin就是存储在SD卡或QSPI Flash中的程序,上电时Zynq会从外部存储设备将BOOT.bin读取到片内存储器中运行。制作BOOT.bin除了需要bit流文件和ELF文件外,还需要一个FSBL文件。FSBL主要用于Zynq第一阶段的初始化,SDK中已经提供了现成的FSBL文件,对于绝大多数应用只要稍许修改即可使用。

为了使用现成的FSBL,先新建一个工程,使用示例工程中的Zynq FSBL工程模板。
在这里插入图片描述
选中要创建BOOT镜像的工程,右键->Create Boot Image。一般情况下,SDK会自动设置BOOT.bin的输出路径,自动添加工程中的bit流文件和ELF文件,以及工作环境中存在的FSBL.elf文件。
在这里插入图片描述


固化程序

将导出的BOOT.bin文件拷贝到SD卡中,插在开发板上接通电源,可以观察到在没有JTAG的情况下程序便会自动加载运行。注意Zynq的启动模式要设置正确。

连接好JTAG并接通电源,点击Xilinx Tools->Program Flash Memory打开如下窗口:
在这里插入图片描述
选择要下载到Flash中的镜像文件,点击Program即可将BOOT.bin导入到QSPI Flash中。将启动模式切换为QSPI Flash启动,在不接JTAG的情况下重新上电,也可以看到程序自动加载后运行。至此便完成了程序的固化。

一开始如果对Zynq的开发流程不是很熟,很容易出现刷进去了BOOT.bin但程序没跑起来的情况。这时候要先确保ELF程序在JTAG模式下是已经无误的(如果DDR3就配置错了,就算代码是对的,程序也会跑不起来),然后要检查Vivado中硬件平台环境配置问题,相应的外设是否启用,SD卡的时钟是否过高等等。

  • 6
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Zynq是一种基于Xilinx的可编程SoC(片上系统),它结合了一个双核ARM处理器和可编程逻辑(FPGA)的能力。固化程序flash是指将FPGA的程序(比特流文件)保存在外部闪存中,以便在系统上电时可以自动加载并执行。 Zynq芯片通常带有内置的非易失性存储器(如flash存储器),用于存储引导程序和其他重要的配置信息。在将程序固化flash之前,首先需要生成比特流文件,该文件包含了FPGA逻辑的配置信息。可以使用Xilinx提供的开发套件(如Vivado)来生成比特流文件,该套件可以对FPGA逻辑进行综合、布局和路由,最终生成比特流文件。 一旦生成了比特流文件,就可以将其写入到Zynq芯片的flash存储器中。这通常需要使用专用的硬件工具,如JTAG调试器或外部编程器。通过这些工具,可以将比特流文件加载到Zynq芯片的闪存中,并设置相应的配置选项,以确保在系统上电时FPGA能够正确地加载和配置。 固化程序flash的好处是可以在系统开机时自动加载FPGA程序,而无需通过外部设备进行手动配置。这提供了更加灵活和方便的方式来实现硬件功能定制和重配置。此外,固化程序flash还可以节省时间,因为无需每次开机时都手动加载FPGA程序。 总的来说,将Zynq固化程序flash存储器中是一种常用的做法,它提供了一种方便的方式来保存和自动加载FPGA程序,以满足不同应用需求。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值