2. Zynq启动介质与硬件启动模式

Zynq-7000 上电后,真正决定“从哪里取第一段代码”的并不是软件,而是芯片在复位释放瞬间对一组 MIO 引脚的采样结果。BootROM 是固化在片内的只读代码,它在上电复位后首先运行,读取启动模式寄存器(Boot Mode Register)中锁存的引脚状态,据此选择 QSPI、NAND、NOR、SD/eMMC 或 JTAG 等启动介质,然后从对应接口加载 FSBL。因此,启动介质的选择本质上是一个硬件设计问题:引脚怎么接、上拉下拉怎么放、时钟和电源怎么给,直接决定了系统能否可靠启动。

启动模式引脚与寄存器

Zynq 使用 MIO[8:2] 这 7 个引脚作为启动模式选择输入,复位期间由 BootROM 采样并锁存到启动模式寄存器中。其中 MIO[8:7] 选择启动器件类型,MIO[6:3] 选择 QSPI、NAND、NOR 等器件的具体配置(如 QSPI 的位宽与反馈时钟、NAND 的页大小),MIO[2] 则用于选择 JTAG 级联模式或是否启用 PLL 旁路。采样发生在 POR 释放后的极短窗口内,此时引脚状态必须稳定,任何抖动或悬空都可能导致 BootROM 误判。

下表给出常见的启动模式编码示例(具体以对应器件 TRM 为准,此处为教学示例值):

MIO[8:7]启动器件典型 MIO[6:3] 含义
00JTAG级联/独立模式选择
01QSPI位宽、反馈时钟源
10NAND页大小、总线宽度
11SD/eMMC接口类型与速度模式

需要特别注意的是,MIO[8:2] 在复位后会被 BootROM 释放并复用为其他功能,因此这些引脚在硬件上通常通过电阻上拉或下拉到固定电平,而不是直接接电源或地。电阻值一般取 4.7kΩ~10kΩ,既保证采样窗口内电平稳定,又不会在后续功能复用中造成过大负载。

各启动介质的硬件要点

QSPI 是最常用的配置存储介质,通常接一片或两片 QSPI Flash,支持单线、双线和四线模式。硬件设计时需关注:QSPI 时钟(MIO[6] 或专用引脚)的走线长度、Flash 的 WP#/HOLD# 引脚是否被正确上拉、以及反馈时钟(Feedback Clock)是否从 Flash 端回接。若使用双片并行 QSPI,还需注意片选和地址映射关系。

NAND 启动依赖 BootROM 内置的 NAND 控制器,支持 SLC NAND,页大小和总线宽度由 MIO[6:3] 决定。NAND 的坏块管理由 FSBL 或后续软件负责,BootROM 只按顺序读取前若干块。硬件上要保证 R/B# 上拉、CE# 和 CLE/ALE 的正确连接,并注意 NAND 的供电时序。

NOR 启动使用并行 NOR Flash,接口占用较多 MIO 引脚,适合需要 XIP(片内执行)或大容量配置的场景。其地址/数据总线走线较长,需注意信号完整性和时序余量。

SD/eMMC 启动由 BootROM 通过 SD 控制器读取,支持 SD 2.0 和 eMMC。硬件上要保证卡检测(CD)和写保护(WP)引脚状态正确,eMMC 的 CMD、CLK、DAT 线需等长并做好阻抗控制。SD 启动常用于量产烧录和现场升级。

JTAG 启动不依赖外部非易失存储器,由主机通过 JTAG 链直接下载 FSBL 到 OCM 并执行,适合调试和首次点亮。JTAG 模式下 MIO[8:7]=00,且需注意 TCK、TMS、TDI、TDO 的上拉和串联电阻。

Zynq 启动模式选择与介质连接关系 PS 复位与 BootROM 采样 MIO[8:2] → 锁存启动模式寄存器 按模式选择接口加载 FSBL MIO[8:2] 启动模式引脚 复位窗口内电平必须稳定 上拉/下拉电阻 4.7kΩ~10kΩ QSPI Flash 单/双/四线 反馈时钟回接 NAND Flash SLC / 页大小 R/B# 上拉 NOR Flash 并行总线 XIP 支持 SD / eMMC CMD/CLK/DAT 等长与阻抗 JTAG 调试下载 无需外部存储 可靠性要点:采样窗口内引脚电平稳定;上拉/下拉阻值合理;时钟与电源时序满足器件要求; QSPI 反馈时钟、NAND R/B#、SD 卡检测、JTAG 上拉等细节直接影响启动成功率。

硬件设计对启动可靠性的影响

启动失败往往不是软件问题,而是硬件细节被忽略。最常见的情况包括:MIO[8:2] 上拉电阻缺失或阻值过大,导致复位采样时电平被邻近信号耦合拉偏;QSPI 反馈时钟未从 Flash 端回接,BootROM 在高速模式下采样错误;NAND 的 R/B# 未上拉,BootROM 等待就绪时误判超时;SD 卡检测引脚悬空,BootROM 误认为无卡而跳过 SD 启动。

另一个容易被忽视的点是电源时序。Zynq 要求 PS 各电源域按特定顺序上电,若 QSPI Flash 的 VCC 晚于 PS 的 MIO 电源建立,BootROM 在采样和读取时可能遇到 Flash 未就绪。类似地,eMMC 的 VCC 和 VCCQ 上电顺序、NAND 的 VCC 与 VSP 时序,都需要对照器件手册确认。

注意:MIO[8:2] 在复位后会被复用为其他外设功能。若这些引脚在系统中同时连接了其他器件的驱动输出,必须在硬件上保证复位窗口内不会发生总线冲突,否则可能损坏引脚或导致启动模式误判。

启动模式选择与调试建议

实际项目中,建议在 PCB 上为 MIO[8:2] 预留可更换的上拉/下拉电阻位,便于在不同启动介质之间切换。对于需要现场升级的产品,常用做法是:正常启动走 QSPI,升级时通过 SD 卡或 JTAG 强制进入备用模式。此时可以在 MIO[8:7] 上设计跳线或测试点,方便产线和售后操作。

调试阶段,若系统无法启动,可按以下顺序排查:先用 JTAG 连接并读取启动模式寄存器,确认 BootROM 实际采到的模式是否与硬件设计一致;再用示波器观察 MIO[8:2] 在复位释放瞬间的电平;最后检查对应介质的时钟、片选和数据线是否有正常活动。若 JTAG 能连上但 QSPI 启动失败,通常说明模式引脚或 Flash 硬件有问题,而不是 FSBL 本身。

此外,BootROM 在加载 FSBL 时会校验头部信息,若镜像格式不正确,即使硬件模式正确也会启动失败。因此,硬件启动模式与软件镜像制作必须配套验证:先用 JTAG 确认 FSBL 能正常运行,再烧录到 QSPI 或 SD 卡中测试,最后才批量生产。这种“先 JTAG、后介质”的验证顺序,可以快速区分硬件问题和镜像问题,减少排查时间。

实用建议:在原理图设计阶段,就把 MIO[8:2] 的上下拉配置、各启动介质的电源时序、时钟走线要求整理成一张检查表,与硬件工程师逐项确认。启动可靠性问题越早发现,改板成本越低。