ZYNQ - 无DDR固化程序(代码运行在OCM上)

news2024/10/6 1:47:02

写在前面

ZYNQ固化时,正常情况下都需要DDR参与,但是有时硬件设计时,可能将DDR去掉或设计出错,这将导致ZYNQ无法正常固化,之前有写过一个使用静态链接库进行无DDR固化的文章,当时那个是压缩了FSBL的相关代码只保留FLASH模式下的功能,对于其他模式可能无法正常使用,本文将无DDR固化的情况进一步进行介绍,讲解如何修改FSBL实现ZYNQ的程序固化,给出一个demo进行演示测试。

适用范围

不论是之前提到的静态链接库的版本还是本文版本(暂且叫做运行在OCM版本)。都只适合PS端的轻量级代码,PL端无特殊要求,但是PL PS交互部分如果需要太多驱动可能也会超出片上RAM的空间。本工程根本思想就是将fsbl分配到较大的com0上,其余应用工程分配到ocm1上。

建立工程

建立一个Block design,添加zynq核,然后勾选,FLASH和UART部分。

ZYNQ配置界面

这里为了验证PL端功能正常启动,添加了一个逻辑常数用于驱动LED灯。

连接界面

创建HDL顶层,生成output products,因为涉及到PL端部分,所以需要综合导出生成bitstream,不要忘记加管脚约束。

操作步骤

当运行生成bitstream后,导出硬件,并且包含bit流文件。

image-20221119212406684

准备好硬件平台后就可以进行SDK的FSBL代码的修改了。

SDK代码修改

新建应用工程建一个helloworld工程,打开lscript.ld文件将helloworld的代码段映射区对应到ps7_ram_1,保存编译。

helloworld工程的lscript.ld文件

新建应用工程建一个fsbl工程,打开lscript.ld文件将helloworld的代码段映射区对应到ps7_ram_0,保存编译。

fsbl工程的lscript.ld文件

打开fsbl代码的fsbl_debug.h文件,增加FSBL_DEBUG_INFO的宏定义方便进行查看fsbl的调试信息。

增加FSBL_DEBUG_INFO

打开main.c文件,找到main函数,定位到296行附近,在这里可以看到因为缺少ddr的部分,该部分代码将不会正常执行,将会跳转到下面的代码中。

定位代码

代码以下两行代码执行后FSBL 状态打印输出0XA008,在fsbl.h文件中对应DDR missing 的状态。

实际执行代码

因此要想使得代码正常运行就要将正常存在ddr时的代码正常运行,仅删除和DDR强有关的部分(影响编译和运行的),然后将代码运行地址设置到OCM上。

所以,取消对296行的定义改成如下内容。

修改内容

此时如果使用当前版本的fsbl的可执行文件可以正常进行烧写固化了。但是可能此时还是无法正常启动,下面步骤用于演示并定位具体问题。

选中helloworld工程创建镜像工程。

创建镜像

BootLoader选中刚刚修改好的fsbl.elf。

BootLoader选择

打开开发板,选择jtag模式下烧写,选择创建好的镜像和刚刚的fsbl的elf文件。

烧写配置

正在烧写…

烧写

烧写完成后关掉开发板,切换到flash模式下打开串口观察应用程序能否正常启动。在我的开发板FPGA done的指示灯和PL端的LED等都只是闪烁了一下,不能正常启动。

此时还在flash模式下去尝试在线烧写。从调试信息可见,FLASH正常启动,启动初始化后存在失败,单步调试后发现main函数的在570行的LoadBootImage()运行后就会存在上述问题。

定位问题代码

定位到image_mover.c的436行,发现此处的DDR_END_ADDR的默认定义是0X00,无法正常执行下面的程序。

修改定位

所以这里修改DDR_END_ADDR为片上rom的结束地址。

修改宏定义

再次重复操作,完成镜像生成后,jtag模式烧写,flash模式启动,观察打印调试信息。从调试信息中可以看到,PS端正常启动,此时挂在PL端的LED灯也能正常点亮。

打印信息

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

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

相关文章

yolov5剪枝实战3: yolov5-slimming项目运行演示

1. 下载项目文件 从百度网盘下载并解压 网盘地址,文末有链接:包括项目完整源代码、数据集、原理的课件说明等。 解压源码: yolov5-6.1-slimming.zip项目没有从yolov5 github上直接克隆项目文件,而是从百度网盘上下载项目文件并解压,因为yolov5原始的代码是没有带网络剪枝的,…

ElasticSearch - ​开启搜索的新境界

You Know, for Search ElasticSearch官网 开启搜索的新境界 Elasticsearch 是一个开源的搜索引擎,建立在一个全文搜索引擎库 Apache Lucene™ 基础之上。 Lucene 可以说是当下最先进、高性能、全功能的搜索引擎库。但是 Lucene 仅仅只是一个库。为了充分…

STM32+ MAX30102通过指尖测量心率+血氧饱和度

一、前言 重要的事情放在最前面:max30102只适用于指尖手指测量,不适用与手腕手指测量,如需做成可穿戴样式选择传感器的小伙伴请pass掉他,因为他只有红光和红外2种光,不够充足的数据源去运算。 由于一些原因&#xff0c…

