本帖最后由 FPGA课程 于 2024-9-23 18:16 编辑
软件版本:VIVADO2021.1
操作系统:WIN10 64bit
硬件平台:适用 XILINX A7/K7/Z7/ZU/KU 系列 FPGA
实验平台:米联客-MLK-H3-CZ08-7100开发板
板卡获取平台:https://milianke.tmall.com/
登录“米联客”FPGA社区 http://www.uisrc.com 视频课程、答疑解惑!
1概述 基于ZYNQ的启动方式包括了ZYNQ的加载流程、支持的加载模式、裸机启动、LINUX启动等。其中加载模式有常用的JTAG模式、QSPI模式、SD卡模式、NAND FLASH模式、QSPI+EMMC模式。如果需要详细了解其中的原理需要阅读大量资料和一些XILINX的FSBL代码以及LINUX启动部分的源码。 对于SDK开发的初级读者来说在刚开始入门的时候,掌握复杂的启动原理相对比较困难,所以对于初级读者关键还是掌握主要的启动模式方法、基本的启动流程原理,比如QSPI启动、SD启动、如何制作BOOT.BIN文件的能力,满足一般的项目要求。对于需要更加深入掌握比如精简定制fsbl、multiboot方式、QSPI+EMMC启动方式、JTAG启动方式等,则可以详细阅读ug585、ug821、阅读fsbl代码、分析linux中相关的uboot启动流程和参数设置。 实验目的: 1:熟悉ZYNQ启动模式类型和硬件设置 2:熟悉ZYNQ启动的过程 3:掌握ZYNQ IP SD接口启动和QSPI FLASH启动的设置 4:利用SDK产生或者制作BOOT.BIN文件 5:完成SD卡启动实验 6:完成QSPI启动实验 2 ZYNQ的启动
2.1启动模式的设置 ZYNQ支持JTAG启动模式、NOR BOOT模式、NAND FLASH启动模式、QSPI启动模式、SD卡启动模式。这里我们的硬件只支持SD卡启动模式、QSPI启动模式、JTAG启动模式(部分硬件不支持)。
注意:MLK_CZ08_7100 核心板不支持 SD 卡启动,对于裸机程序,只支持 QSPI 固化启动,对于 LINUX 可以先固 化到 FLASH ,然后启动后,切换从 SD 或者 EMMC 加载文件系统,LINUX 部分可以具体看 LINUX 部分教程 2.2上电时序要求 上电需要满足PS_POR_B应该一直保持低电平,并且在PS_SRST_B引脚拉高 2us后拉高。很多上电启动异常的情况应该排查电源的启动顺序顺序是否满足要求。
2.3ZYNQ的启动流程下图展示了ZYNQ上电复位或者非上电复位后,进入BOOTROM程序执行的状态框图。
阶段0: BootROM中包含了一段芯片出厂前就带的启动代码,当上电复位(POR)或非 POR 系统复位(PS_SRST_B、调试、看门狗、软件)后,BootROM程序在主CPU(CPU 0)上开始执行。BootROM程序读取外部存储器中的BOOT.BIN文件,并且查找其中的BootROM Heard参数,以确认程序如何切换到下阶段1。如果是QSPI FLASH中没有找到BOOT.BIN文件,BootROM会跳到下一个32KB的位置重新搜索BOOT.BIN 在以下流程图中,展示了第一个阶段的复制FSBL到OCM的流程图。其中XIP模式我们这里不涉及。
阶段1: 阶段0把FSBL拷贝到OCM(On-chip memory)中后,CPU0开始从OCM运行FSBL代码。包括: 1:初始化PS的配置参数包括MIO、DDR等 2:使用BIT流对PL进行编程 3:加载第二阶段的引导程序或者裸机程序到DDR存储器中 4:阶段2
该阶段一般运行的是应用程序比如裸机的应用程序、或者LINUX 的boot.elf。也可能是第二阶段引导程序,比如QSPI+EMMC模式,从QSPI完成fsbl加载后可以对eMMC分区识别,把剩余的加载项放到EMMC中,这样只需要一个很小的QSPI FLASH就可以了。当然一般我们开发板都采用了足够达的QSPI FLASH,一般不需要这么节约使用。等LINUX部分我们再探讨这方面的问题。 3 ZYNQ IP相关设置 由于本demo直接使用“01Vitis Soc开发入门”这个demo,因此不再对PS所有的设置重复,只对涉及到固化的QSPI接口、SDIO接口的配置重复强调下。 3.1QSPI-FLASH接口
3.2 PS 以太网接口
3.3时钟设置中QSPI时钟设置125M
4搭建Vitis-sdk工程 直接使用“01Vitis Soc开发入门”这个demo中已经创建好的工程实现。复制整个工程文件到第二个demo的文件路径中。
启动vitis
设置好路径
完成加载后,可以看到和“01Vitis Soc开发入门”整个demo一样。
由于刚刚修改了路径,因此必须对SDK工程的路径修改(奇怪的是VITIS-SDK居然不是采用相对路径识别办法,这样每次修改工程路径后,都需要打开SDK重新指向新的路径才可以,真的是很不友好) 双击任何一个APP demo的.prj ,右边都会展开该APP的soc_base路径。这里需要大家读者特别注意,如果复制了之前的文件,必须重新修改Platform的soc_base路径,否则指向的路径可能还是之前的路径要么无法编译,要么无法调试,或者出现其他异常情况。
单击Manage
可以看到现在指向的还是老的路径,选中后全部删除
之后重新添加,之后单击OK
选中以后单击OK
单击YES,这样就改好了,而且其他的工程的soc_base指向的路径也会一起修改,所以只要改一个即可
5 SDK程序固化 使用SDK完成基本的固化方法甚至不需要掌握ZYNQ的启动原理。只需要正确产生BOOT.BIN文件,正确设置模式开关,掌握烧录流程即可,所以以下关键还是软件的操作流程。 5.1BOOT.BIN产生的方法
1:第一方法右击工程,单击Build Project
在以下路径可以找到刚刚产生的文件
2:第二种方法右击需要制作BOOT.BIN文件的SDK APP工程
一般会自动添加3个文件,顺序必须是fsbl.elf system_wrapper.bit hello_world.elf,之后单击Create Image
可以看到创建的BOOT.BIN文件
第二种方法创建的BOOT.BIN文件路径
5.2QSPI 的启动1:直接 JTAG 模式的核心板烧录方法 MLK_H3_CZ08-7100-MZ7100FC 系列支持此模式, 因此下载很便捷,首先把模式开关全部设置到 ON ON
2:不支持 JTAG 模式的核心板烧录方法 2-1:系统环境变量修改 对于 ZYNQ 或者 MPSOC 下载 QSPI 程序需要用到 2 个文件 Boot.bin 文件:改文件由 fsbl.elf 文件、fpga .bit 文件、应用程序.elf 文件合成 fsbl.elf 文件:如果开发板或者核心板支持 JTAG 模式,可以直接使用合成 Boot.bin 的 fsbl.elf 文件,否则需要单 独新建一个 fsbl,并且修改代码强制支持 JTAG 模式 对于老版本的 7035 核心板,没有 JTAG 模式因此需要严格根据以下步骤才能烧录程序。老版本的核心板模式 开关全部设置到 OFF OFF,也就是 TF 卡模式,所以确保没有插入 TF 卡。
当然该方法也支持新版本的 7035 核心板(新版本的有 JTAG 模式,后面介绍下载更方便) 本教程提供 VITIS 2021.1 QSPI-FLASH 下载方法如下: Step1: 新建环境变量
变量名:XIL_CSE_ZYNQ_UBOOT_QSPI_FREQ_HZ 变量值:10000000
2-2:替换 zynq_qspi_x4_single.bin 文件 由于 2021.1 flash 固化存在 bug,所以直接替换 bin 文件,zynq_qspi_x4_single.bin 文件在配套工程的 uisrc/05_boot 路径下
2-3:新建一个 zynq_fsbl platform 工程 读者需要注意,如果不修改引导用的 fsbl,下载 uboot.bin 到 FLASH 会失败,以下就是下载 FLASH的具 体办法,以下步骤为修改引导用的 fsbl文件,用以强制支持 JTAG 模式。 新建一个用于引导的 fsbl 文件
2-4:修改支持强制 JTAG 模式 打开 zynq_fsbl 的 main.c 文件,在此处增加“BootModeRegister = JTAG_MODE; ”保存并编译。
2-5:下载到 FLASH 老版本的核心板模式开关全部设置到 OFF OFF,也就是 TF 卡模式,所以确保没有插入 TF 卡。该方法也支持新 的核心板下载。
右击 zynq_fsbl 编译
5.3 从 QSPI 启动断电设置模式开关为QSPI启动1-ON 2-OFF (不能通电状态下设置模式开关) 为了观察实现结果,需要打开串口
如果不清楚串口号的,可以查看下设备管理器,如果发现没装串口驱动的安装上驱动
|