[X]关闭

[米联客-XILINX-H3_CZ08_7100] FPGA_SDK入门篇连载-02 程序固化入门(SDK 方式)

文档创建者:FPGA课程
浏览次数:183
最后更新:2024-09-23
文档课程分类-AMD-ZYNQ
AMD-ZYNQ: ZYNQ-SOC » 1_SDK应用方案(仅旗舰型号) » 1-SDK基础入门方案
本帖最后由 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启动模式(部分硬件不支持)。
81863885f0cf441d8ea600becb9a6c16.jpg
ddb97a499a2a4c2fbe9d8876f7e094e4.jpg
注意:MLK_CZ08_7100 核心板不支持 SD 卡启动,对于裸机程序,只支持 QSPI 固化启动,对于 LINUX 可以先固 化到 FLASH ,然后启动后,切换从 SD 或者 EMMC 加载文件系统,LINUX 部分可以具体看 LINUX 部分教程
2.2上电时序要求
        上电需要满足PS_POR_B应该一直保持低电平,并且在PS_SRST_B引脚拉高 2us后拉高。很多上电启动异常的情况应该排查电源的启动顺序顺序是否满足要求。
80821952b1024589b2a35ababa703d1c.jpg
2.3ZYNQ的启动流程
下图展示了ZYNQ上电复位或者非上电复位后,进入BOOTROM程序执行的状态框图。
b75b10c1b832489c8b27a62b66360e57.jpg
阶段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模式我们这里不涉及。
0be93b73872e4be28f71cf53f91f7fc3.jpg
阶段1:
阶段0把FSBL拷贝到OCM(On-chip memory)中后,CPU0开始从OCM运行FSBL代码。包括:
1:初始化PS的配置参数包括MIO、DDR等
2:使用BIT流对PL进行编程
3:加载第二阶段的引导程序或者裸机程序到DDR存储器中
4:阶段2
9427df78f125437baba66e720c5d28de.jpg
        该阶段一般运行的是应用程序比如裸机的应用程序、或者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接口
d7fffab416244501b66b3603fa6fa8b2.jpg
3.2 PS 以太网接口
e23ccaecc13446759f8589c0e5c9c930.jpg
3.3时钟设置中QSPI时钟设置125M
7a3d7b27363c4cf9b0b4c133f7b4e2bf.jpg
4搭建Vitis-sdk工程
        直接使用“01Vitis Soc开发入门”这个demo中已经创建好的工程实现。复制整个工程文件到第二个demo的文件路径中。
eb73820ad7db4bae9b442b7aff0fcc53.jpg
启动vitis
1a4b11b1422d40ea895346a8865c9dc1.jpg
设置好路径
ac3624a4c9df4bce8da9d6482b4f376f.jpg
完成加载后,可以看到和“01Vitis Soc开发入门”整个demo一样。
788d058c5cfe423bbe0a7ea44f8353c9.jpg
        由于刚刚修改了路径,因此必须对SDK工程的路径修改(奇怪的是VITIS-SDK居然不是采用相对路径识别办法,这样每次修改工程路径后,都需要打开SDK重新指向新的路径才可以,真的是很不友好)
        双击任何一个APP demo的.prj ,右边都会展开该APP的soc_base路径。这里需要大家读者特别注意,如果复制了之前的文件,必须重新修改Platform的soc_base路径,否则指向的路径可能还是之前的路径要么无法编译,要么无法调试,或者出现其他异常情况。
77212c0e899745538e3141df8a7b66f2.jpg
单击Manage
760238fde6644a2589edd8322ad3b1ea.jpg
可以看到现在指向的还是老的路径,选中后全部删除
747f68347b9347afa845897ceeeec942.jpg
之后重新添加,之后单击OK
8f229bd344744b2ebfea24200c93c35d.jpg
选中以后单击OK
083db1412f27443eb977a3b62723efec.jpg
单击YES,这样就改好了,而且其他的工程的soc_base指向的路径也会一起修改,所以只要改一个即可
f7d7f26ce9a542c7921fda251fab5e67.jpg
5 SDK程序固化
        使用SDK完成基本的固化方法甚至不需要掌握ZYNQ的启动原理。只需要正确产生BOOT.BIN文件,正确设置模式开关,掌握烧录流程即可,所以以下关键还是软件的操作流程。
