0、ZYNQ外部启动条件

1、 电源要求:

在阶段0 BootROM时,安全模式下PS与PL都是必须上电的;非安全模式PS需要上电,如图:



在阶段1 FSBL时,PS与PL都是必须上电的,因为PL将在这个阶段进行配置,而PS将负责配置的过程。

2、 时钟要求:必须满足时钟 。

3、 复位要求:主要有两个外部复位源将影响BootROM的执行。(电源复位信号,系统复位信号)

4、 启动引脚设置:需要配置好引脚才能正确启动平台。

1、Stage 0 :BootROM

1、 上电复位以后,PS端即开始进行配置。在不使用JTAG的情况下,ARM将在片上的BootROM中开始执行代码。

2、BootROM中的代码对NAND、NOR、Quad-SPI、SD与PCAP的基本外设控制器进行初始化,使得ARM核可以访问、使用这些外设。

3、加载阶段1的启动镜像(Bin文件:包含fsbl应用程序,bit文件、应用程序)到OCM。

4、需要注意的是PL的配置并不在BootROM中完成,BootROM只为配置PL做好准备。

DDR等其他外设将在阶段1或者之后进行初始化。

PS的启动源是由外部模式引脚的高低电平来选择的,也就是指BootROM将根据外部配置引脚的设置来从不同的外部存储中加载阶段1的启动镜像。


在non-POR或者POR以后,Zynq会完成:

1锁存配置引脚,如下图所示,

2初始化PLL(根据复位时锁存的进行选择初始化或者不初始化)

3初始化APU(由两个ARM CPU构成)

4ROM CRC check

5初始化boot用的引脚(Q-spi,NOR,SD,NAND等等),根据上一步锁存的配置引脚进行选择。

6出发并等待PL完成初始化,前提是PL部分上电已经完成的话。如果此时PL上电没有完成,这这一步直接跳过

7开始搜索BootROM Header,如果搜索到了一个合法的header,就会基于这个header加载FSBL(加密或不加密)

8被加载的FSBL可能是XIP(execute in place,在存储器里直接运行)或者是被加载到了DDR中,加载完毕后BootROM完成任务,将控制权交给了FSBL。


2、Stage 1 :FSBL

1、 FSBL是在BootROM之后启动的引导程序。由BootROM加载到OCM或者直接在线性Flash上运行。FSBL主要完成以下工作:

1) 根据XPS(或vivado)中的配置,完成PS端的初始化。(MIO 、Clock 、DDR)

2) 使用比特流文件对PL进行配置 。

3) 加载第二阶段引导程序(SSBL)或者裸跑程序(无操作系统时)到DDR。

4) 跳转到DDR执行SSBL或者裸跑程序。

注意:FSBL在跳转到SSBL或者裸跑程序前,并不使能MMU。这是因为许多操作系统,例如linux假设MMU在启动时是禁用的。FSBL启动流程:

另外需要注意的是:(fsbl.elf、PL的比特流文件、SSBL或裸跑的应用程序) 等都必须组织成Bin镜像。FSBL将会遍历分区头表来寻找比特流文件、SSBL或裸跑程序所在的位置,然后进行加载DDR或配置。

3、Stage 1 :SSBL(无操作系统时,则不需要)

1、SSBL的引导程序称为BootLoader。Zynq平台中的嵌入式linux就是U-Boot,FSBL帮助我们引导U-Boot到内存中。

2、U-Boot拥有非常强大的功能,提供了许多用户指令、读写内存、flash、USB设备。U-Boot会帮助我们完成linux内核启动之前所必须的硬件初始化,例如串口、DDR控制器等。

4、Linux启动过程:

嵌入式linux从软件层面考虑可以分为以下四个部分:

引导程序(BootLoader)、

linux内核、

文件系统、

应用程序。

U-Boot将为linux内核初始化内存和必要的外设,设置好启动参数。在zynq平台中,采用设备树来传递驱动部分的参数,所以U-Boot还将为内核拷贝设备树镜像文件到内存中。由U-Boot传递给内核的启动参数中通常包含了设备树的地址,文件系统的类型、地址等信息。而后U-Boot将把系统控制权交给linux内核。

当linux内核拥有系统的控制权后,将先进行初始化,建议起内核的运行环境。Linux内核在完成了虚拟地址到物理地址映射后,还有就是驱动设备初始化与挂载。在zynq平台中,采用设备树的方式传递设备驱动的信息,如果有为PL中的IP核编写了驱动程序,也可以使用模块化的方式,待linux启动后再进行挂载。

Linux内核将根据U-Boot传递过来的参数信息选择挂载文件系统的格式与挂载点。最后linux内核将运行init函数,这是内核引导的终点,也是系统所有进程的起点。应用程序都是放在文件系统中。


原文链接:https://www.sohu.com/a/343257597_467791


-------------------------------------分割线------------------------------------------------------------------------------------------

FSBL时间测试:

软重启开始:

到Status = ps7_init()结束; ----------------约107ms

到 DDRInitCheck 结束 ------约1ms

到PcapCtrlRegVal = XDcfg_GetControlRegister(DcfgInstPtr); ----------约0ms

到HandoffAddress = LoadBootImage(); 结束----------约676ms

FsblHandoff(HandoffAddress); 进入该函数内部后运行到 FsblHandoffExit(FsblStartAddr); 直接退出fsbl主程序 -----约2ms

上面步骤结束到进入应用程序------约721ms (应该是FSBL加载应用程序到OCM的时间)

∴软重启到应用程序开始:耗时1.507s 。

fsbl.h :

#define EFUSE_STATUS_REG			(0xF800D010)  /**< Efuse Status Register */
#define EFUSE_STATUS_RSA_ENABLE_MASK (0x400) /**< Status of RSA enable */

