直接抄别人写好的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。
没问题的话,就收工了