当前位置: 首页 > news >正文

【SoC FPGA】HPS启动过程

SoC HPS启动流程

    • Boot ROM
    • Preloader
    • Boot Loader

HPS的启动是一个多阶段的过程,每一个阶段都会完成对应的工作并且将下一个阶段的执行代码引导起来。每个阶段均负责加载下一个阶段。第一个软件阶段是引导 ROM,引导 ROM 代码查找并且执行称为预加载器的第 2 个阶段软件。预加载器如果找到下一个阶段软件,那么对其执行。预加载器和接下来的引导阶段 ( 如果存在 )统称为用户软件。用户软件位于 HPS 的外部并且由用户提供。引导 ROM 代码仅知道预加载器,但不知道接下来任何可能存在的引导阶段。

当处理器从复位(比如上电)释放并且CPU执行内部引导ROM(Boot ROM)中的复位异常处理代码时(通过指定复位向量指定Boot ROM区域实现自动执行Boot ROM),HPS开始进行引导;当引导ROM(Boot ROM)中的代码跳到引导软件的下一个阶段时,引导程序结束。引导软件的下一个阶段被称为预加载器,预加载器可以定制并且通常存储在HPS外部的基于闪存的非易失性存储器。
图1 典型引导流程
处理器可以从以下资源进行引导:

  • NAND闪存
  • SD/MMC闪存
  • Quad SPI闪存
  • FPGA内核逻辑

Boot ROM

Boot ROM是HPS内核上一段ROM中固化的可执行程序,作用是系统复位之后,执行引导preloader并且将CPU使用权交给preloader进行后续工作的过程。
Boot ROM完成的具体工作还有:

  • 使能指令缓存,branch predictor,浮点单元,NEON 向量单元
  • 设定看门狗定时器,Boot ROM保留适用
  • 根据CLKSEL设定配置MainPLL和外设PLL
  • 根据BOOTSEL设定配置I/O引脚的复用(此处只是完成了QSPI or SPI Flash or SD/MMC controller 的引脚的复用,更多的引脚的复用需要根据preloader才能够完成设定)
  • 初始化FLASH Controller 到默认设置

图2 Boot ROM执行过程
Boot ROM引导的preloader来源分为3类:

  1. 片上RAM热启动(对应图2框图①)
    如果之前执行过一次preloader,preloader会留在on-chip RAM中,按下热复位按键后,会首先选择从on-chip RAM启动,此过程具有最高优先级,但是从on-chip RAM 启动时会对遗留的preloader代码进行CRC校验(具体是否校验用户可以通过warmramgrp配置决定),校验成功才会执行。这样做防止了用户对on-chip RAM里的内容进行更改!如校验失败,会选择从Flash中启动preloader(对应图2框图③)。
  2. 从FPGA部分冷启动(对应图2框图②)
    此方式具有第二优先级,如果用户设定了bootsel从FPGA启动,则会等待FPGA配置成功(通过FPGA manager获取FPGA的状态),HPS会通过 HPS-to-FPGA bridge执行位于 0xC0000000(相对于HPS-to-FPGAbridge偏移地址为0)的memory中的指令。
  3. 从FLASH存储器冷启动(对应图2框图④)
    如果在找不到preloader的话,则会检验FPGA处的回调镜像(callback image),等待复位。对应图2框图⑤、⑥。
    说明:
    (1)只有冷启动才会选择从FPGA 引导
    (2)不论热启动还是FPGA冷启动,如不成功都会进入到了红色框的QSPI启动中
    (3)图2框图②中的yes 和 no 由bootsel 决定,图2框图③、④中最后具体是使用哪个FLASH存储器也由bootsel管脚决定。
    补充:
    (1)以上的冷、热分别表示上电时和已上电。
    (2)从断电状态到上电自动产生的复位成为冷复位,冷复位用英文表示Restart。已经通电的情况下给一个复位信号称为热复位,热复位用英文表示Reset。
    (3)热启动和冷启动区别:从断电到上电启动成为冷启动;上电的状态下重启系统成为热启动。
    (4)热复位和热启动区别:二者既有相同之处又有不同之处,不同在于热复位是复位相关存储器,热启动是重新启动相关设备。

Preloader

