Xilinx ZYNQ 7000学习笔记四(MultiBoot多重启动)

概述

在前面《Xilinx ZYNQ 7000学习笔记一(复位和启动)》一节中,简单介绍了BootRom的运行流程和什么是persistent registers (持续寄存器),在本节将对ZYNQ7000 MultiBoot多重启动实现进行讲解。
MultiBoot多重启动实现是基于ZYNQ的MULTIBOOT_ADDR寄存器,可用用来实现加载冗余的底层镜像文件。

1.BootRom和FSBL的启动过程:

BootRom的启动流程如下图所示,上电POR复位后是读取MULTIBOOT_ADDR寄存器值并依据该值加上存储介质如flash基地址加载至OCM中,由于上电POR复位后MULTIBOOT_ADDR初值为0,所以第一次执行实际是从 flash基地址开始获取有效BootRom头,当然比如我们存储的底层镜像没有在flash首地址存放(即BootRom未读取到有效的BootRom头),则MULTIBOOT_ADDR地址会+1,实际偏移+32K来读取flash下一个偏移是否有有效BootRom头,直到获取到有效的BootRom头为止加载对应的FSBL到OCM,并启动FSBL完成BootRom过程。
如何执行多重加载镜像文件呢,就是在镜像文件的FSBL或用户应用部分(如监控软件),先将冗余的镜像文件通过比如如监控软件烧写到备份flash区域,然后监控软件更改MULTIBOOT_ADDR寄存器偏移为备份flash偏移,并执行软件复位。由于软件复位不会更改MULTIBOOT_ADDR这种persistent registers (持续寄存器)的值,故BootRom再启动会加载备份镜像的FSBL。
我们查看FSBL的加载逻辑会发现,其和BootRom加载逻辑是完全一致的,也就是FSBL启动后也会依据MULTIBOOT_ADDR的值去加载bit流和应用程序到DDR中,这样一来就实现了加载冗余的FPGA和监控软件,实现了flash存储双冗余镜像(当然可能一份旧的,一份新的)。
Xilinx ZYNQ 7000学习笔记四(MultiBoot多重启动)_第1张图片注意:
1)多重启动也就是多个镜像文件,在非POR复位条件下(包括上电复位) BootRom加载的FSBL还有FSBL加载的监控软件都是以MULTIBOOT_ADDR为偏移的镜像中的FSBL和监控。但是重新上电后,由于默认MULTIBOOT_ADDR变为0,加载的是flash基地址的FSBL(可在FSBL修改MULTIBOOT_ADDR加载不同地址的监控)。
2)冗余策略假设镜像文件1的头部损坏,那么重新上电BootRom也会以32k为单位找下一个有效的FSBL

2.小结

MULTIBOOT_ADDR寄存器:
Xilinx ZYNQ 7000学习笔记四(MultiBoot多重启动)_第2张图片

实现多重启动的步骤
1)更改MULTIBOOT_ADDR寄存器
2)软件复位
注意:上述操作寄存器需要先解锁后才能写操作。

你可能感兴趣的:(ZYNQ7000系列学习笔记,学习,笔记,fpga开发)