eFuse Write Protection (2-bits) = Bit[8:9]

OCM ROM 128KB CRC Enable = Bit[10]

RSA Authenticaiton Enable = Bit[11]

DFT JTAG Disable = Bit[12]

DFT Mode Disable = Bit[13]

Bit value : 0 = unprogrammed; 1 = programmed

ZYNQ 启动问题 :FSBL的更多相关文章

  1. Zynq启动流程

    前言 Zynq启动流程和ARM处理器类似,PS部分是启动和配置过程的主设备,芯片引导必须由处理器驱动,系统上电复位后会读取设备模式引脚来决定从什么设备启动芯片.如下表Boot Devices条目所示, ...

  2. Zynq系列FPGA如何固化bit文件到QSPI_Flash

    最近由于项目需要,要将bit文件固化到zedboard的flash中,使程序上电自启,断电不丢失. 我们知道,一般板级调试的时候都是直接下载bit流到FPGA就行,固化到Flash的话,也是先生成.m ...

  3. 嵌入式开发之zynqMp ---Zynq UltraScale+ MPSoC 图像编码板zcu102

    1.1 xilinx zynqMp 架构 1.1.1 16nm 级别工艺 Zynq UltraScale+  MPSoC架构 Xilinx新一代Zynq针对控制.图像和网络应用推出了差异化的产品系,这 ...

  4. ZYNQ学习之路1. Linux最小系统构建

    https://blog.csdn.net/u010580016/article/details/80430138?utm_source=blogxgwz1 开发环境:window10, vivado ...

  5. zynq基础-->linux下软件应用

    操作系统:Ubuntu 16.04 LTS 应用软件:Vivado 2016.2  + petalinux 2016.2 参考官方应用手册:ug1144-petalinux-tools-referen ...

  6. 第十章 MIZ702 ZYNQ制作UBOOT固化程序

    10.0难度系数★☆☆☆☆☆☆ 10.1是什么是固化 我们前几章将的程序都是通过JTAG先下载bit流文件,再下载elf文件,之后点击Run As来运行的程序.JTAG的方法是通过TCL脚本来初始化P ...

  7. 第四章 MIZ701 ZYNQ制作UBOOT固化程序

      4.0难度系数★☆☆☆☆☆☆ 4.1是什么是固化 我们前几章将的程序都是通过JTAG先下载bit流文件,再下载elf文件,之后点击Run As来运行的程序.JTAG的方法是通过TCL脚本来初始化P ...

  8. S02_CH05_UBOOT实验Enter a post title

    S02_CH05_UBOOT实验 5.1什么是固化 我们前几章的程序都是通过JTAG先下载bit流文件,再下载elf文件,之后点击Run As来运行的程序.JTAG的方法是通过TCL脚本来初始化PS, ...

  9. 基于ZYNQ的双核启动与通信问题解决

    1    处理器间的通信 为AMP 设计创建应用之前,您需要考虑应用如何进行通信(如有需要).最简单的方法是使用片上存储器.Zynq SoC 配备256KB 的片上SRAM,可从以下四个源地址进行访问 ...

随机推荐

  1. 列出ubuntu软件管理工具apt的一些用法(自由总结)

    安装软件包 [root@CentOS7 ~]#apt install tree 删除软件包 [root@CentOS7 ~]# apt remove tree 列出仓库软件包 [root@CentOS ...

  2. c++编译加执行脚本

    python 脚本 1 #! /usr/bin/python 2 3 import os 4 5 msg = os.popen("g++ test.cpp").read(); 6 ...

  3. java中的运算符介绍

    运算符&和&&的区别&运算符有两种用法:(1)按位与:(2)逻辑与. &&运算符是短路与运算.逻辑与跟短路与的差别是非常巨大的,虽然二者都要求运算符左右 ...

  4. 实践GoF的23种设计模式:SOLID原则(上)

    摘要:本文以我们日常开发中经常碰到的一些技术/问题/场景作为切入点,示范如何运用设计模式来完成相关的实现. 本文分享自华为云社区<实践GoF的23种设计模式:SOLID原则(上)>,作者: ...

  5. 使用fireworks解决图片隐写的问题

    同样也可以用ps来解决图层间隐写的问题

  6. excel制作折线图太麻烦?试试这些折线图在线生成工具

    折线图是以折线的上升或下降来表示统计数量的增减变化的统计图,叫作折线统计图.用折线的起伏表示数据的增减变化情况,不仅可以表示数量的多少,而且可以反映数据的增减变化情况.并且折线图也是目前最方便的一种统 ...

  7. 从菜鸟到高手, HMS Core图像分割服务教你如何在复杂背景里精细抠图

    2021年以来,自动驾驶赛道进入爆发期,该行业成为大厂以及初创企业的必争之地.其中众多公司都采用了计算机视觉作为自动驾驶的技术底座,通过图像分割技术,汽车才能够有效理解道路场景,分清楚哪里是路,哪里是 ...

  8. 【C# 线程】IntPtr 类

    IntPtr类由来 .NET提供了一个结构体System.IntPtr专门用来代表句柄或指针.句柄是对象的标识符,当调用这些API创建对象时,它们并不直接返回指向对象的指针,而是会返回一个32位或64 ...

  9. 抛弃模板,一种Prompt Learning用于命名实体识别任务的新范式

    原创作者 | 王翔 论文名称: Template-free Prompt Tuning for Few-shot NER 文献链接: https://arxiv.org/abs/2109.13532 ...

  10. java 执行shell命令遇到的坑

    正常来说java调用shell命令就是用 String[] cmdAry = new String[]{"/bin/bash","-c",cmd} Runtim ...