preloader(预加载器)的命名相对于BootLoader,其作用类似于PC主板上的BIOS,BIOS在系统启动之前控制着主板上的硬件设备,引导系统启动程序。preloader在HPS中完成的功能主要有系统时钟配置、引脚的复用配置、存储器初始化以及引导用户软件,下一步用户软件可以直接是用户的baremental 程序,也可以不需要bootloader的系统程序,如ucos,或者是操作系统的引导程序,如u-boot(开源引导加载器)。

预加载器被允许从 HPS 可用的任何器件加载下一个阶段引导软件。典型源头包括含有预加载器的同一闪存器件,一个不同的闪存器件或一个如 EMAC 的通信接口。

引导加载器:引导加载器加载操作系统并且将软件控制传递到操作系统。

HPS启动过程中三大典型用户软件架构:
(1)preloader+baremental code
(2)preloader+无bootloader的操作系统(如ucos)+用户定义软件
(3)preloader+bootloader code(如u-boot)+操作系统(如linux)+用户定义软件

preloader具体完成的工作:

  • 初始化SDRAM接口
  • 配置 remap 寄存器,把on-chip RAM 映射至地址0x0,异常会被preloader处理
  • on-chip RAM 可以被读写,初始地址从0x0对齐
  • 通过scan manager配置HPS I/O
  • 通过system manager配置引脚复用
  • 通过clock manager配置HPS时钟
  • 初始化包含了下一阶段启动代码的FLASH控制器(NAND, SD/MMC, or quad SPI)
  • 启动下一阶段或者将用户代码引导入SDRAM,并把CPU控制权交至下一段代码

Boot Loader

Boot loader(系统引导程序),操作系统内核运行之前运行的一段程序。它首先完成系统硬件的初始化,包括时钟的设置、存储区的映射等,设置堆栈指针等;然后把操作系统内核从flash区拷贝带ram区,并跳转到内核的入口,将系统的控制权交给操作系统,从此系统的运行和Boot loader再无任何关系。

BootLoader启动方式:

大多数BootLoader都有两种操作模式:启动加载模式和下载模式,BootLoader的组最终目的都是启动内核。

1.启动加载模式(boot loading)
上电后,BootLoader从板子的某个固态存储设备上将操作系统加载到RAM中运行,整个过程没有用户介入。这种模式是BootLoader的正常工作模式,产品发布时候,BootLoader就工作在这种模式下。

2.下载模式(down loading)
这种模式下,开发人员使用各种命令,通过串口连接或者网络连接从主机上下载文件,将他们直接放在内存运行或者烧入flash类固态存储设备中。以后的系统更新也会使用 Boot Loader 的这种工作模式。工作于这种模式下的 Boot Loader 通常都会向它的终端用户提供一个简单的命令行接口。

参考文章:
https://blog.csdn.net/qq_51118175/article/details/122052285
http://m.eeworld.com.cn/bbs_thread-454675-1-1.html

相关文章:

【SoC FPGA】HPS启动过程

SoC HPS启动流程 Boot ROMPreloaderBoot Loader HPS的启动是一个多阶段的过程,每一个阶段都会完成对应的工作并且将下一个阶段的执行代码引导起来。每个阶段均负责加载下一个阶段。第一个软件阶段是引导 ROM,引导 ROM 代码查找并且执行称为预加载器的第 …...

Wireshark CLI | Mergecap 篇

简介 Mergecap 是 Wireshark 程序安装时附带的可选工具之一&#xff0c;用于合并数据包文件的命令行工具。 mergecap [ -a ] [ -F <file format> ] [ -I <IDB merge mode> ] [ -s <snaplen> ] [ -V ] -w <outfile>|- <infile> [<infile>…...

10个打工人必备AI神器,升职加薪靠AI

HI&#xff0c;同学们&#xff0c;我是赤辰&#xff0c;本期是第18篇AI工具类教程&#xff0c;文章底部准备了粉丝福利&#xff0c;看完后可领取&#xff01;1. Runway&#xff08;文字转视频AI工具&#xff09; 只需要一句提示词就能精确生成你所想象的视频场景&#xff0c;还…...

Java架构师缓存架构设计

目录 1 导学2 高性能概述2.1 高性能的定义和衡量指标2.2 如何实现高性能的计算机系统或软件程序2.3 木桶理论2.4 如何实现计算机系统或软件程序的高性能3 多级缓存设计3.1 浏览器缓存3.2 CDN缓存3.3 负载均衡的缓存3.4 进程内缓存3.5 分布式缓存4 缓存技术方案5 如何进行缓存拆…...

