直接抄别人写好的https://blog.csdn.net/fengyuwuzu0519/article/details/80411894
ZYNQ 的启动流程
ZYNQ7000 SOC 芯片可以从 FLASH 启动,也可以从 SD 卡里启动,本节介绍程序 FLASH 启动的方法。Zynq7000 SOC 芯片上电后,最先运行的是 ARM 端系统(PS)。然后再通过 ARM 系统软件部分加载 FPGA 的比特流文件.bit 至 FPGA(PL),配置 FPGA PL 端的逻辑功能。
如果是 linux 开发:
则只需固化 uboot 到 boot.bin。这样系统启动后,除了配置 FPGA 端资源,ARM 端则运行 uboot,uboot 负责加载内核到指定位置并启动内核开始运行。
ZYNQ 启动分为两个阶段
第一阶段是 BOOT ROM(ZYNQ 厂家固化代码)
第二阶段是 FSBL (First Stage Bootloader)SDK 工具来制作。
经过以上两个阶段,PL 端配置程序及 arm 端程序才开始运行。
第一阶段 (BOOT ROM)
上电后,Zynq7000 SOC 会首先执行片内 Boot ROM 代码,Boot ROM 代码读取 Boot mode 寄存器来判断是哪一种启动方式(SD card/QSPI Flash/JTAG)。
确定好哪种启劢方式后,Boot ROM 从相应的启动设备 (SD Card/QSPI Flash) 加载 First Stage Bootloader (FSBL) 到 On Chip Memory(OCM) RAM,并且将执行权交付给 FSBL。
第二阶段 FSBL (First Stage Bootloader)
使用 SDK 工具一步步生成 FSBL 代码和可执行文件,结合代码可知 FSBL 主要做了如下工作:
- 初始化 CPU,初始化串口;
- Processor System (PS) 一些控制器的初始化,如 MIO, PLL, CLK and DDR;
- 禁止 L1 Data Cache;
- 注册 ARM 中断向量;
- 通过 Boot mode 寄存器,判断是哪种启动方式。
QSPI Flash 启动方式:
初始化 QSPI Flash 控刢器;
从 Flash 拷贝 system.bit 到 FPGA (如果 Flash 中存有 system.bit);
从 QSPI Flash 拷贝应用程序的代码到 DDR3;
调转到应用程序执行;
SD Card 启动方式:
初始化 SD 控刢器;
从 SD Card 拷贝 system.bit 到 FPGA (如果 BOOT.BIN 中存有 system.bit);
从 SD card 拷贝应用程序的代码到 DDR3;
跳转到应用程序执行;
JTAG 启动方式
直接退出。
制作 BOOT.bin
配置硬件
新建项目的 ARM 核里需要 QSPI 或 SD 卡等相应的配置(取决于要把程序固化到哪个外设), 添加自已的硬件等.
然后生成 bit 文件并导出 SDK
编写正常的软件
按正常的模式编写出自已的软件. 会生成 ELF 文件
生成 boot.bin
在 eclipse 中新建一个应用, 用来专门生成 fsbl 用. 如下图
编译此项目, 然后选择菜单 Xilinx Tools->Create Boot Image:
如上图方法生成 boot.bin
烧录 boot.bin 到 flash
在 SDK 开发环境里,选择菜单 Xilinx Tools->Program Flash。
没问题的话, 就收工了