分享

9、ZYNQ 启动模式

 雪山白凤凰_ 2023-07-14 发布于广东

1、什么是固化

  ZYNQ 支持的几种启动模式分别是 JTAG、 NAND、 QSPI FLASH 和 SD Card 

  平时都是通过 JTAG 先下载 bit 流文件,再下载 elf 文件,最后点击 Run As 来运行程序。 JTAG 的方法是通过 TCL 脚本来初始化 PS,然后用 JTAG 收发信息,用于在线调试。但是这样只要一断电,程序就会丢失,掉电不保存。

  如果需要板卡中程序掉电不消失,则需要对程序进行固化。 ZYNQ7000 SOC 芯片可以从 FLASH 启动,也可以从 SD 卡启动。这里详细介绍如何制作镜像文件,以及 SD 和 FLASH 的固化方法。

  SD 固化:将镜像文件拷贝到 SD 卡,设置拨码开关,使系统从 SD 模式启动。那么每次断电重启后,系统都会从 SD 启动。

  QSPI FLASH 固化:设置拨码开关,将镜像文件烧写进 FLASH,使系统从 QSPI-FLASH 模式启动。 那么每次断电重启后,系统都会从 FLASH 启动。

2、固化准备

  如果我们要固化一个 ZYNQ 的程序,以及为这个程序做一个镜像文件,那么该如何做呢?

  首先, 想到的两个文件就是 PL 部分需要的 bit 文件,以及 PS 需要的 elf 文件。但是仅有这两个文件不够的,我们还需要一段代码把 bit 文件以及 elf 文件安置好,这段代码就是大名鼎鼎的 FSBL.elf

  因此要制作一个镜像文件需要三个文件:FSBL.elf、 该工程.bit、 该工程.elf

  最后得到一个等式就是: BOOT.bin = FSBL.elf + 该工程.bit + 该工程.elf。在工程编译后,会产生该工程的 bit 文件和 elf 文件。关键是这个 FSBL.elf 怎么生成?不用担心, FSBL.elf 文件 xilinx 早就为我们准备好了,我们可以利用SDK 生成它。在此之前,我们先简单了解一下 zynq 的启动的过程。

  (1)zynq 的从 SD 卡的启动的过程

  zynq 和大多数 arm 启动过程一样,启动过程也分为 3 个阶段,这三个阶段分别称之为阶段 0、阶段 1 和阶段 2。

  阶段 0:即传统的 BootROM 过程。 ZYNQ 芯片 ROM 里面固化了一段不可修改的程序,只要 ZYNQ 一上电,这段程序就会执行。它将对 ZYNQ 的 NAND、 NOR、 SD 等基本外设控制器进行初始化。把 SD 卡这类易失的存储器件初始化后,就会把其中的程序拷贝到 ZYNQ 的 OCM(On-chip memory)。这个被拷贝到片上 RAM 执行的程序就是我们今天要制作的文件——BOOT.bin。

  阶段 1: BOOT.bin 加载到 OCM 上开始执行。 BOOT.bin 由 FSBL.elf+该工程.bit+该工程.elf 构成。阶段 1 要做的就是:首先配置 PS 部分, PS 完成初始化后,会去配置 PL 部分,最后去加载阶段 2 的代码。

  阶段 2:这一阶段是可选的,主要是为了完成 Linux 系统启动过程。本次实验暂时不需要。

  (2) zynq 启动模式位的选择

  这里有个疑问,众所周知 ZYNQ 具有多种启动方式: NOR, NAND, Quad-SPI, SD Card 以及 JTAG 。 ZYNQ 如何判断到底从哪里启动呢?实际上,当上电后, ZYNQ 会根据模式管脚的设定,选用 boot 的方式。

  我们这里使用的ZYNQ 开发板有两种启动模式,一种是 SD 启动,另外一种是 QSPI FLASH 启动。开发板通过拨码开关对管脚进行设置,改变启动模式。

  注意: 请将开发板或核心板电源关闭后,对拨码开关操作,否则会对板卡造成损害。

  开发板启动模式及拨码开关状态如下所示,默认拨码是 SD 启动:

  核心板模式开关:

  选中 helloworld 工程(要做固化的工程),创建一个FSBL1工程不改动,然后右单击,选择 Creat Boot Image。

   在新窗口中,一共出现三个文件, 分别是 FSBL.elf、该工程 .bit、该工程 .elf 文件,如下图所示,制作镜像文件需要这三个文件:

  一般会自动添加这 3 个文件, 顺序必须是 fsbl.elf、 system_wrapper.bit、 hello_world.elf, 之后直接单击  Create Image即可完成 Boot.bin 的创建,此文件可作为 SD 卡启动文件和 SPI 启动文件。

  完成后,可以看到在 helloworld 工程(要做固化的工程)的文件夹中出现 bootimage 文件夹,展开后可以看到生成的 BOOT.bin 文件。这个 BOOT.bin 文件用于 SD 或 QSPI 固化。

 3、开始固化

  (1)SD 启动——固化测试

  将生成的 BOOT.bin 文件,复制到 SD 卡,再将 SD 卡插到开发板,将拨码开关设置为SD卡启动,最后打开电源,则开机后系统从 SD 卡启动,程序掉电不消失。

  注意: 放到 SD 卡的 bin 文件,文件名必须是 BOOT.bin,否则不识别。

  (2)QSPI-FLASH 启动固化测试

  从 VIVADO 2017.3 版本开始, Xilinx 官方为了使 Zynq-7000 和 Zynq UltraScale +实现流程相同,在 QSPI FLASH使用上做了变化,即 Zynq-7000 编程 flash 需要“指定的 fsbl”。这个 fsbl 用于初始化系统(主要是运行 ps7_init()函数)。 XILINX 官网中 Xilinx Answer 70548 和 Xilinx Answer 70148 提供了 VIVADIO 2017.3 版本 QSPI FLASH 下载方法。

  读者需要注意,如果不修改引导用的 fsbl,下载 uboot.bin 到 FLASH会失败, 以下就是下载 FLASH 的具体办法。

  本教程提供 VIVADO 2017.4 QSPI-FLASH 下载方法如下:

  Step1: 新建环境变量

    计算机属性高级系统设置高级环境变量新建系统变量

    变量名: XIL_CSE_ZYNQ_UBOOT_QSPI_FREQ_HZ

    变量值: 10000000

  Step2: 生成加载 QSPI FLASH 的 fsbl 文件

    新建一个新的 FSBL 文件,命名为 FSBL 2:

  Step3: 打开 FSBL 2的 main.c 文件,在此处增加“BootModeRegister = JTAG_MODE; ”保存并编译。

  Step4: 模式开关切换到 QSPI 启动模式,开发板通电。选择 Xilinx Tools > Program Flash 或单击Program Flash Memory。

   加载刚才生成的 BOOT.BIN 文件和 FSBL 2文件,单击 Program。

 

 

 

 

 

 

 

 

 

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多