Linux 安全 - DAC机制

文章目录 一、安全简介二、DAC2.1 UNIX 的自主访问控制2.2 Linux 的自主访问控制 三、进程凭证3.1 简介3.2 uid/gid3.3 系统调用 四、客体标记4.1 简介4.2 系统调用 五、UGO规则源码分析参考资料 一、安全简介 计算机系统应对安全挑战的办法大致有四种&#xff1a;隔离、控制、…...

解决Windows系统win+shift+s截图快捷键失效问题

文章目录 打开任务管理器找到Windows资源管理器&#xff0c;选择重新启动 打开任务管理器 按“Win R”打开&#xff1a; 输入taskmgr.exe&#xff0c;运行&#xff0c;即可打开任务管理器&#xff1a; 找到Windows资源管理器&#xff0c;选择重新启动 点击右下角的“重新启…...

Excel 快速填充

文章目录 利用快速填充进行提取数据利用快速填充进行拆分重组 2013 及以上版本才有的功能. 利用快速填充进行提取数据 有一列的数据已有, 需要提取部分数据到另一列, 只需要输入部分内容, 后面内容可以自动显示, 按下回车即可快速填充. 只要前面手动输入的内容没有错得太离谱…...

OPENCV图像和视频处理

图像基本操作&#xff1a; Opencv图像处理&#xff08;全&#xff09;_胖墩会武术的博客-CSDN博客 import cv2 import matplotlib.pyplot as plt import numpy as npimgcv2.imread(1.jpg) #图像的显示 cv2.imshow(image,img) cv2.waitKey(0) …...

QDir实践

现在有多个文件&#xff0c;路径为&#xff1a; a\xxx\kmd_config\c.json 其中xxx是变量 startcalc,,,,,, 目标&#xff1a; 访问每一个json文件 实例&#xff1a; QString app_path QApplication::applicationDirPath() "/app";QDir dir(app_path);QStringLi…...

网络通信三要素

三要素概述 IP地址&#xff1a;设备在网络中的地址&#xff0c;是唯一的标识。 端口&#xff1a;应用程序在设备中唯一的标识。 协议: 数据在网络中传输的规则&#xff0c;常见的协议有UDP协议和TCP协议。 网络通信过程 A程序通过IP和端口连接到到B程序&#xff0c;再互…...

2023年中国渔业研究报告

第一章 行业概况 1.1 定义 渔业&#xff0c;作为全球经济的重要支柱之一&#xff0c;其核心活动包括捕捞、水产养殖、产品加工与销售等。其不仅是食物安全的重要保障&#xff0c;还是许多沿海和内陆地区经济发展的重要动力。 首先&#xff0c;捕捞活动是渔业的基础。通过海洋…...

python字符串中的\“

data {"text": "\"abc\""} print(data) # {"text": ""abc""}从结果可以看到并没有出现反斜杠&#xff0c;反斜杠与双引号作为一个整体&#xff0c;转义为了一个双引号&#xff0c;如果要在字符串中出现反斜杠&am…...

Elasticsearch 分片内部原理—使文本可被搜索、动态更新索引

目录 一、使文本可被搜索 不变性 二、动态更新索引 删除和更新 一、使文本可被搜索 必须解决的第一个挑战是如何使文本可被搜索。 传统的数据库每个字段存储单个值&#xff0c;但这对全文检索并不够。文本字段中的每个单词需要被搜索&#xff0c;对数据库意味着需要单个字…...

lvgl 界面管理器

lv_scr_mgr lvgl 界面管理器 适配 lvgl 8.3 降低界面之间的耦合使用较小的内存&#xff0c;界面切换后会自动释放内存内存泄漏检测 使用方法 在lv_scr_mgr_port.h 中创建一个枚举&#xff0c;用于界面ID为每个界面创建一个页面管理器句柄将界面句柄添加到 lv_scr_mgr_por…...

一篇文章让你了解“JWT“

一.JWT简介 1.概念 JWT (JSON Web Token) 是一种用于在网络上安全传输信息的开放标准&#xff08;RFC 7519&#xff09;。它是一种紧凑且自包含的方式&#xff0c;用于在不同组件之间传递信息&#xff0c;通常用于身份验证和授权目的。JWT 是以 JSON 格式编码的令牌&#xff…...

HJ73 计算日期到天数转换

