Xilinx ZYNQ 7000学习笔记三(FSBL代码分析-C代码)

本文档详细介绍了Xilinx ZYNQ 7000系统级芯片(SoC)的FSBL(First Stage Boot Loader)中的C代码分析。主要内容包括ps7_init()函数的初始化过程,BootRom头和分区头的结构,以及LoadBootImage()函数如何加载FPGA.bit和应用程序到DDR中。文章还提到了FsblHandoff()函数通过FsblHandoffExit()汇编代码实现向应用程序的跳转。
摘要由CSDN通过智能技术生成

参考资料:Zynq-7000 SoC Software Developers Guide (UG821)

1.承接上一篇,回到FSBL工程,在目录FSBL/src/main.c中找到main函数,可以看到第一步就是调用了ps7_init()函数。

ps7_init()函数位于ps7_init.c文件中,这个C文件是由SDK根据用户的硬件hdf配置自动生成的。这个接口就是根据查看处理器版本对MIO、PLL、Clock、DDR、和外设进行初始化。

然后解锁SLCR系统级控制寄存器(使能系统软件复位功能),刷新D-cache,关闭D-cache,注册中断处理函数。
关于注册中断函数RegisterHandlers()接口我们仔细看的话起始上一篇汇编代码中的中断向量表对应的中断处理函数在XExc_VectorTable[]有初始定义,

XExc_VectorTableEntry XExc_VectorTable[XIL_EXCEPTION_ID_LAST + 1] =
{
   
	{
   Xil_ExceptionNullHandler, NULL},
	{
   Xil_UndefinedExceptionHandler, NULL},
	{
   Xil_ExceptionNullHandler, NULL},
	{
   Xil_PrefetchAbortHandler, NULL},
	{
   Xil_DataAbortHandler, NULL},
	{
   Xil_ExceptionNullHandler, NULL},
	{
   Xil_ExceptionNullHandler, NULL},
};

C代码这里重新进行了替换,替换了原来汇编代码时使用的默认中断处理函数。

接下来就是通过对DDR区进行读写测试检验DDR状态是否正常;

初始化PACP(Processor Configuration Access Port即处理器配置接口,是PS与PL间通信的桥梁),为之后的初始化bit文件配置PL做准备。我们理解只需要是PS端AXI总线与PCAP接口转换的一个桥接短路,作用是用来解密或验证bit文件的即可。
数据手册中关于PCAP的结构框图和描述如下:
在这里插入图片描述接下来是通过读取BOOT_MODE_REG确认当前系统的启动模式,关于启动模式第一节博客里面又讲,是根据pin引脚上电采样后存入该寄存器的,忘了的再去看看。启动模式按大类分为由BootRom启动的主动模式和JTAG启动的模式,主动模式我们选用QSPI_MODE模式举例,即使用的串行nor flash作为存储设备为例:

首先,调用InitQspi()对flash进行初始化(flash可以启用);
我们查看InitQspi()代码,实际上也就是如果flash容量小于等于16M,那么flash controller对flash的访问会采用线性模式访问,如果大于16M,那么会采用IO模式访问.(关于flash操作详细内容可参见《qspi flash读写操作》的博客),不过加载只涉及读flash然后写到DDR,所以相对比较简单的,通过函数QspiAccess接口实现读写。
接下来就是加载flash中的镜像文件了,也是最关键的地方了,LoadBootImage()这个函数做两件事情①分析烧录到qspi中的数据的头的部分②根据分析结果拷贝数据到DDR中.

先对以下这段代码进行解释:

		/*
		 * read the multiboot register
		 */<
  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值