ZYNQ程序固化


将程序存储在非易失性存储器中,在上电或者复位时让程序自动加载运行。
这个过程需要启动引导程序( Boot Loader)参与,Boot Loader会加载FPGA配置文件,以及运行在ARM中的软件应用。

一、简介

ZYNQ Soc的启动和配置过程中,既需要PS的配置信息,又需要PL的配置信息。
ZYNQ系列是没有办法只固化PL的程序的(NorFlash、SD卡等是连接在PS端的)。

PS 支持多种片外非易失性存储器(Quad SPI Flash,NAND Flash,NOR Flash 或 SD 卡)。
ZYNQ SoC 的启动由片上的 BootROM 开始。
片上 BootROM 是 ZYNQ 芯片上的一块非易失性存储器, 它包含了 ZYNQ 所支持的配置器件的驱动,里面的代码是不可修改的。

BootROM 中的代码首先会在片外的非易失性存储器中寻找一个头文件,头文件里定义了一些启动信息,用于配置 BootROM 的运行。
BootROM 执行之后,下一个配置阶段被称为 First-Stage Boot Loader(FSBL),它是由设计者所创建的。 FSBL 可以配置 DDR 存储器和硬件设计过程中所定义的一些外设。这些器件需要在加载软件应用及配置 PL 之前就初始化完毕。
FSBL 的工作内容:

  1. 初始化 PS
  2. 如果提供了 BIT 文件,则配置 PL
  3. 加载裸机应用程序到 DDR 中
  4. 开始执行裸机应用程序

PL 的配置是通过处理器配置访问接口(Processor Configuration Access Port,PCAPÿ

### Zynq-7010 固化程序开发教程及固件烧录 #### 一、Zynq-7010 固化程序概述 Zynq-7010 是一款基于 ARM Cortex-A9 处理器的 SoC 设备,其固化程序通常涉及 FSBL(First Stage Boot Loader)、SSBL(Second Stage Boot Loader)以及应用程序FPGA 配置比特流。这些组件共同构成了完整的启动链路。 在实际应用中,固化程序的主要目标是将整个启动镜像(`boot.bin` 或其他形式)存储到外部存储介质(如 QSPI Flash),以便设备断电重启后能够自动恢复运行状态[^3]。 --- #### 二、开发环境准备 要完成 Zynq-7010 的固化程序开发和固件烧录,需准备好以下工具和资源: 1. **硬件平台** - 基于 Zynq-7010 的开发板。 - USB-JTAG 编程器或其他兼容接口。 2. **软件工具** - Vivado Design Suite:用于生成 FPGA 比特流文件 `.bit` 和创建硬件描述文件 `hdf`。 - SDK (Software Development Kit):用于编写和编译嵌入式软件部分,包括 FSBL 和 SSBL。 - Vitis IDE(可选):支持更高级别的集成开发需求。 3. **必要文件** - 硬件设计文件 (`*.hdf`)。 - 应用程序源码或已编译的目标文件 (`*.elf`)。 - PMU Firmware 文件(如果适用)[^2]。 --- #### 三、具体操作步骤详解 ##### 1. 创建并配置项目 在 Vivado 中新建一个工程,导入硬件设计文件,并生成相应的 HDF 文件。此过程确保了 FPGA 架构与处理器之间的通信路径被正确定义。 ##### 2. 开发 First Stage Bootloader (FSBL) FSBL 是负责初始化 PS(Processor System)模块的关键组件。它读取后续阶段所需的加载项并将它们传递给内存地址空间供执行。 - 使用 Xilinx 提供的标准模板作为起点; - 修改 main 函数逻辑以适应特定应用场景下的额外功能需求; - 特别注意当目标为 QSPI Flash 时,“指定的 fsbl”应遵循特殊规则来规避潜在冲突问题[^3]。 ##### 3. 添加 Second Stage Bootloader (SSBL) 及其它内容 SSBL 承担更多复杂任务比如驱动安装或者操作系统内核加载等职责。对于裸机系统而言可能仅包含简单的业务处理单元即可满足基本要求。 此外还需加入用户定义的应用层代码以及其他依赖库形成最终交付物——单一可执行映像体(`*.elf`)。 ##### 4. 组合所有要素构建 BOOT IMAGE 借助 SDK 工具内的菜单选项依次添加前述各组成部分至新建立的 project 下面去构成完整 booted image 。随后导出该结果保存成标准格式如 boot .bin 这样可以直接刷写的档案档型态存放在 SD 卡当中或者是直接通过 JTAG 接口上传至内部 RAM 来测试验证效果如何[^2]。 ##### 5. 实现强制烧写而不改变物理开关设定 针对某些特殊情况不允许调整实物拨动开关位置却希望达成同样目的情形下 ,可以考虑采用软仿真手段模拟相应条件触发机制达到预期成果。例如编辑 FSBL 主函数里关于检测当前工作模态那段代码片段使之恒定返回代表经由 JTAG 启动的结果值[JTAG_MODE ]从而绕过常规限制继续往下走流程直至成功结束为止。 ```c /* Modify the following lines inside your custom FSBL */ BootModeRegister = Xil_In32(BOOT_MODE_REG); BootModeRegister &= BOOT_MODES_MASK; // Trick system into thinking it's in JTAG mode regardless of actual hardware state. BootModeRegister = JTAG_MODE; ``` ##### 6. 测试与部署 最后一步就是把组装完毕后的 binary file 利用合适的方式灌输进目标机器里面去检验整体运作状况是否符合预期设想那样顺畅无误才行啊! --- #### 四、注意事项 - 如果遇到类似 `[Xicom 50-186] Error while detecting SPI flash device...` 错误消息,请确认所使用的 BSP 是否匹配最新版 BSP 并重新生成全部关联产物再试一次看能否解决问题所在之处[^1]。 - 对于初次使用者来说建议先熟悉基础概念然后再逐步深入探索更加复杂的定制方案以免一开始就陷入困境难以自拔出来哦~ --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

暴风雨中的白杨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值