[米联客-安路飞龙DR1-FPSOC] SDK入门篇连载-02 FPSoc程序固化入门
软件版本: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模式下启动
本文来米联客(milianke),作者:米联客(milianke),转载请注明原文链接:https://www.cnblogs.com/milianke/p/18343898