ZYNQ程序固化

文章目录

  • 一、简介
  • 二、固化操作
    • 2.1 生成固化文件
    • 2.2 固化到SD卡
    • 2.3 固化到Flash
  • 参考

将程序存储在非易失性存储器中,在上电或者复位时让程序自动加载运行。
这个过程需要启动引导程序( Boot Loader)参与,Boot Loader会加载FPGA配置文件,以及运行在ARM中的软件应用。

一、简介

ZYNQ Soc的启动和配置过程中,既需要PS的配置信息,又需要PL的配置信息。
ZYNQ系列是没有办法只固化PL的程序的(NorFlash、SD卡等是连接在PS端的)。

PS 支持多种片外非易失性存储器(Quad SPI Flash,NAND Flash,NOR Flash 或 SD 卡)。
ZYNQ SoC 的启动由片上的 BootROM 开始。
片上 BootROM 是 ZYNQ 芯片上的一块非易失性存储器, 它包含了 ZYNQ 所支持的配置器件的驱动,里面的代码是不可修改的。

BootROM 中的代码首先会在片外的非易失性存储器中寻找一个头文件,头文件里定义了一些启动信息,用于配置 BootROM 的运行。
BootROM 执行之后,下一个配置阶段被称为 First-Stage Boot Loader(FSBL),它是由设计者所创建的。 FSBL 可以配置 DDR 存储器和硬件设计过程中所定义的一些外设。这些器件需要在加载软件应用及配置 PL 之前就初始化完毕。
FSBL 的工作内容:

  1. 初始化 PS
  2. 如果提供了 BIT 文件,则配置 PL
  3. 加载裸机应用程序到 DDR 中
  4. 开始执行裸机应用程序

PL 的配置是通过处理器配置访问接口(Processor Configuration Access Port,PCAP)进行的,它允许对 PL 进行部分配置或者完全配置。

ZYNQ 的启动镜像需要如下文件:

  1. Boot ROM 头文件,控制 Boot ROM的设置
  2. First-Stage Boot Loader,FSBL文件
  3. PL 配置文件,即 BIT 文件
  4. PS软件应用程序,即ELF文件

Boot ROM Header文件是自动生成的。
ZYNQ SoC 使用多个模式引脚来决定配置器件的类型、软件的存储位置以及其他的系统设置,这些引脚共享PS 端的MIO 引脚。
总共有 7 个模式引脚,分别为 MIO[8:2],前四个引脚定义启动模式,第五个引脚定义是否使用 PLL,第六个和第七个引脚定义上电过程中 MIO bank0 和 bank1 的 bank 电压。
在这里插入图片描述
通常模式下,锁相环PLL是启动的,PS-CLK提供时钟信号,经过三路PLL:

  • ARM PLL,产生时钟用于CPU和互联
  • IO PLL,产生时钟用于IO外围设备
  • DDR PL,产生时钟用于DDR、DRAM 控制器和AXI-HP接口

在上电复位(Power On Reset,POR)之后,硬件会采集模式引脚的状态,禁用器件内部的模块,并根据模式引脚的设置选择是否使能 PS 的时钟锁相环。

整个系统的启动过程如下图
在这里插入图片描述

二、固化操作

2.1 生成固化文件

在Block Design 的ZYNQ Processing System模块中要使能SD外设和QSPI外设。

  • 使能SD外设,将程序固化到SD卡中。
  • 使能QSPI外设,将程序固化到Flash中。

在这里插入图片描述

在创建platform的步骤中需要勾选Generate boot components (生成启动组件)选项,勾选之后,软件会自动在硬件平台工程里生成 fsbl 的相关文件。
在这里插入图片描述

工程编译后,在系统工程和应用工程下会各自生成一个Debug文件夹。

  • 系统工程下的 Debug 文 件里包含的是 BOOT.BIN(固化文件)
  • 应用工程下的 Debug 文件里包含的是 elf文件(应用工程烧录文件)

同时,硬件平台工程文件夹下也生成了 fsbl.elf(启动引导文件)

