Zynq7020作为Xilinx推出的经典SoC芯片,其PS(Processing System)与PL(Programmable Logic)协同工作的特性使其在嵌入式开发中广泛应用。然而,初次接触Zynq的开发者在制作启动文件boot.bin
及烧录时,常因流程复杂、工具操作不当导致失败。本文基于多篇实践文档与开发者经验,总结了一套高效、清晰的流程,涵盖环境配置、文件生成、烧录技巧及常见问题解决,帮助开发者快速掌握核心要点。
一、环境准备与核心概念
1.1 硬件与软件要求
- 硬件:Zynq7020开发板(如创龙、正点原子等)、JTAG下载器、Micro-USB线、QSPI Flash或SD卡。
- 软件:Vivado(推荐2017.4或2020.2版本)、Xilinx SDK/Vitis、串口调试工具(如Putty)。
1.2 核心文件解析
- FSBL(First Stage Bootloader):由SDK生成的
.elf
文件,负责初始化PS端硬件(如DDR、时钟)并加载PL端比特流及应用程序。 - 比特流文件(.bit):PL端逻辑配置文件,非必需,但PL与PS协同工作时需包含。
- 应用程序(.elf):用户编写的可执行文件,如裸机程序或Linux内核。
- BOOT.bin:最终启动镜像,由FSBL、比特流、应用程序按特定顺序合并生成。
二、制作BOOT.bin的详细步骤
2.1 生成FSBL文件
-
导出硬件设计
- 在Vivado中完成硬件设计(含Zynq PS配置)后,通过
File → Export → Export Hardware
导出包含比特流的.xsa
或.hdf
文件。 - 关键点:勾选
Include bitstream
以确保PL配置同步导出。
- 在Vivado中完成硬件设计(含Zynq PS配置)后,通过
-
在SDK/Vitis中创建FSBL工程
- 启动SDK,新建
Application Project
,选择Zynq FSBL模板。 - 编译后生成
fsbl.elf
文件,此文件将作为启动链的第一阶段。
- 启动SDK,新建
2.2 添加应用程序与比特流
-
用户程序编译
- 在SDK中新建应用程序工程(如
Hello World
),编译生成.elf
文件。
- 在SDK中新建应用程序工程(如
-
比特流文件准备
- PL工程需在Vivado中生成
.bit
文件,若仅使用PS功能可跳过此步。
- PL工程需在Vivado中生成
2.3 合成BOOT.bin
-
使用Create Boot Image工具
- 在SDK中,通过
Xilinx Tools → Create Boot Image
打开工具。 - 文件添加顺序:依次添加
fsbl.elf
、.bit
(可选)、应用程序.elf
。顺序错误将导致启动失败。
- 在SDK中,通过
-
生成配置
- 指定输出路径,生成
.bif
(引导镜像描述文件)和BOOT.bin
。 - 避坑指南:避免直接使用默认的
Create Boot Image
选项,需手动确认文件顺序和内容,否则可能生成空文件。
- 指定输出路径,生成
三、烧录到开发板
3.1 烧录方式选择
- QSPI Flash:适用于代码固化,需通过
Program Flash
工具烧录。 - SD卡:临时调试常用,仅需将
BOOT.bin
放入FAT32格式的SD卡根目录。
3.2 使用Program Flash工具
-
硬件连接与模式设置
- 开发板拨码开关设为JTAG模式(如拨码为
010101
)。 - 连接JTAG与电源,确保硬件识别正常。
- 开发板拨码开关设为JTAG模式(如拨码为
-
烧录参数配置
- 在SDK中选择
Xilinx → Program Flash
,指定BOOT.bin
和fsbl.elf
路径。 - Flash类型:选择
qspi-single
(QSPI启动)或sd
(SD卡启动)。
- 在SDK中选择
-
烧录与验证
- 点击
Program
,等待提示成功后,切换拨码至QSPI模式(如100101
)并重启开发板。 - 通过串口查看启动日志,确认应用程序正确执行。
- 点击
四、常见问题与解决方案
4.1 BOOT.bin为空或启动失败
- 原因:文件顺序错误或缺少必要组件。
- 解决:检查
.bif
文件内容,确保顺序为fsbl.elf → .bit → app.elf
。
4.2 烧录后代码未更新
- 原因:Flash未正确擦除或启动模式设置错误。
- 解决:在
Program Flash
中勾选Erase Before Programming
,并确认拨码开关状态。
4.3 PL配置未生效
- 原因:比特流文件未包含在
BOOT.bin
中。 - 解决:重新生成包含
.bit
的BOOT.bin
,确保PL端时钟与复位信号正确连接。
五、创新优化与扩展
5.1 自动化脚本生成
- 使用
bootgen
命令行工具,通过编写.bif
文件批量生成BOOT.bin
,提升效率。
bootgen -image bootimage.bif -arch zynq -o BOOT.bin
5.2 多阶段启动配置
- 结合U-Boot SPL(Secondary Program Loader)替代FSBL,实现更灵活的二级引导,适用于复杂系统。
5.3 QSPI与SD卡双启动
- 通过修改FSBL代码,实现根据外部条件(如按键状态)选择启动介质,增强系统灵活性。
结语
制作与烧录boot.bin
是Zynq开发的核心技能之一。本文从工具操作、文件结构到实战技巧,系统梳理了关键步骤,并提供了创新优化方向。开发者需重点关注文件顺序、启动模式配置及硬件验证,避免常见陷阱。通过反复实践与日志分析,可快速掌握Zynq7020的启动流程,为复杂系统开发奠定基础。