以前工程都是通过 JTAG 先下载 bit 流文件,再下载 elf 文件,最后点击 Run As 来运行程序。JTAG 的方法是通过 TCL 脚本来初始化 PS,然后用 JTAG 收发信息,用于在线调试。但是这样只要一断电,程序就会丢失,掉电不保存。
本文详细介绍如何制作镜像文件。将镜像文件拷贝到 SD 卡,设置拨码开关,使系统从 SD 启动。那么每次断电重启后,系统都会从 SD 启动。这样将程序做固化,掉电重启后就不会丢失。
1.固化的流程
2. 固化准备
首先,想到的两个文件就是 PL 部分需要的 bit 文件,以及 PS 需要的 elf 文件。但是仅有这两个文件不够的。我们还需要一段代码把 bit 文件以及 elf 文件安置好。这段代码FSBL.elf。
因此要制作一个镜像文件需要三个文件:
1、FSBL.elf 2、.bit 3、.elf。
最后得到一个等式就是:BOOT.bin = FSBL.elf+该工程.bit+该工程.elf。
(我们利用SDK生成FSBL.elf 文件)
2. 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. BOOT.bin 制作过程
打开工程,双击打开原理图。
双击 ZYNQ Processing System,对其进行配置:
选择 MIO Configuration 选项,然后如下图所示配置:
MIO ConfigurationàMemory Interfaces 配置:
1、 勾选 Quad SPI Flsh
2、 勾选 Feedback Clk
MIO ConfigurationàI/O Peripherals 配置:
1、 勾选 SD 0
2、 勾选 CD,并设置 MIO 47
3、 勾选 WP,并设置 MIO 46
Clock ConfigurationàIO Peripheral Clocks 配置:
QSPI 时钟设置为 125
点击 OK 完成配置。
右击 system.bd, 单击 Generate Output Products。
右击 system.bd 选择 Create HDL Wrapper 这步的作用是产生顶层的 HDL 文件
选择 Leave Let Vivado manager wrapper and auto-update 然后单击 OK
生成 Bit 文件。
导出到硬件。
启动 SDK
新建一个应用工程
填写工程名 FSBL,点击 Next
工程类型选择 Zynq FSBL。
按快捷键 Ctrl+B 编译一下工程。
选中其中一个工程(记住是哪一个工程,等会儿好找 Boot.bin),然后右单击,选择 Creat Boot Image。
在新窗口中,一共出现三个文件,分别是 FSBL.elf、.bit、.elf 文件,如图所示。制作镜像文件需要这三个文件。直接单击 Create Image 即可完成 Boot.bin 的创建,此文件可作为 SD 卡启动文件和 SPI 启动文件。
在之前设定的文件夹下找到 BOOT.bin 文件,并且将其拷到 SD 卡中,再将 SD 卡插到开发板,最后打开电源。开机后系统从 SD 卡启动,程序掉电不消失。
最后提醒下放大 SD 卡的 bin 文件,文件名必须是 BOOT.bin,否则不识别。
编辑:jq
全部0条评论
快来发表一下你的评论吧 !