首页 > 编程语言 >ZYNQ学习笔记 程序固化

ZYNQ学习笔记 程序固化

时间:2023-01-21 02:55:13浏览次数:53  
标签:PS FSBL 引脚 配置 笔记 ZYNQ 固化 PL

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的工作内容为:

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

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

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

  1. Boot ROM 头文件:控制 Boot ROM 设置,比如就地执行、加密、FSBL 偏移量、镜像文件大小等;
  2. First-Stage Boot Loader(fsbl.elf);
  3. PL 配置文件,即 BIT 文件(pl.bit);
  4. 运行在 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)"

标签:PS,FSBL,引脚,配置,笔记,ZYNQ,固化,PL
From: https://www.cnblogs.com/luotuodidi/p/17063470.html

相关文章

  • 舞蹈链 (DLX, Dancing Links X) 算法笔记
    舞蹈链(DLX,DancingLinksX)算法精确覆盖问题在一个全集X中若干子集的集合为S,S的子集S*,满足X中的每一个元素在S*中恰好出现一次。通俗地讲,给定一个\(N\)行\(M\)......
  • 【python】Matplotlib库学习笔记
    Matplotlib是python的绘图库。以下内容主要介绍Matplotlib的子库pyplot。pyplot是常用的2D绘图模块,包含一系列绘图相关函数。plot()函数plot()函数可以用来绘制......
  • IoT Network PHY 复习笔记 南安
    Sampling抽样Aliasing混叠Quantisation量化measurediscreteamplitudeinbits.Realsystemshavelimitedresourceintermsofthenumberofavailablebi......
  • 人工智能课程的复习笔记
    人工智能极大极小的算法实现的伪代码(9条消息)最清晰易懂的MinMax算法和Alpha-Beta剪枝详解Bug_Programmer的博客-CSDN博客minmax算法三个`加上Java,再敲一下空格就是代......
  • 【ABAQUS 二次开发笔记】使用keyword 、python和matlab一起处理Odb数据
    用conversionshellelement(S4R单元)建模层合板,有6层ply,每个lamina(ply)有3个integrationpoint,共计18个integrationpoint。我想得到集合SET-Middle-elem中所有integrati......
  • JDBC学习笔记
    1.JDBC的基本概念  1.1 JDBC是什么   JDBC(JavaDataBaseConnectivityJava数据库连接),可以理解为是一种用于执行SQL语句的API。  1.2JDBC的本质  ......
  • 数据库笔记小结
    ACID是靠什么保证的?原子性由undolog日志来保证,它记录了需要回滚的日志信息,事务回滚时撤销已经执行成功的sql;一致性由其他三大特性保证,程序代码需要保证业务上的一致性;......
  • 学习笔记——SpringMVC消息转换器概述;使用消息转换器处理请求报文;使用消息转换器处理
    2023-01-20一、SpringMVC消息转换器概述1、HttpMessageConverter<T>消息转换器作用:(1)将java对象与请求报文及响应报文进行相互转化(2)使用HttpMessageConverter<T>将请......
  • [ 5--Token学习 | 青训营笔记]
    这是我参与「第五届青训营」伴学笔记创作活动的第5天Token介绍Token,就是服务端生成的一串加密字符串、以作客户端进行请求的一个“令牌”。当用户第一次使用账号密码......
  • stm32笔记[3]-OpenOCD调试
    保命声明:笔者代码能力有限,若行文中有错漏之处欢迎大家指出。openocd介绍[https://openocd.org]OpenOCD,theOpenOn-ChipDebugger(片上调试器).macOS+STM32CubeIDE+......