MPSoC的启动流程

近期,也是学习Zynq 有一段时间了,之前接触的是Cyclone V的SOC,其引导过程属于FPGA引导HPS,程序的下载步骤也非常的繁琐;后来用了Zynq后,瞬间感觉方便了好多,下载只需一键了,哈哈!

Zynq启动是由ARM引导的FPGA的,同时也包括用户程序的加载!

为了更好理解Zynq UltraScale+ MPSoC的启动流程,我花了一星期的空余时间,查了大量的官方资料,汇总的详细的启动流程,对这方面感兴趣的可以收藏下来!

Zynq启动分为三个步骤,如下:

预配置阶段(Pre-configuration stage)

  • 上电后,PMU(Platform Management Unit 平台管理单元)重置;
  • 执行PMU ROM中的预启动代码,以执行复位操作(包括CSU(configuration security unit 配置安全单元)复位);


配置阶段(Configuration stage):

CSU复位后,初始化OC-RAM,将FBSL加载到OC-RAM(on-chip RAM),处理器开始执行FSBL代码。

FSBL(first-stage boot loader)的作用如下:

  • 初始化PS端配置,如:MIO、PLL、DDR、QSPI、SD等
  • 加载PL端程序,即:bitstream
  • 搬运用户程序到DDR,并跳转执行


后配置阶段(Post-configuration stage):

FBSL执行后,CSU ROM代码进入Post-configuration阶段,负责起系统干预响应,提供硬件支持。

PMU仍然需要运行,用于后续改变系统的电源状态(上电、睡眠、唤醒等等)


详细过程如下:

PMU(Platform Management Unit 平台管理单元)主要负责主要的预处理任务,以及管理PS端的系统资源的上电、断电。

PMU(Platform Management Unit 平台管理单元)可以提供如下操作:
  • 归零化低压域LPD(low power domain)寄存器
  • 归零化全电源域FPD(full power domain)寄存器
  • 归零化PMU的RAM
  • 归零化PMU处理器的TLB内存
  • 检查LPD、AUX、专用IO等区域电压
  • 归零化CSU、LPD、FPD的内存区


POR (Power-on reset)上电后,初始化PMU重置

然后执行PMU的ROM中的预处理代码(此代码用于保持初始化操作的顺序),进行初始化操作

  • 初始化PS Sysmon单元和启动所需要的PLL
  • 清除PMU RAM 和 CSU RAM区域
  • 验证PLL 锁
  • 利用PS Sysmon验证LPD、AUX、I/O的范围
  • 清除低压域(LPD)和全电源域(FPD)

如果上述操作无误,最后执行CSU重置,否则生成启动错误。

CSU重置后,将执行以下操作

  • 初始化OC-RAM
  • 读取boot mode 寄存器,确定启动类型
  • CSU将FBSL加载到OC-RAM后执行程序
  • CSU加载PMU用户固件(PMU FW:firmware)到PMU RAM后,以便执行
PMU FW(Platform Management Unit user firmware)与PMU RAM一块提供平台管理服务。

在启动之后,PMU仍然需要运行,用于后续改变系统的电源状态(上电、睡眠、唤醒等等);

CSU ROM代码进入Post-configuration阶段,负责起系统干预响应,提供硬件支持。

加载PL BitStream

执行完CSU ROM的代码,CSU脱离对FBSL的控制;FBSL开始通过PCAP接口,使用BitStream来配置PL

加载BitStream流程

  • 初始化PCAP接口
  • 通过PCAP写入BitStream
  • 等待PL状态位完成



额外补充一些其他关于启动引导的知识

Boot Modes

启动类型一般有:Quad-SPI、SD、NAND、eMMC、USB、PS JTAG等


黄金镜像搜索

Boot Image 搜索机制仅用在了 QSPII、NAND、SD、EMMC启动模式。

BootRom 通过去搜索有效的Boot Header去加载和运行Boot Image

BootRom 通过搜索有效的字符串XLNX,然后对Boot Header进行校验;如果校验和有效,将剩下的Boot HeaderBoot Image(包括FSBL)加载到RPU和APU。

如果有一片地址的Boot Image损坏,FSBL可以将另一处Boot Header写入CSU,来修复它。


最后再推荐一些学习Zynq UltraScale+ MPSoC会用到的内容,之前已经汇总了一些文章!


移步it之巅:PMU、PCI-E、MIO、EMIO、AXI GPIO区别

移步it之巅:一、Makefile基础介绍

移步it之巅:GCC编译工具详解

移步it之巅:【ARM LINUX】NFS配置详解


希望对大家有所帮助,同时也期待大家的关注!

补充资料:https://zhuanlan.zhihu.com/p/260163123

  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值