ZYNQ学习笔记 程序固化

您所在的位置:网站首页 vivado生成elf文件 ZYNQ学习笔记 程序固化

ZYNQ学习笔记 程序固化

2024-07-12 11:54| 来源: 网络整理| 查看: 265

ZYNQ 程序的固化

PS:本次实验基于zynq7010芯片,开发软件为vivado 2018.3。

​ zynq7010和其他的fpga板一样,日常我们开发时使用的JTAG调试下载进去的二进制文件断电后会丢失的。如果想像stm32,esp32单片机那样重启之后还是按照我们的代码那样工作,需要对程序固化。即把程序存储在非易失性存储器中,这个过程需要启动引导程序(Boot Loader)的参与。BootLoader会加载FPGA配置文件,以及运行在ARM中的软件应用。(一般调试不需要固化程序,当程序需要永久保存时候 可以考虑将程序进行固化)

程序固化简介

​ 在ZYNQ SoC的启动和配置过程中,既需要PS的配置信息,也需要PL的配置信息。在ZYNQ中,PS作为主器件,PL可以看作是PS的一个外设,因此需要由PS来配置PL。这个配置顺序的优势是它允许对 PS 单独上电的时候,此时 PL 不上电,以减小功耗。不过也有例外,就是我们在使用JTAG 下载程序的时候,此时是使用电脑作为主机来配置 PL。

​ 软件代码和配置 FPGA 的 BIT 文件可以存储在连接到 PS 端的配置存储器件中。PS 支持多种片外非易失性存储器(Quad SPI Flash,NAND Flash,NOR Flash 或 SD 卡)。本文讨论QSPI FLASH和SD卡的操作。

​ ZYNQ SoC的启动由片上的BootROM开始,片上BootROM是芯片内部集成的一块非易失性存储器,它包含了ZYNQ所支持的配置器件的驱动,里面的代码是不可修改的。在BootROM执行之后,下一个配置阶段为First-Stage Boot Loader(FSBL),它是由开发者所创建的。它可以配置DDR存储器和硬件设计过程中所定义的一些外设。FSBL是一个二级引导程序,完成MIO的分配、DDR控制器初始化、SD、QSPI控制器初始化,配置FPGA、然后加载用户程序。

​ FSBL的工作内容为:

初始化PS 如果提供了BIT文件,则配置PL 加载裸机应用程序到DDR中,或者加载Second-Stage Boot Loader(SSBL) 开始执行逻辑应用程序,或者SSBL

​ PL 的配置是通过处理器配置访问接口(Processor Configuration Access Port,PCAP)进行的,它允许对PL 进行部分配置或者完全配置。一旦 PS 启动运行之后,PL 可以在任意时刻被配置,FSBL 和应用程序可以清除、配置以及使能 PL。

​ 要重建一个 ZYNQ 的启动镜像我们需要执行以下文件:

Boot ROM 头文件:控制 Boot ROM 设置,比如就地执行、加密、FSBL 偏移量、镜像文件大小等; First-Stage Boot Loader(fsbl.elf); PL 配置文件,即 BIT 文件(pl.bit); 运行在 PS 上的软件应用程序(app.elf)。

​ ZYNQ SoC 使用多个模式引脚来决定配置器件的类型,软件的存储位置以及其他的系统设置,这些引脚共享 PS 端的 MIO 引脚。总共有 7 个模式引脚,分别为 MIO[8:2]。其中,前四个引脚定义启动模式,第五个引脚定义是否使用 PLL,第六个和第七个引脚定义上电过程中 MIO bank0 和 bank1 的 bank 电压。

模式引脚配置

ZYNQ系统启动过程

​ 第一幅图为引脚配置,常见的一些开发板会用拨码来控制MIO5和MIO4,会省略掉NOR Boot这个配置项。

​ 第二幅图为ZYNQ系统启动过程,在上电复位(Power ON Reset,POR)之后,硬件会采集模式引脚的状态,禁用器件内部的模块,并根据模式引脚的设置选择是否使能PS的时钟锁相环。而在其他的复位模式下,硬件不会执行上述动作。如果开发板上有PS端的复位按键,一般属于上电复位,如果按下PS的复位按键,硬件会重新采集模式引脚的状态

把程序固化到QSPI FLASH中 1. 让芯片进入JTAG调试模式

根据自己开发板的原理图或说明文件来改变引脚状态,使芯片进入JTAG模式。先拨动拨码开关再上电。

进入JTAG模式

2.硬件配置

