ZYNQ的启动模式

1.铺垫

  • 在 ZYNQ 中, PS 作为主器件, PL 可以看作是 PS 的一个外设,因此需要由 PS 来配置 PL。这个配置顺序的优势是它允许对 PS 单独上电的时候, 此时 PL 不上电,以减小功耗。 不过也有例外, 就是我们在使用JTAG 下载程序的时候, 此时是使用电脑作为主机来配置 PL。
  • ZYNQ无法只固化PL部分的程序,必须借助PS部分,加入FSBL代码。由ZYNQ的架构可知,flash是连接到PS的。因此PS需要首先对外设flash初始化,之后读取其中内容再对PL进行配置。
  • ZYNQ的软硬复位:
    • ZYNQ上电后首先将系统硬复位(PS_POR_B,断电重启或者手动按键触发都可以硬复位),之后去采样一组boot引脚的电平状态来决定是否使能PS clk PLLs。之后PS开始执行BootROM(ZYNQ片上的ROM)中的一小段代码(用户无法修改)来启动系统。PS_POR_B可以完全地复位ZYNQ。
    • 与之相对的还有软复位(non_POR),软复位也可以使BootROM重新执行,但是一些寄存器值可以保留。软复位是由PS_SRST_B引脚或一些内部其他资源引起的。
  • 复位后,APU首先执行BootROM中的代码,由CPU0执行,CPU1等待。BootROM中代码主要功能是配置系统,将Boot镜像中(存储在Flash、SD卡)FSBL(First-Stage Boot Loader,SDK给出模板、用户可编辑)/用户代码拷贝到OCM(on chip memory,容量小因此要求FSBL也要小)中执行。在非安全模式下,FSBL/用户代码可以直接在QSPI或nor flash中运行。
  • 启动镜像=BootROM头文件(软件自动产生,BootRom用)+FSBL/用户代码ELF文件(BootRom用)+PL的bit流(可选)+系统/应用程序ELF文件(可选)。BootROM引导FSBL运行,FSBL配合bit流、加载应用程序。可用于存储启动镜像的存储器包括QSPI、NAND、NOR、SD卡。
  • BootROM的执行顺序由BOOT引脚组设置、BootROM头文件(【一系列指定BootROM执行顺序的参数,如头包括选择安全模式的参数,还包括用于描述拷贝到OCM中执行的FSBL/用户代码的长度参数(max=192KB),该参数也可为0代表就地执行】、BootROM代码决定。BootROM可以在安全模式下执行加密的FSBL/用户代码,也可在非安全模式下执行(不加密)。
  • 系统也可在JTAG模式下启动(即平时调试时的形式),在非安全模式下由flash启动后也可使能JTAG。JTAG总是运行在非安全模式下的,但是在JTAG模式中,我们可以方便地调试软件【by ARM debug access port (DAP) 】和PL硬件【by test access port (TAP) 】。

2. ZYNQ的启动模式

  • 1、PS的主启动模式下,系统从flash器件中启动。BootROM通过Boot器件配置PS,读BootROM头文件并校验,最后将FSBL/用户代码拷贝到OCM。主启动模式可以在安全/非安全模式下工作。
    • 在安全模式下,启动镜像总是由CPU写入OCM内存。 从那里,它被送 (使用DMA)进、送出AES(Advanced Encryption Standard)/HMAC(密钥相关的哈希运算消息认证码)单元进行解密和身份验证。 解密的引导映像被写入OCM内存,并在引导完成后执行。 也就是每个ZYNQ都有一条解密算法专门这对自己的FLASH进行解密,flash中的代码就只能被本zynq使用。
      在这里插入图片描述

    • 在非安全模式下,引导头可以指示PS直接执行引导映像,在支持就地执行的QSPI或NOR引导设备中直接执行。 在其他情况下,fsbl/user代码被复制到OCM内存中执行。 如果闪存设备中的引导头无效,引导代码将持续搜索,直到找到有效的头文件或搜索了整个范围。 支持对QSPI、NAND和NOR引导模式进行引导头搜索。 用于SD卡引导 模式,只读取一个头。

  • 2、JTAG从启动模式
    • BootROM代码执行最小化系统配置并使能JATG。系统进入空闲状态等待DAP控制器去复位CPU0。级联JTAG启动模式会轮回DAP和TAP控制器,这也是最常见的模式。在非安全的主引导模式下,当PL上电,启用JTAG接口进行调试 启动。 JTAG接口可用于访问TAP和DAP控制器。

3. 启动流程图

  • POR硬复位后,硬件采样boot设置引脚组,选择性使能PS clk PLLs。这些硬件行为在软复位后不会发生。首先执行的是BootROM中的代码,然后是FSBL/用户代码和系统代码。如下图:
    在这里插入图片描述
    • 上图中的Mode_Pins即为本文中提及的boot设置引脚组。其实是几个MIO引脚,在刚刚启动或者复位时通过拨码开关设置高低电平,进而被用于启动模式选择。启动之后可用于ARM内核的GPIO。
    • STAGE0中,BootROM执行就是将一些基本的外设进行初始化,比如我们从Flash读取后续代码那就需要将flash进行初始化。除此之外BootROM也会从flash等非易失性存储器中把FSBL读出到OCM中运行。
    • STAGE1中,FSBL(用户也可修改,由SDK帮忙产生的模板)/用户代码执行的就是对更多外设的初始化,比如DDR等。初始化完毕后会从启动镜像中读取bit流来配置PL,加载裸机应用程序到DDR中去运行。
    • STAGE2为裸机运行阶段。
    • 安全模式下的解密和认证算法是基于PL部分实现的,因此BootROM 执行时必须等待PL上电完成。
    • FSBL/用户或者应用程序代码可以清除、编程、使能PL部分的逻辑。

4.Boot模式引脚设置

  • MIO[8:2]这7个引脚可以对进行boot设置。通过接20k的电阻进行上下拉来表示逻辑1/0。这些引脚只有在上电配置时表示boot设定,在配置完成后还可以用于其他用途。
    在这里插入图片描述
    • MIO[2]表示JTAG的连接方式是独立还是级联。
    • MIO[5:3]表示启动器件类型,通常通过拨码开关设置。
    • MIO[6]配置PLL是否使能。
    • MIO[8:7]配置bank电压。
Zynq是一款由Xilinx生产的高性能可编程SoC芯片,在其内部集成了ARM处理器和可编程逻辑单元。而eMMC(嵌入式多媒体卡)是一种常见的闪存存储解决方案,用于存储操作系统、应用程序以及数据。 Zynq可以通过eMMC启动,具体的步骤如下: 1. 配置引导模式:首先,需要在Zynq芯片的引导模式寄存器中配置从eMMC启动。这可以通过编程控制引脚或者采用硬件开关实现。 2. 烧录引导加载器:接下来,将引导加载器(bootloader)烧录到eMMC存储器中。引导加载器是一个小型的程序,负责初始化系统,并加载操作系统。 3. 配置引导加载器:在eMMC存储器中的引导加载器中,需要配置引导方式为从eMMC启动。这通常需要修改引导加载器的配置文件,以确保从eMMC正确加载操作系统。 4. 烧录操作系统:接下来,将操作系统映像文件烧录到eMMC存储器中。操作系统可以是Linux、Android等。 5. 引导启动:将Zynq芯片连接到适当的启动设备(如电源),按下重启按键或提供复位脉冲,Zynq芯片将引导加载器从eMMC存储器中加载到内存中,并执行它们。 6. 操作系统启动:一旦引导加载器被加载到内存中并执行,它们将负责初始化系统环境并加载操作系统。最终,操作系统将被成功加载和启动。 总的来说,Zynq通过设置引导模式、烧录引导加载器和操作系统,并进行正确的引导配置,可以从eMMC存储器中成功启动。这种启动方式使得Zynq能够快速、高效地运行各种应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Arist9612

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值