HJ73 计算日期到天数转换 int main() {int year, month, day;cin >> year >> month >> day;int monthDays[13] { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 };int nday monthDays[month - 1] day;if (month > 2 &&((year…...

Unity实现设计模式——适配器模式

Unity实现设计模式——适配器模式 适配器模式又称为变压器模式、包装模式&#xff08;Wrapper&#xff09; 将一个类的接口变换成客户端所期待的另一种接口&#xff0c;从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。 在一个在役的项目期望在原有接口的基础…...

【2023年11月第四版教材】专题1 - 计算题考点汇总 (合集篇)

专题1 - 计算题考点汇总 (合集篇&#xff09; 1 进度类1.1 PERT三点估算1.1.1 β分布1.1.2 三角分布 1.2 单代号网络图1.2.1 画图1.2.2 找关键路径1.2.3 计算总工期1.2.4 总时差1.2.5 自由时差1.2.6 工期压缩 1.3 双代号网络图1.4 双代号时标网络图1.4.1 画图1.4.2 找关键路径1…...

系统架构设计:17 论信息系统的安全性与保密性设计

目录 一 信息安全基础 1 信息安全的基本要素 2 信息安全的范围 3 网络安全...

使用EasyDarwin+ffmpeg+EasyPlayerPro完成rtsp的推流操作和拉流操作

本文分享在做视频类测试过程中所用到的工具EasyDarwinffmpegEasyPlayerPro 首先说一下EasyDarwin,简单来讲&#xff0c;它就是个推流和拉流及系统消耗的监测软件&#xff0c;具体使用方法我会写在下方。 EasyDarwin 1、解压下载好的EasyDarwin压缩包&#xff0c;并找到EasyD…...

AI书签管理工具开发全记录(十九):嵌入资源处理

1.前言 &#x1f4dd; 在上一篇文章中&#xff0c;我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源&#xff0c;方便后续将资源打包到一个可执行文件中。 2.embed介绍 &#x1f3af; Go 1.16 引入了革命性的 embed 包&#xff0c;彻底改变了静态资源管理的…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)

船舶制造装配管理现状&#xff1a;装配工作依赖人工经验&#xff0c;装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书&#xff0c;但在实际执行中&#xff0c;工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)

漏洞概览 漏洞名称&#xff1a;Apache Flink REST API 任意文件读取漏洞CVE编号&#xff1a;CVE-2020-17519CVSS评分&#xff1a;7.5影响版本&#xff1a;Apache Flink 1.11.0、1.11.1、1.11.2修复版本&#xff1a;≥ 1.11.3 或 ≥ 1.12.0漏洞类型&#xff1a;路径遍历&#x…...

音视频——I2S 协议详解

I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议&#xff0c;专门用于在数字音频设备之间传输数字音频数据。它由飞利浦&#xff08;Philips&#xff09;公司开发&#xff0c;以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...

比较数据迁移后MySQL数据库和OceanBase数据仓库中的表

设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...

STM32---外部32.768K晶振(LSE)无法起振问题

晶振是否起振主要就检查两个1、晶振与MCU是否兼容&#xff1b;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容&#xff08;CL&#xff09;与匹配电容&#xff08;CL1、CL2&#xff09;的关系 2. 如何选择 CL1 和 CL…...

苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会

在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...

tauri项目,如何在rust端读取电脑环境变量

如果想在前端通过调用来获取环境变量的值&#xff0c;可以通过标准的依赖&#xff1a; std::env::var(name).ok() 想在前端通过调用来获取&#xff0c;可以写一个command函数&#xff1a; #[tauri::command] pub fn get_env_var(name: String) -> Result<String, Stri…...

离线语音识别方案分析

随着人工智能技术的不断发展&#xff0c;语音识别技术也得到了广泛的应用&#xff0c;从智能家居到车载系统&#xff0c;语音识别正在改变我们与设备的交互方式。尤其是离线语音识别&#xff0c;由于其在没有网络连接的情况下仍然能提供稳定、准确的语音处理能力&#xff0c;广…...

大数据驱动企业决策智能化的路径与实践

&#x1f4dd;个人主页&#x1f339;&#xff1a;慌ZHANG-CSDN博客 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 一、引言&#xff1a;数据驱动的企业竞争力重构 在这个瞬息万变的商业时代&#xff0c;“快者胜”的竞争逻辑愈发明显。企业如何在复杂环…...