zynq中的BootROM
其他
2021-04-03 20:32:09
阅读次数: 0
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