ZYNQ固化程序笔记

本文提炼自《ZYNQ那些事儿-SDK实验篇》,介绍ZYNQ固化程序相关内容。ZYNQ启动至少需Stage0、Stage1两步,Stage0执行BootRom代码并搬运FSBL到OCM,Stage1执行FSBL代码。还说明了FSBL主要作用,最后给出设置ZYNQ固化程序的流程,包括生成FSBL、创建BOOT文件等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ZYNQ固化程序笔记

读《ZYNQ那些事儿-SDK实验篇》,去掉具体操作,提炼流程形成此文。
对于ZYNQ来说,必须要有PS端的配合才能固化程序,即使程序只包含PL端的逻辑。ZYNQ的启动由ARM主导,包括FPGA程序的加载,ZYNQ启动一般至少两个步骤:Stage0,Stage1.

  • stage0:上电复位或热复位之后,处理器首先执行BootRom里的的代码,这是最初的启动设置。BootRom中的代码用户不可更改,其中包含着NAND,NOR,Quad-SPI,SD和PCAP的驱动;另外把stage1的代码搬到OCM(On-Chip Memory)中,就是FSBL代码(First Stage Boot Loader)
  • stage1:这是最重要的一步,当BootRom搬运到OCM后,开始执行FSBL代码。
  • stage2:second stage bootloader是可选项,一般在跑系统的情况下运行。

FSBL主要作用:

  • 初始化PS端配置,这些配置就是在Vivado中队ZYNQ核的配置。包括初始化DDR,MIO,SLCR寄存器。余姚执行ps7_init.c和ps7_init.h
  • 如果有PL端程序,加载PL端的bitstream
  • 加载second stage bootloader 或 bare-metal应用程序到DDR存储器
  • 交接给second stage bootloader或bare-metal应用程序

设置ZYNQ固化程序的流程:
1生成FSBL
2创建BOOT文件
3按某种方式启动(启动方式:SD卡启动、QSPI启动)

以上具体步骤参照ZYNQ那些事儿-SDK实验篇第一章p42-p57

### Zynq 平台上的程序固化与烧录 在 Zynq 平台上,固化程序的过程涉及多个步骤和工具的支持。以下是关于如何在 Zynq 上进行程序固化的详细介绍。 #### 1. BootROM 过程概述 Zynq 芯片内部集成了一个不可修改的 ROM,该 ROM 中包含了启动引导代码。当设备上电时,BootROM 自动运行并初始化外部存储器接口(如 NAND、NOR 和 SD 卡)。随后,BootROM 将从这些存储介质中加载 `BOOT.bin` 文件至片上内存 (OCM, On-Chip Memory)[^2]。因此,在准备固化之前,需要先构建合适的 `BOOT.bin` 文件。 #### 2. 构建 BOOT.bin 文件 为了生成用于固化的 `BOOT.bin` 文件,通常需要以下几个组件: - **FSBL (First Stage Boot Loader)**:这是由 Vivado 工具链生成的第一阶段引导加载程序,负责初始化 PS 部分以及配置 FPGA 的 PL 部分。 - **Bitstream (.bit)**:描述 FPGA 配置的数据流文件,定义了 PL 的硬件结构。 - (可选)**Application ELF File**:如果项目中有裸机应用程序或者 Linux 内核镜像,则也需要将其加入到最终的二进制映像中。 通过使用 Xilinx 提供的 `bootgen` 工具可以将上述各部分组合成单一的 `BOOT.bin` 文件[^4]。 #### 3. 使用 SDK 烧写 QSPI Flash 一旦获得了有效的 `BOOT.bin` 文件,就可以利用 Vivado 或者 Vitis IDE 来完成实际的烧录工作。具体操作是在软件界面中的菜单路径找到 “Xilinx -> Program Flash”,按照提示选择目标设备类型为 QSPI NOR Flash,并指定先前创建好的 `.bin` 文件作为输入源数据[^1]。 对于仅依赖于 PL 功能而无需复杂操作系统支持的应用场景下,即使没有 ARM Cortex-A9 处理单元参与运算,仍然可以通过让 PS 控制器协助来达成整个系统的自举与正常运作状态设置目的[^3]。 #### 4. JTAG 模式下的全盘刷入 除了直接经由 SD/MMC 接口传输之外,另一种常见的方式便是借助调试探针以 JTAG 方法实施全面性的擦除加重写动作。这种方法特别适合那些希望永久保存特定版本固件副本的情况之下采用;而且由于其绕过了常规途径可能存在的任何潜在风险因素影响的缘故所以往往被认为更加可靠稳定一些[^5]。 ```bash openocd -f interface.cfg -c "init; pld load build/image.bit 0; exit" ``` 以上命令展示了 OpenOCD 如何配合定制脚本来自动化执行类似的任务序列实例之一。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值