2.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.2ZYNQ的启动
2.2.1启动模式的设置 ZYNQ支持JTAG启动模式、NOR BOOT模式、NAND FLASH启动模式、QSPI启动模式、SD卡启动模式。这里我们的硬件只支持SD卡启动模式、QSPI启动模式、JTAG启动模式(部分硬件不支持)。
2.2.2上电时序要求 上电需要满足PS_POR_B应该一直保持低电平,并且在PS_SRST_B引脚拉高 2us后拉高。很多上电启动异常的情况应该排查电源的启动顺序顺序是否满足要求。
2.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 阶段2: 该阶段一般运行的是应用程序比如裸机的应用程序、或者LINUX 的boot.elf。也可能是第二阶段引导程序,比如QSPI+EMMC模式,从QSPI完成fsbl加载后可以对eMMC分区识别,把剩余的加载项放到EMMC中,这样只需要一个很小的QSPI FLASH就可以了。当然一般我们开发板都采用了足够达的QSPI FLASH,一般不需要这么节约使用。等LINUX部分我们再探讨这方面的问题。
2.3 ZYNQ IP相关设置 由于本demo直接使用“01Vitis Soc开发入门”这个demo,因此不再对PS所有的设置重复,只对涉及到固化的QSPI接口、SDIO接口的配置重复强调下。 2.3.1QSPI-FLASH接口
2.3.2SDIO0-SD卡 2.3.3SDIO1-EMMC
2.3.4时钟设置中QSPI时钟设置125M
2.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指向的路径也会一起修改,所以只要改一个即可
2.4SDK程序固化 使用SDK完成基本的固化方法甚至不需要掌握ZYNQ的启动原理。只需要正确产生BOOT.BIN文件,正确设置模式开关,掌握烧录流程即可,所以以下关键还是软件的操作流程。 这里再次强调下,米联客 ZYNQ 系列 7x 核心板老版本的不支持 JTAG 方式,所以下载 QSPI 方式会比较麻烦,我们下面也给出了解决方案。对于新的米联客7x是支持 JTAG 方式,固化 QSPI 会更加方便。
2.4.1BOOT.BIN产生的方法1:第一方法右击工程,单击Build Project 在以下路径可以找到刚刚产生的文件
2.4.2SD卡启动直接复制路径下的BOOT.BIN文件并且放到SD卡中,之后插入开发板,设置SD卡模式启动(底板上模式开关全部设置ON OFF OFF) 为了观察实现结果,需要打开串口 如果不清楚串口号的,可以查看下设备管理器,如果发现没装串口驱动的安装上驱动 2:第二种方法右击需要制作BOOT.BIN文件的SDK APP工程 一般会自动添加3个文件,顺序必须是fsbl.elf system_wrapper.bit hello_world.elf,之后单击Create Image 可以看到创建的BOOT.BIN文件 第二种方法创建的BOOT.BIN文件路径
2.4.3QSPI的启动
1:直接JTAG模式的核心板烧录方法米联客F3P支持此模式,因此下载很便捷,首先把模式开关全部设置到ON 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模式 对于老版本的7x核心板,没有JTAG模式因此需要严格根据以下步骤才能烧录程序。老版本的核心板模式开关全部设置到OFF OFF,也就是TF卡模式,所以确保没有插入TF卡。 当然该方法也支持新版本的7x核心板(新版本的有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编译
3从QSPI启动断电设置模式开关为QSPI启动1-ON 2-OFF (不能通电状态下设置模式开关) 为了观察实现结果,需要打开串口 如果不清楚串口号的,可以查看下设备管理器,如果发现没装串口驱动的安装上驱动
|