ZYNQ复位包含两种复位:
硬复位:断电重启 或 按下按键。会让硬件读取boot引脚状态然后去配置一些参数
软复位: PS_SRST_B引脚的复位 不会去读取boot引脚,一些寄存器在软复位之后仍然可以保留之前的状态,比如安全模式等等。
BOOTROM是片上的ROM,即里面的代码不能做修改,是一个固定的代码
BOOTROM是在APU中运行的第一个软件,boot在CPU0执行,CPU1执行WFE(等待事件这样的指令)
BOOTROM具体功能:配置系统,把FSBL代码或者是用户代码从启动镜像里面(SD卡,QSPI)拷贝到OCM里,代码在OCM里进行运行。可选的是FSBL / 用户代码可以在QSPI 或NOR flash里面进行直接的运行。
FSBL:第一启动阶段的引导程序。把裸机应用程序加载到DDR里是靠FSBL进行引导的。BOOTROM相当于把FSBL的引导代码加载到OCM里进行运行。
ZYNQ上OCM( ON-CHIP MEMORY)资源有限,存储容量较小,所以需要FSBL里面的程序也比较小
PS主启动器件可以保留一个或多个启动镜像。一个启动镜像由BOOTROM文件头 和 FSBL(FIRST STAGE BOOT LOADER)[第一启动引导阶段]。
这个启动器件还保存bitstream文件去配置 PL 和 嵌入式操作系统的程序,但是这些不是通过BOOTROM来进行访问。比特流或者其他裸机应用程序是通过FSBL进行引导。(BOORROM 引导 FSBL,FSBL 引导比特流 加载应用程序 )
flash存储器可以是 QSPI,NAND FLASH,NOR FLASH 或者SD卡。 ZYNQ所要求的非易失性存储器类型
BBOTROM执行的流程是受 BOOT引脚的设置,BOOTROM的文件头,以及系统的启动的影响
对开发这来说,该系统可以在JTAG模式下进行启动(通过JTAG接口下载程序)。JTAG可以访问DAP控制器(DEBUG ACCESS PORT)[ARM的一个调试端口]。TAP控制器【xilinx测试访问接口】
通过JTAG接口可以比较方便的对ARM进行调试,以及调试ZYNQ的FPGA部分
主启动模式下,系统是从FLASH 存储器里面去启动系统。BOOTROM会去配置PS来访问启动器件(SD卡或FLASH),读BOOTROM文件头,进行校验,把FSBL / 用户代码拷贝到OCM。
安全模式:加密,非加密,基于哈希的验证码
BOOTROM头文件包含一打(很多)参数,可以知道BOOTROM的运行流程。
头文件包含一个参数:启动镜像的长度:定义了FSBL或者是用户代码加载到OCM运行的长度。该长度被限制在192KB(OCM存储容量小)。所以FSBL代码不能太大,FSBL代码是软件自动生成的模板,我们可以对其进行简单的修改
共7个模式配置引脚可以对硬件做配置选项,即MIO [8:2] 共7个引脚。在硬件复位后采集7个引脚的状态,这7个引脚的状态会影响到BOOTROM的执行。这些引脚通过接20K电阻进行上拉或下拉,通过上下拉的电阻表示逻辑1或逻辑0
MIO4 为0 MIO 为1 表示QFLASH MIO4 MIO5 为11 表示SD卡 都为0表示JTAG
这三种情况和拨码开关一一对应
这些引脚只在复位之后,在裸机程序正式执行之前所表现的含义是BOOT的一个占用的启动引脚,当裸机正式启动之后,功能就变成实际上所定义的功能,所以不冲突