赛灵思ZYNQ系列的FSBL程序解析

        在Vitis IDE软件中,可以生成FSBL的程序(FSBL在ZYNQ内部的SRAM中运行)。FSBL程序的主要作用是,引导bit文件加载到PL侧,引导裸机程序启动(或引导U-BOOT启动)。

一、FSBL源码的生成

        新建应用工程,创建zynq_fsbl工程。

二、FSBL程序简单解析

        在FSBL工程中,可以看到main.c文件,下面简单解析文件中的几个关键函数,捋清楚FSBL的运行过程。

2.1 ps7_init函数

        对PS端的配置信息进行初始化操作,包括MIO、PLL、CLK、DDR等;
        应该是将vivado中ZYNQ IP中配置的相关图形化的信息,通过vitis进行解析,生成相关信息。然后在FSBL工程中,通过调用ps7_init函数,将信息写入到对应的相关寄存器中,完成对SOC硬件的配置。

2.2 刷Dcache缓存、禁用DCache缓存

        先调用Xil_DCacheFlush函数完成刷DCache缓存的操作,然后再调用Xil_DCacheDisable禁用DCache缓存。

2.3  注册异常处理函数

        调用RegisterHandlers函数。

2.4 DDR读写测试

        调用DDRInitCheck函数。

2.5 PCAP的初始化

        处理器配置访问端口的初始化,调用InitPcap函数完成初始化。
        PCAP端口用来加载bits文件到PL端,因此需要进行初始化操作。

2.6 读取BOOT_MODE寄存器

        ZYNQ上电后,会将启动模式的MIO的状态保存到BOOT_MODE寄存器中。BOOT_MODE寄存器记录了ZYNQ的启动方式(QSPI、SD卡启动等)。

        调用Xil_in32(BOOT_MODE_REG)函数读取寄存器。

2.7 确定ZYNQ的启动模式,执行不同的处理

        逐个比较BOOT_MODE寄存器数值,确定启动模式。比如启动模式为QFLASH,那么:
        第一步,初始化QFLASH设备;
        第二步,将MoveImage函数指向QFLASH设备的读写函数实体。

2.8 加载启动镜像

        调用LoadBootImage函数。将bit文件加载到PL端,然后启动U-BOOT。

2.9 跳转到u-boot运行地址,启动u-boot

        调用FsblHandoff(HandoffAddress)函数,启动u-boot后,FSBL程序退出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值