ZYNQ启动流程分析之BootROM

参考资料UG585第六章

1 FSBL由谁启动

  在静态文件中,BOOT.BIN启动文件存放在SD卡或者QSPI等存储介质中,然后BOOT.BIN文件中已经包含了FSBL代码,也就是说FSBL代码已经集成到了BOOT.BIN文件中。如果要启动FSBL代码,就需要完成下面几件事情,
(1)找到BOOT.BIN的位置
(2)从BOOT.BIN文件中找到FSBL代码,
(3)找到之后将其拷贝到内存当中(SRAM,片内RAM)。
(4)之后再去运行FSBL代码
  这些工作都是BootROM来完成的
  BootROM它是一个程序/代码,并且已经固化到ZYNQ芯片内部。专门存放在片内ROM中。ZYNQ内部包含256K RAM(SRAM)以及128K ROM(SROM),所以BootROM代码固化在SROM中,片内的程序一般都固化在NOR FLASH(支持XIP)。且可以直接在NOR FLASH运行。
  BootROM支持哪些功能?包含了SD卡或者QSPI等存储设置的驱动程序。BootROM支持文件系统操作,至少支持FAT 32这个文件系统。
  小结:对于ZYNQ平台、对于嵌入式Linux系统,Linux内核由U-Boot引导、启动,U-Boot由FSBL引导启动、FSBL由ZYNQ片内BootROM引导启动。

2 SD卡启动方式

  对SD卡的要求:
    (1)标准的SD或者SDHC设备
    (2)包含FAT 16/32文件系统
    (3)SD卡的容量可以高达32GB
  SD卡方式启动流程
    在SD卡启动方式下,BootROM代码的运行流程:
    (1)初始化MIO引脚
    主要就是配置MIO引脚的物理特性配置寄存器
    重点就是将MIO40~MIO45复用为SD0外设所对应的CLK/CMD/DATA引脚
    如果自己设计硬件,想要通过SD卡方式启动开发板,那么就必须将SD卡连接到ZYNQ的MIO40~MIO45引脚。
    (2)初始化SD卡外设,驱动SD卡。可以实现SD卡的读写
    (3)对SD卡的读写进行测试
    (4)从SD卡文件系统中读取BOOT.BIN文件,并对BOOT.BIN文件头部进行解析(BootROM)。
    这个头部信息是按照一定的格式组合在一起的,包括了fsbl的加载地址、fsbl的大小以及fsbl在BOOT.BIN文件中的偏移量。BootROM代码能够解析这个头部信息。
    (5)得到fsbl代码的大小以及位置偏移量以及加载地址之后,BootROM代码就会从BOOT.BIN文件中,将fsbl代码拷贝到SRAM中,并且跳转到fsbl代码的运行地址去启动fsbl。这样BootROM就成功启动FSBL代码了。

3 QSPI启动流程

  对QSPI的要求
    (1)x1,x2,and x4 single device configuration
    (2)Dual SS,8-bit parallel I/O device configuration
    (3)Dual SS,4-bit stacked I/O configuration
    (4)Execute-in-place option
  QSPI启动方式如下:
    在QSPI启动方式下,BootROM代码的运行流程
    (1)初始化MIO引脚
    将先关的MIO引脚复用为QSPI外设所需的引脚功能
    重点就是MIO1~MIO8进行复用。
    (2)初始化QSPI外设,驱动QSPI FLASH,实现QSPI读写
    (3)从QSPI存储介质中读取BOOT.BIN文件,并对BOOT.BIN文件进行解析。
    (4)得到FSBL代码的大小和偏移量以及fsbl的加载地址这些信息之后,再去从QSPI中拷贝fsbl代码到SRAM中,然后启动fsbl。
  在头部搜索中,QSPI中没有文件系统,那么BootROM是如何找到BOOT.BIN的呢?
    BootROM代码首先会从QSPI的第0扇区去找BOOT.BIN文件,如果找不到就跳到下一个地址0x8000,如果还找不到,就接着跳转到下一个地址0x10000,以此类推。但是搜索的范围不能超出QSPI的前面16M。

  • 19
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Zynq-7020是Xilinx推出的一款SoC(系统级芯片),其中集成了ARM Cortex-A9处理器和可编程逻辑(FPGA)。以下是Zynq-7020的启动流程概述: 1. 上电复位:当Zynq-7020芯片上电或复位时,所有寄存器和设备都会被初始化为默认状态。 2. Boot ROM(引导加载程序):Zynq-7020芯片内部有一个固化的引导加载程序,称为Boot ROM。它位于固定的内存地址上,并负责初始化系统、配置外设和加载引导加载程序。 3. FSBL(First Stage Boot Loader):引导加载程序从Boot ROM加载FSBL。FSBL是第一阶段的引导加载程序,负责初始化处理器、DDR内存控制器和外设,从而为后续的启动提供必要的环境。FSBL还负责加载下一阶段的引导加载程序。 4. Second Stage Boot Loader:第二阶段的引导加载程序(如U-Boot)被FSBL加载到DDR内存中,并执行。第二阶段引导加载程序可以执行更复杂的初始化、配置和加载任务,如加载Linux内核和文件系统。 5. Linux内核启动:第二阶段引导加载程序加载Linux内核镜像到内存中,并启动Linux操作系统。Linux内核将初始化硬件、加载驱动程序、建立进程和启动用户空间。 6. 用户空间:一旦Linux内核启动,控制权将转移到用户空间,用户可以执行应用程序和进行系统操作。 需要注意的是,Zynq-7020的启动流程可以根据具体的应用需求和系统配置进行定制和修改。开发人员可以通过配置FSBL和第二阶段引导加载程序来控制引导过程中的初始化、加载和配置操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值