Xilinx-ZYNQ7000系列-学习笔记(4):系统复位与启动
一、复位
ZYNQ-7000 SoC系统中的复位可以由硬件、看门狗定时器、JTAG控制器或软件产生,可用于驱动系统中每个模块的复位信号。其中,硬件复位由上电复位信号PS_POR_B和系统复位信号PS_SRST_B驱动。在PS中,有3个看门狗定时器可用来产生复位信号;JTAG控制器产生的复位信号可产生系统级复位信号,或者只用于复位PS的调试部分;软件复位信号可用于单独子模块的复位,或者产生系统级的复位信号。
复位系统是器件安全系统的一比分,它执行三段式的复位序列:上电——清除内存——系统使能。
完整的复位流程图如下图所示。前两步被外部系统所控制,知道POR有效时,PS的逻辑才开始运行,此时就可以产生任何类型的复位信号了;POR信号可以被异步地开启或者停止。
在BootROM开始执行之前,硬件会向所有内部RAM的地址写0以清除它们的数据。
ZYNQ7000中的复位信号以及它们所产生的效果如下图所以,详细内容请参考相关数据手册。
二、启动与配置
2.1 PS的启动过程
ZYNQ7000的启动模式分为两种:使用静态存储器(NAND、并行NOR、串行NOR(QSPI)和SD卡)的安全启动模式,需要禁用JTAG;使用JTAG或静态存储器的非安全模式。其中JTAG模式主要在功能开发和调试阶段使用。
PS的启动分为两个必选阶段和一个可选阶段。
(1)阶段0:BootROM。从内部的BootROM中读取存储的启动代码,用于配置ARM处理器和必需的外设,然后从启动设备读取第一阶段Bootloader(FSBL)代码。BootROM并不会配置和初始化PL,也不会使能DDR和SCU。
(2)阶段1:FSBL。FSBL启动代码包含了PS外设的初始化信息,它通常存储在Flash中,也可通过JTAG下载到芯片中。BootROM代码把FSBL代码复制到OCM中,其中从FSBL加载到OCM中的代码在192KB以内。在FSBL开始执行之后,其全部的256KB代码才全部可用。在QSPI较小的情况下,可以只把FSBL保存到QSP中,而把其他启动分区存放在更大空间的Flash然后使用eMMC模式进行启动。
- FSBL可以在SDK中配置生成。
- 由于PS可以独立于PL而独立运行,如果提供了比特流文件,则FSBL可完成PL的配置。
- 如果存在阶段2的启动代码,则FSBL执行完毕之后会加载它。
- 如果不存在操作系统,则FSBL执行完毕之后会把相应裸机环境中的代码加载到DDR内存中。
(3)阶段2:可选阶段。用户可以自定义一些启动代码,例如U-BOOT等。
BootROM启动流程:
FSBL启动:
2.2 PL的启动过程
PL的启动过程如下:
(1)启动:给PL上电。
(2)初始化:通过PS或者INIT/PROG引脚。
(3)配置:通过PS AXI-PCAP、JTAG或者PL ICAP。
(4)使能PS到PL的接口:通过PS。
PL启动过程与PS启动的对应关系如下图。
三、总结
大多数的ARM都是这个启动过程。
- 阶段0:即传统的 BootROM 过程, zynq 芯片里有个 rom 里面固化了一段不可修改的程序, 只有 zynq 一上电, 这段程序就会执行, 它将初始化CPU和 NAND、 NOR、 SD卡等基本外设。初始化好,BootROM读取存储器中的程序代码,并将FSBL拷贝到OCM(On-chip memory)里 , 这个被拷贝到片上 RAM 执行的程序就来自于我们要制作的文件——BOOT.bin。
- 阶段1:第一阶段引导程序(First Stage Boot Loader,FSBL)启动,BOOT.bin开始执行:首先继续配置PS,PS初始化好后,再配置PL,最后还可以加载阶段2的代码。
- 阶段2:开始执行PS端代码,也可以是第二阶段引导程序(Second Stage Boot Loader,SSBL)。完全在用户的控制之下,是可选的。
具体在SDK中设置启动方式的方法请参考
如果BOOT.bin文件烧写到板卡中不能起到固话作用,那么将.bin文件转换为.mcs文件,具体做法请参考
希望能与大家在学习中,共同进步。