5.1BOOT.BIN产生的方法
1:第一方法
右击工程,单击Build Project
a5b457aa902546388e984fbae20ea58c.jpg
696ea115e37a473c8d111945f0655998.jpg
在以下路径可以找到刚刚产生的文件
396a2da65bc648ed9912c4c1966dc61c.jpg
2:第二种方法
右击需要制作BOOT.BIN文件的SDK APP工程
048747d18f2a4e40aa1ee9841311a8c7.jpg
一般会自动添加3个文件,顺序必须是fsbl.elf system_wrapper.bit hello_world.elf,之后单击Create Image
5f4ca07be0e5436c9b324c9face81722.jpg
可以看到创建的BOOT.BIN文件
7cf3d7d0349b4bef9ec80bdc184bb6da.jpg
第二种方法创建的BOOT.BIN文件路径
c2875d2933e042d9ac19a065a6254904.jpg
5.2QSPI 的启动
1:直接 JTAG 模式的核心板烧录方法
MLK_H3_CZ08-7100-MZ7100FC 系列支持此模式, 因此下载很便捷,首先把模式开关全部设置到 ON ON
77e546428764485ab94c9da8c45b9483.jpg
7ba97b6dad2043c2821c8cceb9db231c.jpg
784a51254b2b4128aa56f731d7c64dda.jpg
5d6122f15f22416c8514a84089063eb1.jpg
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 卡。
89a1346614f1448585a4c4365bb410cb.jpg
当然该方法也支持新版本的 7035 核心板(新版本的有 JTAG 模式,后面介绍下载更方便)
本教程提供 VITIS 2021.1 QSPI-FLASH  下载方法如下:
Step1:  新建环境变量
image.jpg

变量名:XIL_CSE_ZYNQ_UBOOT_QSPI_FREQ_HZ
变量值:10000000
e4f323f048464981938e0713e723f283.jpg
e046a6478ab14d14ab4f331d937c09f9.jpg
2-2:替换 zynq_qspi_x4_single.bin 文件
由于 2021.1 flash 固化存在 bug,所以直接替换 bin 文件,zynq_qspi_x4_single.bin 文件在配套工程的 uisrc/05_boot 路径下
39662e22cb9644f988d6e9b5fd056cba.jpg

2-3:新建一个 zynq_fsbl platform 工程
读者需要注意,如果不修改引导用的 fsbl,下载 uboot.bin   FLASH 会失败,以下就是下载 FLASH的具 体办法,以下步骤为修改引导用的 fsbl文件,用以强制支持 JTAG 模式。
新建一个用于引导的 fsbl 文件
7e3bb3defcef4634829ae6e90c56e2d0.jpg

1e40663343b54a1f84af7b1a154bdcc2.jpg

2-4:修改支持强制 JTAG 模式
打开 zynq_fsbl  的 main.c  文件,在此处增加“BootModeRegister = JTAG_MODE;   ”保存并编译。
d0a4e9529d764d56b3de944d2ba10597.jpg
2-5:下载到 FLASH
老版本的核心板模式开关全部设置到 OFF OFF,也就是 TF 卡模式,所以确保没有插入 TF 卡。该方法也支持新 的核心板下载。
2f4a67f149804880b7d69d04883faaad.jpg
右击 zynq_fsbl 编译


23e63cea6ad44d0fb4840bb156f46db5.jpg
a80858f058464fa8b7a200b9a67c261f.jpg
aa35a162c2844c5eac13601a4b45010c.jpg
8be3c2061d2c4b26b73a25982c06d881.jpg
5.3 QSPI 启动
断电设置模式开关为QSPI启动1-ON 2-OFF (不能通电状态下设置模式开关)
为了观察实现结果,需要打开串口
bcdcf7fb7a044c5d9d040da34eca204c.jpg
d43968577ef945dda2434d702f63006f.jpg
如果不清楚串口号的,可以查看下设备管理器,如果发现没装串口驱动的安装上驱动
091fdb1ad7b849f6b1158aa35c040343.jpg
91a940d5a974482791abd86d9a564364.jpg



02655490fa6241969407e34f7eccc421.jpg
02655490fa6241969407e34f7eccc421.jpg
02655490fa6241969407e34f7eccc421.jpg
02655490fa6241969407e34f7eccc421.jpg
02655490fa6241969407e34f7eccc421.jpg
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则