ZCU104 启动模式终极指南
https://docs.amd.com/v/u/en-US/ug1267-zcu104-eval-bd
https://docs.amd.com/v/u/en-US/ug1085-zynq-ultrascale-trm
1. 核心概念:什么是启动模式?
Zynq UltraScale+ MPSoC 是一款极其复杂的芯片,它集成了处理器系统 (PS) 和可编程逻辑 (PL)。启动模式 (Boot Mode) 简单来说,就是告诉芯片的处理器(PS部分),在通电后应该“睁开眼”去哪里寻找第一行指令(即初始启动代码)。
这就好比电脑的 BIOS/UEFI 设置,您可以选择从硬盘、U盘还是网络启动。在 ZCU104 上,这个“选择”是通过一个物理的拨码开关 SW6 来完成的。设置了不同的启动模式,就决定了 ZCU104 是成为一个等待指令的硬件开发平台,还是一个能独立运行复杂操作系统(如Linux)的嵌入式系统。
2. 关键钥匙:SW6 拨码开关

在 ZCU104 电路板上,SW6 是一个4位的拨码开关,它直接连接到 Zynq 芯片的 PS_MODE[3:0] 引脚。这四个引脚的电平组合(高电平/低电平)决定了芯片的启动模式。
- 位置: 通常位于电路板边缘,需要您仔细查找。
- 操作: 开关拨向印有
ON的一侧代表1,另一侧代表OFF(或0)。 - 重要警告: 在调整 SW6 开关之前,必须确保 ZCU104 板卡已完全断电! 在带电状态下操作可能会损坏芯片或导致不可预测的行为。
下图展示了 SW6 开关及其对应的模式位。
| 开关引脚 | 模式位 [3] | 模式位 [2] | 模式位 [1] | 模式位 [0] |
|---|---|---|---|---|
| SW6 编号 | 4 | 3 | 2 | 1 |
| 二进制值 | 0/1 | 0/1 | 0/1 | 0/1 |

