[米联客-安路飞龙DR1-FPSOC] SDK入门篇连载-02 FPSoc程序固化入门

news/2025/3/15 7:04:54/文章来源:https://www.cnblogs.com/milianke/p/18343898

软件版本: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(或者其他介质)中运行,但处于非调试模式(例如部署到生产环境)时,则需要通过存储介质启动appSoc的启动遵循固定的流程,且支持从不同的介质中启动。

实验目的:

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 中的固化的代码,也叫bootROMbootROM 的执行流程是由启动模式配置管脚、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 接管。APU0RPUOCM执行FSBLFSBL 完成以下操作:DDR/PLL 初始化。若需要配置PL,则需要判断Init ok 是否拉高:

init_ok =1APU/RPU bit数据读入内存,经过必要的程序(解密、验签)后写入PCAP,然后等待PL 的反馈信号done 拉高。

SSBL阶段

以上启动流程结束,交由用户接管。根据用户选择,SSBL可以是u-bootboot 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 并启动运行目标CPUPS 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 的加载与运行配置。

fsblapp 等就绪之后,需要使用"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.2QSPI启动

设置SW1模式开关QSPI模式(设置模式开关请务必断电完成)

为了观察实现结果,需要打开串口。如果不清楚串口号的,可以查看下设备管理器,如果发现没装串口驱动的安装上驱动

打开FD自带的串口工具,设置好串口号,点击OK

开发板上电,在QSPI模式下启动

4.4SD卡启动

设置SW1模式开关SD卡模式(设置模式开关请务必断电完成)

为了观察实现结果,需要打开串口。如果不清楚串口号的,可以查看下设备管理器,如果发现没装串口驱动的安装上驱动

打开FD自带的串口工具,设置好串口号,点击OK

把之前产生的BOOT.bin文件复制进SD卡,将SD卡插入TF卡槽

开发板上电,在SD模式下启动

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/778281.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[米联客-安路飞龙DR1-FPSOC] SDK入门篇连载-01 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概述1.…

maven 中 scope标签的作用以及引入本地jar包打包方法

1. scope标签的作用2、使用system标签 项目三方jar存放位置结构:pom.xml中引入三方jar: <dependency><groupId>test</groupId><artifactId>testa</artifactId><version>0.0.1</version><scope>system</scope><syst…

强大的USB协议分析工具

2020年最后一天了,感谢大家一年来对我文章的支持,有你们的支持就是我强大的动力。 今天来给大家介绍一个USB 协议分析软件LeCroy USB Advisor,软件安装包下载连接如下: 链接:https://pan.baidu.com/s/12qBCOjuy4i8kr1MHjBrfYQ 提取码:2rpx 这个软件对于USB协议学习有很大…

python用弹窗选文件

from tkinter.filedialog import askopenfilename file_path = askopenfilename() 这是我能找到的最简洁版本来源:https://blog.csdn.net/u014769180/article/details/84639775 from tkinter.filedialog import askopenfilenamefile_path = askopenfilename()这是我能找到的最…

D38 2-SAT CF27D Ring Road 2

视频链接:D38 2-SAT CF27D Ring Road 2_哔哩哔哩_bilibili CF27D Ring Road 2 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)#include <iostream> #include <cstring> #include <algorithm> using namespace std;const int N=205; int n,m,x[N],y[N]; i…

Linux的特殊权限

特殊权限是什么 在Linux中,特殊权限是指针对文件或目录的特殊权限设置,包括SetUID、SetGID和Sticky Bit。特殊权限说明SetUID Set User ID 当一个可执行文件被设置了SetUID权限后,当任何用户执行该文件时,文件的所有者权限会被赋予执行者,而不是执行者的权限。这使得用户可…

性能测试之内存瓶颈问题分析与调优

注意:内存问题是性能分析与调优非常常见的一类问题(内存不足/内存泄露/内存溢出等) 一、内存概念: 计算机的存储系统分为主存储系统(内存) 辅助存储系统(外存) 外存 :计算机的辅助存储器,包括硬盘、软盘、光盘、网络云盘等 【输入-键盘,鼠标,输出- 屏幕,音频 视频】…

【待做】【域渗透】获取域控方法总结

搭建虚拟环境 【域控】,192.168.10.3 【域成员】,192.168.10.4工具 mimikatz procdump64在域渗透中、作为渗透测试人员,获取域控的权限基本上可以获取整个内网的权限。在大多数情况下,攻击者可以通过定位域管理员所登录的服务器,利用漏洞获取服务器system权限,找到域管理…

南京大学计算机基础(四)踩坑笔记

第六周 缓冲区溢出章节 bang问题:每次输入的id将影响getbuf中的堆栈位置,用-u 12的ebp和-u 123的ebp位置就不一样。 注意汇编代码中不能出现a0(代表换行符),如果地址有a0就将它随便改改就行了(a0改为a8-0x8)。注意gdb如果不能重定向,可能是因为你修改了gdbinit:https://s…

【PythonRS】基于矢量点读取遥感影像波段值制作训练样本

在进行遥感定量反演或数据分析时,往往我们都具有矢量的真值,可能是点文件也可能是面文件,最重要的还是通过这个矢量获取影像中该区域的值,这样方便做波段分析以及后续的反演等流程。今天给大家分享一下如何通过点文件获取影像的波段值。​ 在进行遥感定量反演或数据…

17.python字符类型

python之字符类型字符串 (一)字符类型的符号: <class str> (二)查看字符类型语句:type()(三)常见的字符串类型语句: capitalize()、title()、count()、join、split、strip、strip、rstrip、startswith、startswith、endswith、find、rfind、replace、upper、…

SqlDbx客户端连接服务器Oracle数据库

查了很多文章,介绍的不对,走了好多弯路,最后整理一下,供参考 一、下载Oracle客户端1、SqlDbx如果是32位的,客户端也要下载32位的 2、Oracle客户端版本要和服务端版本一致(本例用的是12.1.0.2.0) 3、32位客户端下载地址:https://www.oracle.com/database/technologies/i…