软件版本:Anlogic -TD5.9.1-DR1_ES1.1
操作系统:WIN10 64bit
硬件平台:适用安路(Anlogic)FPGA
实验平台:米联客-MLK-L1-CZ06-DR1M90G开发板
板卡获取平台:https://milianke.tmall.com/
登录"米联客"FPGA社区 http://www.uisrc.com 视频课程、答疑解惑!
1概述
在应用的调试过程中,我们可以直接将其下载到DDR(或者其他介质)中运行,但处于非调试模式(例如部署到生产环境)时,则需要通过存储介质启动app。Soc的启动遵循固定的流程,且支持从不同的介质中启动。
实验目的:
1:熟悉FPSoc启动模式类型和硬件设置
2:熟悉FPSoc启动的过程
3:掌握ARM IP SD接口启动和QSPI FLASH启动的设置
4:利用FD制作BOOT.BIN文件
5:完成SD卡启动实验
6:完成QSPI启动实验
2FPSoc的启动
2.1启动流程
DR1 系列FPSoC 的启动是通过PMU 和BSU 的协调配合实现的。
PMU(Platform Management Unit)模块是SoC系统管理模块,主要功能如下:
- 系统初始化与启动
- 系统时钟复位管理
- 系统异常监控与处理
BSU(Boot Security Unit)子系统内含一个CPU,负责bootROM 的执行以及加密验签等操作。大致分为如下四个流程:
PMU 阶段(固定的上电时序)
在此阶段硬件将 eFUSE 中内容读取到寄存器中,PL进入初始化阶段,初始化结束后PL 送往PS 的init_ok 信号拉高表示初始化结束。
PS 释放POR reset,对PLL 等模块初始化,释放外设reset,采样启动模式配置管脚并将其写入B00T_MOD 寄存器,释放APU/RPU/DDR/总线reset,最后释放BSU reset。
bootROM 阶段
BSU reset 被释放后,开始执行片内ROM 中的固化的代码,也叫bootROM。bootROM 的执行流程是由启动模式配置管脚、eFUSE 内容、boot header、以及bootR0M中的内容决定的。bootROM读取BOOT_MOD寄存器并初始化相应的启动设备,之后bootR0M搜索有效image 并读取boot header(启动头部,其中包含描述镜像属性的一些参数,如镜像偏移地址、长度、加密属性等),根据boot header 对系统进行配置并将FSBL(First Stage Boot Loader,即第一阶段启动程序)加载到0CM 中,在安全启动情况下bootROM 会进行FSBL 的解密和验签操作,最后释放FSBL 目标CPU 的复位状态, 启动FSBL 运行。
FSBL 阶段
bootROM执行之后,系统交由FSBL 接管。APU0或RPU从OCM执行FSBL,FSBL 完成以下操作:DDR/PLL 初始化。若需要配置PL,则需要判断Init ok 是否拉高:
若 init_ok =1,APU/RPU 将bit数据读入内存,经过必要的程序(解密、验签)后写入PCAP,然后等待PL 的反馈信号done 拉高。
SSBL阶段
以上启动流程结束,交由用户接管。根据用户选择,SSBL可以是u-boot等boot loader,也可以是用户程序。
之后的流程中 PMU 主要在复位管理、异常监控和处理时使用:BSU 在用户程序需要时进行加密/解密、签名/验签操作。
2.1启动模式的设置
系统启动模式分为PS Master 启动模式和JTAG Slave 启动模式。
2.1.1 JTAG Slave 启动模式
DR1 系列FPSOC 支持JTAG 启动模式,JTAG 启动模式为非安全启动,在该模式下允许通过JTAG 接口访问PS 和PL,主要用于用户进行debug。在JTAG 模式下,bootROM 关闭系统看门狗,释放CPU reset并使CPU陷入循环,并且使能JTAG 接口。在非安全的PS Master 启动模式下JTAG接口同样可以访问。有关JTAG 的详细信息请参考JTAG 和系统调试章节。
2.1.2 PS Master 启动模式
该模式下,系统从外部Fash设备启动,bootROM 完成启动设备初始化,从启动设备中搜索并读取boot header、验证boot header 完整性、加载FSBL 到OCM 并启动运行目标CPU。PS Master 启动模式可以在安全启动或非安全启动下使用。
2.1.3 启动模式选择
硬件上模式开关为SW1,原理图如下
如下图所示把SW1模式开关切换到ON-ON,就是设置JTAG启动
若要SD卡启动,如下图所示把SW1模式开关切换到OFF-OFF,就是设置SD启动
若要QSPI启动,如下图所示把SW1模式开关切换到ON-OFF,就是设置QSPI启动
3搭建SDK工程
直接使用"01Vitis Soc开发入门"这个demo中已经创建好的工程实现。双击打开FD软件
设置好路径,打开sdk工程
完成加载后,我们选择使用hello_world完成固化。
4 SOC程序固化
使用存储介质启动 app 时先要构建fsbl,它的功能是为app 准备好SoC的初始化,例如时钟、外设、PL 端比特流的配置等,并进行PL 端的配置和app 的加载与运行配置。
在 fsbl、app 等就绪之后,需要使用"Create Boot lmage"功能将这些文件打包为boot.bin 文件并将其下载到存储介质中后,将启动模式设置为对应的存储介质。这样便能从存储介质中正常启动。
4.1创建FSBL文件
FSBL 的本质为app,故参照在fd 中构建app 工程的步骤便可,与其他app 的区别为fsbl 工程的template 要选择FSBL_V1_0。
点击build,完成FSBL文件的编译。编译完成后,产生fsbl.elf文件
4.2BOOT.BIN产生的方法
找到Create Boot Image工具,单击选择。
在创建BOOT.BIN文件中我们需要设置bin文件的路径,我们选择存放在uisrc/05_boot路径下方便管理。
点击ADD依次添加
点击创建,显示创建完成
可以看到创建的BOOT.BIN文件
4.3QSPI的启动
4.3.1烧录方法
支持JTAG模式的核心板下载很便捷,首先把SW1模式开关全部设置成JTAG模式。
打开Program Flash固化工具
按照要求配置完成,配置如下图所示,点击Program
等待校验完成
4.3.2从QSPI启动
设置SW1模式开关为QSPI模式(设置模式开关请务必断电完成)
为了观察实现结果,需要打开串口。如果不清楚串口号的,可以查看下设备管理器,如果发现没装串口驱动的安装上驱动
打开FD自带的串口工具,设置好串口号,点击OK
开发板上电,在QSPI模式下启动
4.4SD卡启动
设置SW1模式开关为SD卡模式(设置模式开关请务必断电完成)
为了观察实现结果,需要打开串口。如果不清楚串口号的,可以查看下设备管理器,如果发现没装串口驱动的安装上驱动
打开FD自带的串口工具,设置好串口号,点击OK
把之前产生的BOOT.bin文件复制进SD卡,将SD卡插入TF卡槽
开发板上电,在SD模式下启动