也可以手动生成BOOT.BIN文件
在这里插入图片描述
在这里插入图片描述
bif文件是BOOT.BIN文件的参数描述。
3个文件的添加顺序不能乱。

2.2 固化到SD卡

将生成的 BOOT.bin 文件拷贝到 SD 卡根目录下。(SD卡文件系统为FAT32格式)。
将板卡启动模式设置为从SD卡启动。

2.3 固化到Flash

将程序固化到 QSPI Flash 需要使用 JTAG 下载器。( 此时要设置为从JTAG启动 )
Vitis 软件的菜单栏中点击"Xilinx->Program Flash"。
在这里插入图片描述
在弹出的 Program Flash Memory 界面中中配置BOOT.BIN文件路径和FSBL文件路径。
在这里插入图片描述
点击"Program",开始对 Flash 进行编程。
Flash编程完成后,将板卡启动模式设置为从QSPI Flash启动。
在这里插入图片描述

参考

【正点原子】启明星ZYNQ之嵌入式Vitis开发指南v1_2

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

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

相关文章

【异常收集】IDEA启动项目遇到的异常汇总,包括插件异常,版本依赖异常,启动异常等以及对应的解决办法

该文章旨在记录开发中遇到的一些异常,以供遇到似错误进行参考修改 一、项目在多个环境下切换,有一次启动后编译失败,报异常 背景:项目在不同环境下有对应的分支,切换分支后运行项目,报错如下 错误:Kotlin:…

FreeRTOS 任务优先级

FreeRTOS 任务优先级 介绍 在 FreeRTOS 中,任务优先级是一种重要的调度机制,它决定了任务在系统中的执行顺序和调度方式。本文将深入探讨 FreeRTOS 任务优先级的概念、作用以及如何合理地设置任务优先级。 什么是任务优先级? 任务优先级是…

【mac】 配合鼠标放大缩小页面\通过ctrl或cmd键缩放页面

win转mac后,一直苦于页面的操作习惯,终于BBT这个工具可以通过添加滚轮手势来实现快捷键缩放页面 顶部配置触发选择“普通鼠标” 然后设置触发操作

滴滴基于 Ray 的 XGBoost 大规模分布式训练实践

背景介绍 作为机器学习模型的核心代表,XGBoost 在滴滴众多策略算法业务场景中发挥着至关重要的作用。因此,保障并持续提升 XGBoost 模型的离线训练及在线推理稳定性一直是机器学习平台的重点工作。同时,面对多样化的业务场景定制需求和数据规…

ubuntu设置右键打开terminator、code

前言: 这里介绍一种直接右键打开本地目录下的terminator和vscode的方法。 一:右键打开terminator 1.安装terminator sudo apt install terminator 2.安装nautilus-actions filemanager-actions sudo apt-get install nautilus-actions filemanager…

ES6 剩余函数