个人开发者轻松接入支付回调

易支付(https://epay.jylt.cc)- 个人支付如此简单 随着技术的发展,现在个人构建一个网站的成本越来越低,越来越多的个人开发者拥有了自己的网站。个人搭建网站除了带来成就感之外如果能赚一些额外的收入岂不更好? 事…

多目标优化问题的研究概述(Matlab代码实现)

🍒🍒🍒欢迎关注🌈🌈🌈 📝个人主页:我爱Matlab 👍点赞➕评论➕收藏 养成习惯(一键三连)🌻🌻🌻 🍌希…

ECMAScript

介绍 JavaScript和ECMAScript的区别 html和css的解析在两款浏览器是不同的效果,比如一个页面能在IE解析,但是不能在网景浏览器解析 后面出现了脚本语言,JavaScript,提供了丰富功能,比如输入密码进行正则的判断提示 …

【算法】用动态规划求解背包问题

1.问题描述 有n种物品,每种物品的单件重量为w[i],价值为v[i]。现有一个容量为V的背包,如何选取物品放入背包,使得背包内物品的总价值最大。 下面是本题中我们使用的例子: 有三个物品,第一个物品的重量为3,…

【附源码】Python计算机毕业设计图书销售系统设计

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

用友vs金蝶产品分析(云星空与YonSuite)

产品定位 用友与金蝶二者面对的客户群体是相同的:都是为成长型企业提供一体化服务,由于金蝶云星空发展较早,在部分产品功能上具备一定的先发优势;在产品的架构上,由于YS采用目前最先进的云原生和微服务架构&#xff0…

Bootstrap(一)

目录: (1)bootstrap容器 1.简单框架使用 2.流体容器 3.固定容器 4.栅格系统 (1)bootstrap容器 1.简单框架使用 bootstrap-3.3.7、bootstrap-3.3.7-dist 是原码文件,带dist是编译完的,里面…

5.C语言常见运算符及其优先级

运算符 用算术运算符将运算对象(也称操作数)连接起来的、符合C语言规则的式子,称为C算术表达式。运算对象包括常量、变量、函数等。 例如:a * b / c - 1.5 ‘a’ 运算符的分类 1.双目运算符:即参加运算的操作数有两…

SpringBoot--获取路径中的参数(x-www-form-urlencoded)--方法/实例

原文网址:SpringBoot--获取路径中的参数(x-www-form-urlencoded)--方法/实例_IT利刃出鞘的博客-CSDN博客 简介 本文用示例介绍SpringMVC如何获取路径中的参数。也就是: Content-Type为x-www-form-urlencoded。 代码 Controller BasicController.java…

在线考试系统

项目描述 临近学期结束,还是毕业设计,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下,你想解决的问…

Prometheus邮件告警

一. 部署Alertmanager: 1. 解压Alertmanager压缩包: [rootnode5 ~]# tar xf alertmanager-0.24.0.linux-amd64.tar.gz -C /usr/local/ 2. 为解压后的文件做软连接: [rootnode5 ~]# ln -sv /usr/local/alertmanager-0.24.0.linux-amd64/ …

SSM整合(三)

redis之简单使用 1.准备工作 1.1 在resource资源文件夹下面创建redis.properties文件,并填写如下内容 #连接端口 redis.port6379 #连接地址 redis.host127.0.0.1 #超时时间:单位ms redis.timeout3000 #授权密码 redis.password #最大连接数:能够同时建…

GUI编程--PyQt5--QLineEdit

文章目录键盘文本输入框文本占位符密码显示与隐藏自动补全输入限制掩码字符光标移动设置文本区域常用编辑功能输入控件,用于捕获用户的信息键盘文本输入框 QLineEdit, 单行,纯文本输入框 # 实例化 文本输入框 le QLineEdit("默认值", windo…

Material Design之CoordinatorLayout 与AppbarLayout与CollapsingToolbarLayout

Material Design 之 CoordinatorLayout 第一次接触CoordinatorLayout 你可能有这些疑问,CoordinatorLayout 到底是个什么玩意儿呢?它到底能帮我们做什么?我们要了解它,肯定是先看官方文档了。文档的第一句话就非常醒目&#xff1a…

高职网络系统管理比赛实例

同一交换机不同端口配置不同vlan,实现同一交换机内不同业务部门隔离。 在路由器中配置斜面的内容 1 输入enableRuijie>enable 2 第一次使用该交换机时,需要设置密码,然后再次确认密码 Please Set the password:*** Please check the pass…

掌握这10个Pandas函数,助你彻底了解数据集

10个帮助你完全理解数据集的Pandas 函数 长按关注《Python学研大本营》,加入读者群,分享更多精彩 扫码关注《Python学研大本营》,加入读者群,分享更多精彩 Pandas是用于探索性数据分析 (EDA)的最佳 Python 模块。 许多初级数据科…

如何在liunx下实现一个简单的程序?

目录:安装nano写代码保存退出查看文件内容生成可执行程序控制台输出你的代码博后小知识(gcc -g -o -c分别是什么意思?)安装nano [rootVM-8-11-centos ~]# yum install -y nano 写代码 [rootVM-8-11-centos ~]# nano no_die.c 保存…