3. 主要启动模式详解
以下是 ZCU104 最常用和最重要的几种启动模式。
模式一:JTAG 模式
这是最基础、最底层的模式,是硬件工程师和底层软件开发者的核心工具。
- SW6 设置
[4, 3, 2, 1]:OFF, OFF, OFF, OFF(二进制:0000) - 工作原理: 在此模式下,Zynq 芯片的处理器在上电后不会执行任何代码。它会进入一种暂停状态,静静地等待来自 JTAG 调试端口的指令。
- 为什么需要它?
- 初始硬件开发与调试: 当您在 Vivado 中设计了新的硬件逻辑(PL部分),需要烧写
.bit文件并使用 ILA (集成逻辑分析仪) 观察内部信号时,这是最直接的方式。 - 裸机程序 (Bare-metal) 开发: 在没有操作系统的情况下,直接在 ARM 处理器上跑 C/C++ 程序时,您会通过 Vitis IDE 使用 JTAG 来下载和单步调试您的代码。
- 系统恢复: 如果板子的闪存或 SD 卡中的启动程序损坏导致无法启动,JTAG 是唯一的“救砖”通道。您可以强制连接到处理器并重新烧写一个正常的启动镜像。
- 初始硬件开发与调试: 当您在 Vivado 中设计了新的硬件逻辑(PL部分),需要烧写
- 如何操作与预期现象:
- 将板卡断电。
- 将 SW6 全部拨到
OFF。 - 连接 Micro-USB JTAG 线缆。
- 给板卡上电。
- 此时,电源灯亮,但
DONE灯(表示PL配置完成)不会亮,也不会有任何串口信息输出。 - 在 Vivado Hardware Manager 或 Vitis 中,您可以成功连接到 Target,并进行烧写、调试等操作。
模式二:SD 卡模式 (SD1_LS)
这是运行高层操作系统(如 PetaLinux, PYNQ, Ubuntu)时最常用、最灵活的模式。
- SW6 设置
[4, 3, 2, 1]:OFF, OFF, OFF, ON(二进制:0001) - 工作原理: 芯片的内部引导程序 (BootROM) 会去寻找连接在 SD 卡插槽 (J100) 上的 Micro-SD 卡。如果找到,它会读取卡上特定分区内的启动镜像文件(通常是
BOOT.BIN),并执行它。 - 为什么需要它?
- 运行完整操作系统: PYNQ 和 PetaLinux 提供了丰富的软件生态和易用的开发环境。SD 卡容量大,可以轻松容纳完整的 Linux 系统和您的应用程序。
- 开发和迭代方便: 您可以轻松地在电脑上修改 SD 卡中的文件,然后插回板子上启动,极大地方便了软件应用的开发和测试。
- 动态硬件加载: 在 PYNQ 环境下,您可以在 Python 中动态加载不同的硬件设计 (Overlays),而不需要重新启动整个系统,这都依赖于从 SD 卡文件系统读取设计文件。
- 如何操作与预期现象:
- 准备一张烧写好 PYNQ 或 PetaLinux 镜像的 Micro-SD 卡。
- 将板卡断电。
- 将 SW6 设置为
0001(只有1号位是ON)。 - 将 SD 卡插入卡槽。
- 给板卡上电。
- 板卡将开始启动过程,您可以通过连接到 Micro-USB 的串口终端观察到 Linux 的启动日志。几分钟后,系统启动完成,
DONE灯会亮起,您可以通过网络 SSH 登录系统。
模式三:QSPI 闪存模式 (QSPI32)
当您的产品开发完成,需要部署为一个稳定、可靠的嵌入式设备时,这个模式是最佳选择。
- SW6 设置
[4, 3, 2, 1]:ON, OFF, ON, OFF(二进制:1010for QSPI32) - 工作原理: 与 SD 卡模式类似,但 BootROM 会去板载的 QSPI 闪存芯片中寻找启动镜像。QSPI 是一种非易失性存储器,速度快且稳定。
- 为什么需要它?
- 产品部署: 最终产品不应该依赖于可随意插拔的 SD 卡。将系统固化在 QSPI 中,可以实现开机自启,更加稳定可靠。
- 快速启动: QSPI 的读取速度通常比 SD 卡在引导阶段更快,可以缩短系统的启动时间。
- 系统安全性: 固化在板载 Flash 中的系统不易被篡改。
- 如何操作与预期现象:
- 首先,您需要通过 JTAG 模式连接到板卡,使用 Vitis 或其他工具将一个有效的启动镜像 (
BOOT.BIN) 烧写到 QSPI 闪存中。这是一个一次性的编程步骤。 - 烧写完成后,将板卡断电。
- 将 SW6 设置为 QSPI 模式。
- 移除 SD 卡(如果有的话)。
- 给板卡上电。
- 板卡会像从 SD 卡启动一样,开始加载并运行系统,但这次所有数据都来自于内部的闪存芯片。
- 首先,您需要通过 JTAG 模式连接到板卡,使用 Vitis 或其他工具将一个有效的启动镜像 (
4. 总结与开发流程建议
下表总结了主要的启动模式:
| 启动模式 | SW6 设置 [4,3,2,1] | 二进制值 | 主要用途 |
|---|---|---|---|
| JTAG | OFF, OFF, OFF, OFF | 0000 | 硬件开发、底层调试、系统恢复 |
| SD Card | OFF, OFF, OFF, ON | 0001 | 运行 Linux/PYNQ、应用开发、灵活测试 |
| QSPI32 | ON, OFF, ON, OFF | 1010 | 最终产品部署、快速可靠启动 |
典型的开发工作流如下:
- 阶段一:硬件设计与验证
- 使用 JTAG 模式。在 Vivado 中完成 PL 设计,烧写 bitstream,用 ILA 进行调试,确保硬件逻辑正确无误。
- 阶段二:软件与系统开发
- 使用 SD 卡模式。创建 PetaLinux 或 PYNQ 镜像,将第一阶段验证好的硬件(作为 Overlay)集成进来。在 Linux/Python 环境中开发上层应用,并与硬件进行交互。
- 阶段三:产品固化与部署
- 将第二阶段最终确认的软件和硬件打包成一个完整的启动镜像。
- 切换到 JTAG 模式,将该镜像烧写到板载的 QSPI 闪存中。
- 最后,切换到 QSPI 模式,将板卡部署为最终产品,实现上电自启动。
2万+

被折叠的 条评论
为什么被折叠?