ES6 引入了剩余参数(Rest Parameters)的概念,允许函数接受不定数量的参数,这些参数会被捕获成一个数组。剩余参数的语法使用三个点 ... 后跟一个参数名。 以下是一个简单的例子: function sum(...numbers) {return n…

docker-compose Install influxdb1+influxdb2+telegraf

influxd2前言 influxd2 是 InfluxDB 2.x 版本的后台进程,是一个开源的时序数据库平台,用于存储、查询和可视化时间序列数据。它提供了一个强大的查询语言和 API,可以快速而轻松地处理大量的高性能时序数据。 telegraf 是一个开源的代理程序,它可以收集、处理和传输各种不…

Typora 无法导出 pdf 问题的解决

目录 问题描述 解决困难 解决方法 问题描述 Windows 下,以前(Windows 11) Typora 可以顺利较快地由 .md 导出 .pdf 文件,此功能当然非常实用与重要。 然而,有一次电脑因故重装了系统(刷机)…

如何获得ICP备案服务码?

服务码获取规则 域名备案需要ICP备案服务码,服务码需要购买服务器获得,阿里云的服务器获取服务码的规则如下。 * 不同类型的服务器可申请的ICP备案服务码数量不同,新增备案一个网站需使用一个ICP备案服务码,注销或取消接入后无法…

QT+VS实现Kmeans聚类算法

1、Kmeans的定义 聚类是一个将数据集中在某些方面相似的数据成员进行分类组织的过程,聚类就是一种发现这种内在结构的技术,聚类技术经常被称为无监督学习。k均值聚类是最著名的划分聚类算法,由于简洁和效率使得他成为所有聚类算法中最广泛使…

访问服务器上的 Jupyter Notebook

文章目录 1、生成秘钥2、修改配置3、启动 Jupyter 安装和基本使用方法可见: https://blog.csdn.net/lovechris00/article/details/123458990 1、生成秘钥 jupyter notebook password输入秘钥后,将生成秘钥文件,进入文件,复制那一…

linux中配置文件目录为什么用etc来命名

在早期的 Unix 系统中,/etc 目录的名称确实来源于单词 “etcetera” 的缩写,最初意味着 “其他”,用来存放杂项或者不属于其他特定目录的文件。然而,随着时间的推移,/etc 目录的用途逐渐演变并专门化。 在现代的 Linux…

Android App开发-简单控件(1)——文本显示

本章介绍了App开发常见的几类简单控件的用法,主要包括:显示文字的文本视图、容纳视图的常用布局、响应点击的按钮控件、显示图片的图像视图等。然后结合本章所涉及的知识,完成一个实战项目“简单计算器”的设计与实现。 1.1 文本显示 本节介绍…

架构篇27:如何设计计算高可用架构?

文章目录 主备主从集群小结计算高可用的主要设计目标是:当出现部分硬件损坏时,计算任务能够继续正常运行。因此计算高可用的本质是通过冗余来规避部分故障的风险,单台服务器是无论如何都达不到这个目标的。所以计算高可用的设计思想很简单:通过增加更多服务器来达到计算高可…

《开始使用PyQT》 第01章 PyQT入门 04 创建第一个桌面应用

04 创建第一个桌面应用 《开始使用PyQT》 第01章 PyQT入门 04 创建第一个桌面应用 A GUI application generally consists of a main window and possibly one or more dialog boxes. The main window is where the user will spend most of their time when using your appl…

【Docker】nacos集群搭建Nginx负载均衡

目录 一、mysql安装与基操 1.1 数据准备 1.2 创建mysql与数据表 二、Nacos集群部署 2.1 创建nacos及配置 2.2 创建Nginx容器 一、mysql安装与基操 1.1 数据准备 拉取mysql docker pull mysql:5.7(版本) 定义挂载目录 mkdir -p /mysql/{conf,data,script} 配置my.c…

第十四届蓝桥杯C组题目 三国游戏

4965. 三国游戏 - AcWing题库 小蓝正在玩一款游戏。 游戏中魏蜀吴三个国家各自拥有一定数量的士兵 X,Y,Z(一开始可以认为都为 00)。 游戏有 n 个可能会发生的事件,每个事件之间相互独立且最多只会发生一次,当第 i个事件发生时会分…

JavaWeb:商品管理系统(Vue版)

文章目录 1、功能介绍2、技术栈3、环境准备3.1、数据库准备3.2、在新建web项目中导入依赖3.3、编写Mybatis文件3.4、编写pojo类3.5、编写Mybatis工具类3.6、导入前端素材(element-ui & vue.js & axios.js)3.7、前端页面 4、功能实现4.1、查询所有…

2024 前端趋势预测:React 不会被取代,AI 崛起,追求全栈宇宙

对于前端来说,2023 是非同寻常的一年。我们见证了争相抢占甚至是发明服务器端渲染(SSR)市场的热潮、AI 的不断进步、Web 渲染器和 JS 引擎的寒武纪大爆发、一大批有力的竞争者试图摧毁巨头的统治地位…… 在开始预测未来一年发展趋势之前&am…

(4)Elastix图像配准:3D图像

文章目录 前言1、项目实战2、参数文件2.1、parameter_file_rigid_3D.txt2.2、parameter_file_affine_3D.txt2.3、parameter_file_bspline_3D.txt前言 (1)Elastix图像配准:原理 + 源码(详解) (2)Elastix图像配准:参数文件(配准精度的关键) 1、项目实战 将以下文件保…