​ 假设我们的开发已经完成,现在需要对现成的项目进行固化操作。回到vivado,双击IP INTEGRATOR->Open Block Design,再双击我们的Processing System核进行配置。

​ 在配置界面的Peripheral I/O Pins中,把Quad SPI Flash勾上,并配置好Bank0和Bank1的电平标准。再点击OK。

​ 配置完后,在Diagram窗口空白处右击,然后选择Validate Design验证设计(或者直接F6)。验证完成后弹出对话框提示Validation Successful表明设计无误,点击OK确认,然后保存。

​ 在 Source 窗口中右键点击 Block Design 设计文件system.bd,执行Generate Output Products。弹出的对话框保持默认配置直接OK即可。最后在左侧 Flow Navigator 导航栏中找到 PROGRAM AND DEBUG,点击该选项中的Generate Bitstream,对设计进行综合、实现、并生成 Bitstream 文件。

​ 最后执行File->Export->Export Hardware重新导出硬件

​ 执行后会弹出一个对话框询问是否覆盖原本导出的硬件,选择YES

​ 硬件配置步骤完成。

3.软件设计 - 生成FSBL

​ 在重新导出硬件后,在SDK软件中会弹出一个警告信息提示我们工程中的硬件设计文件发生了改变,点击YES继续,然后软件会对程序重新进行编译。

接下来在 BSP 工程上右击,然后在菜单中选择Board Support Package Settings

在弹出的设置界面中勾选Xilfs以使用FAT文件系统

然后执行File->New->Application Project创建新工程,设置工程名为“FSBL”

工程模板选择Zynq FSBL

FSBL 工程创建完成之后,SDK 软件会自动执行编译过程,生成 FSBL.elf 文件。

4.软件设计 - 创建image文件(boot.bin)

​ BOOT.bin由fsbl.elf文件 vivado生成的fpga 的bit文件 app工程的elf文件(这里为led工程的elf)三个文件组成。在生成image的时候要分别填入三个文件的路径, 这里也有个偷懒的方法,就是在点 create boot image之前先选中 我们的APP工程,这样系统会自动为我们添加路径。

​ a)先选中APP工程目录(不是FSBL 也不是BSP 和 platform) ,如果一开始已经被选中了,请先用鼠标选择上下任意一个目录,再选择回APP目录,否则路径可能不自动加载。

​ b)执行xilinx –>create boot image

​ 在弹出来的界面中,由于我们执行了操作(a),系统自动为我设置好了路径。

​ 如果系统没有自动设置路径,可以重新执行一次操作(a),或者我们手动为其设置路径。

​ 接下来点击Create Image生成镜像文件

5.烧录镜像

​ 点击Xilinx -> Program Flash

​ 按照下图操作导入boot镜像文件和fsbl.elf文件,将Flash Type设置为qspi-x4-single

​ 如果严格按照步骤进行,此时板子应该已经进入JTAG调试模式,但是没有的话,将拨码开关调整到JTAG模式(按照商家给的手册或者原理图),重新上电,之后点击Program开始下载(必须在JTAG模式下)。

​ 下载完成后,重新上电,把拨码开关调整到QSPI模式,然后重新上电,到这里固化程序到QSPI FLASH的操作就完成了。

如果下载过程中出现“Flash Operation Failed”的报错,说明系统上电时没有正常进入JTAG 调试模式,请进入JTAG模式后再尝试下载

把程序固化到SD卡中

其实没有必要和QSPI的分的太死,两者操作步骤差不多,这里只介绍不同之处:硬件配置和烧录

1.硬件配置

SD卡的硬件配置,像QSPI的勾选那样,把SDIO0(或SDIO1)勾选上,这里主要看我们开发板的原理图。

注意:这里的情况都是基于PS的外设端口直接与外部器件相连,即MIO,若开发板上是与PL端的器件项链,需要再去配置EMIO的情况!

2.烧录

固化到SD卡与QSPI FLASH不同,在创建完image文件后,不需要执行Program Flash操作,只需要在刚才create boot image 的导出文件夹中,复制出这两个文件到空的TF卡中 (需要格式化成FAT32格式)

此时,通过拨码开关把芯片调整到SD Card模式,重新上电即可。

参考文章

"Tiny ZYNQ板 工程八 将程序固化至QSPI FLASH" "Tiny ZYNQ板 工程九 将程序放置在TF卡,并进行TF卡启动演示" "正点原子领航者ZYNQ之嵌入式SDK开发指南v2" "Zynq-7000 SoC Technical Reference Manual (UG585)"



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3