zynq中的BootROM

1. BootROM简介

  • BootROM是固化在zynq芯片内部非易失性存储器中(zynq有256K的SRAM及128K的ROM)的一段代码,掉电不丢失。用于启动、引导FSBL代码。找到BOOT.BIN所在位置并从中提取FSBL,将FSBL代码拷贝到zynq中的256K-SRAM中运行(此时DDR还没有被初始化,这是FSBL的工作)。
  • BootROM这段代码通常保存在Nor flash中,特点是芯片内执行(XIP ,eXecute In Place),这样应用程序可以直接在Flash闪存内运行,不必再把代码读到系统RAM中。
  • 要完成上述功能,BootROM必须满足如下要求:
    • 包括SD卡或者QSPI等存储设备的驱动程序
    • 支持文件系统操作(至少支持FAT32,因为将SD卡格式化为FAT32后拷贝进BOOT.BIN的)
  • 对于基于zynq的嵌入式Linux系统,BootROM引导启动FSBL,FSBL引导启动U-Boot,U-boot引导启动Linux内核。

2.SD卡启动

  • 对SD卡的要求:
    • 标准的SD卡设备
    • 支持FAT32文件系统
    • SD卡不大于32GB
  • SD卡启动流程
    • 1、对MIO引脚进行初始化,主要是物理特性进行配置,如功能、I/O、使能/三态/上下拉。如下图中MIO40-MIO45所示。硬件设计时必须将SD卡连接至zynq的MIO40-MIO45这几个PIN
      在这里插入图片描述
    • 2、初始化SD卡,驱动SD卡对其进行读写
    • 3、读写测试
    • 4、从SD卡文件系统中读取Boot.BIN文件,对BootROM(包括FSBL加载地址、大小、位置偏移)进行解析(XilinxUG585的说法,但是似乎叫Boot.bin头更合适,后面的QSPI部分也是一样)
    • 5、BootROM从BOOT.BIN中拷贝FSBL代码到SRAM中,并跳转到FSBL代码的运行地址启动FSBL。这样BootROM就完成任务了,接下来由FSBL接管。

3.QSPI启动

  • 对QSPI的要求
    在这里插入图片描述
  • QSPI启动流程
    • 1、初始化与QSPI相关的MIO引脚,见下表:
      在这里插入图片描述
    • 2、初始QSPI Flash外设,实现读写
    • 3、读写测试
    • 4、从QSPI中读取BOOT.BIN,对BootROM头进行解析。(BootROM代码按照一定的文件格式去从QSPI的0x0000去找BOOT.BIN文件,若没有就从0x8000,还没有就从0x10000,…,但是搜索范围不能超过前16MB的空间)
    • 5、解析得到FSBL代码的大小、位置偏移及FSBL的加载地址后,从QSPI中拷贝FSBL代码到SRAM,启动之

猜你喜欢

转载自blog.csdn.net/qq_43445577/article/details/113846028