串口更新app程序(参考他人资料)

news2024/9/24 22:12:36

一:参考资料

1.选定镁光的falsh

Debug一下bootloader工程,串口只输出了一个SREC SPI Bootloader。单步调试发现,是XIsf_Initialize出错了,返回了1,程序直接退出了main函数。再继续分析,发现程序走的是Atmel的分支,没有走Micron的分支,打开xparameters.h一看,XPAR_XISF_FLASH_FAMILY的值为1,说明设置的serial_flash_family根本就没有生效!

2.

第二个地方就是,要点开Generate linker script看一下,bootloader是不是已配置为在BRAM里面运行,主程序是否是在DDR内存里面运行。如果不是,就要手动改过来。————————这里可以推测出来bootloader难道只能引导APP程序运行在BRAM里面 (因为SREC BootLoader是加载到BRAM运行的,所以确保其在BRAM)该段话就证明了——之前的猜想:SREC BootLoader函数只能将app程序(app程序可以放在DDR3里,也可以放在falsh里面可以用mig和qspi写进和读出到BRAM运行)引导如BRAM运行。

同理的

再烧写应用程序即之前的lwiptcp.elf (这个文件的代码大小为507KB,可以烧录到Flash,但其加上未定义变量,需要30几MB空间,所以需要加载到DDR中运行)注意: Image File选择lwiptcp.elf应用程序文件,Offset为之前设置的0x80000, 同时需要勾选Convert ELF to bootloadable SREC format and program,因为应用程序是通过转换为SREC格式保存在Flash中。使用SREC格式也导致了代码固化后加载时间极其漫长,如何优化关注我另外一篇文章。
 

3.第三个地方找了很久才发现,Program FPGA对话框里面默认的BRAM内容选的是bootloop,和那篇文章的差别就在这里!这里应该选择bootloader.elf才对!选择好了之后,点Program按钮合并Vivado的bit文件,以及Vitis bootloader工程的elf文件,生成download.bit。

4.下载download.bit文件到SPI Flash的0地址处:

5.下载主程序的elf文件到SPI Flash的非零地址处,注意勾选Convert ELF to SREC的复选框:

6.Microblaze不需要外部DDR3内存也能独立运行,用BRAM作运行内存,这样一来,Vitis编译出来的elf文件可以在Program FPGA对话框里面直接和Vivado的bit文件整合,生成download.bit,然后在Program Flash Memory中把download.bit文件烧到SPI Flash的0地址处,就可以上电开机运行了。不需要SREC SPI Bootloader。在这种情况下,程序代码和程序变量都是保存在BRAM里面的。
7. 当Microblaze需要运行文件系统,网络协议栈,例如lwip时,编译代码最终可能会高达几十MB,此时就需要通过SREC SPI Bootloader从SPI Flash加载elf到外部DDR运行

因为需要从SPI Flash读取应用文件,Vivado BD硬件需要添加 AXI Quad SPI IP, 配置如下:

8.

设置 FLASH_IMAGE_BASEADDR的offset (这个offset是在SPI Flash 存储应用程序的Flash偏移量)

外部Flash大小为16MByte, 我们设置前面大概8MB存放top_wrapper.bit 和 SREC BootLoader.elf, 后面存放app. 需要根据实际FPGA容量进行调整

二:总结

1.SREC SPI BOOtloader 只能将应用程序从flah拿到BRAM运行(不能拿到SDRAM运行)

2.bit文件还是需要icap原语来从falsh拿bit到SDRAM运行

3.应用程序大就可以在DDR3里面运行

4.程序小就可直接在BRAM 里面运行(速度还较DDR3快一些)

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

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

相关文章

2023.11.29 -hmzx电商平台建设项目 -核销主题阶段总结

目录 1.准备源数据 2.准备数仓工具进行源数据同步到ods层,本项目使用Datax 3.使用Datax完成数据同步前建表时的方案选择 3.1同步方式区别: 3.2存储格式和压缩区别: 4.在hive中创建表,共31个表 5.数仓概念 和 数仓建模方案 5.1数仓的基本概念 5.2 数仓建模方案 关系建模…

java论坛数据以及搜索接口实现

一. 内容简介 java论坛数据以及搜索接口实现 二. 软件环境 2.1 java 1.8 2.2 mysql Ver 8.0.13 for Win64 on x86_64 (MySQL Community Server - GPL) 2.3 IDEA ULTIMATE 2019.3 2.4d代码地址 三.主要流程 3.1 创建数据库,创建数据表 3.2 开始编写接口,并测…

C/C++不定参数的使用

文章目录 C语言的不定参C的不定参 C语言的不定参 C语言的不定参数最常见的应用示例就是printf函数&#xff0c;如下&#xff0c;参数列表中的...表示不定参数列表 #include <stdio.h> int printf(const char *format, ...);试着模拟实现C语言的printf函数 void myprin…

新手村之SQL——分组与子查询

1.GROUP BY GROUP BY 函数就是 SQL 中用来实现分组的函数&#xff0c;其用于结合聚合函数&#xff0c;能根据给定数据列的每个成员对查询结果进行分组统计&#xff0c;最终得到一个分组汇总表。 mysql> SELECT country, COUNT(country) AS teacher_count-> FROM teacher…

Linux系统部署Tale个人博客并发布到公网访问

文章目录 前言1. Tale网站搭建1.1 检查本地环境1.2 部署Tale个人博客系统1.3 启动Tale服务1.4 访问博客地址 2. Linux安装Cpolar内网穿透3. 创建Tale博客公网地址4. 使用公网地址访问Tale 前言 今天给大家带来一款基于 Java 语言的轻量级博客开源项目——Tale&#xff0c;Tale…

敏捷开发实现测试自动化的6个步骤

许多敏捷软件开发中的自动化测试的工作都失败了&#xff0c;或者并没有发挥它们最大的潜力。本文研究分析了自动化测试也许不能满足测试人员和其他利益相关者期望的两个主要原因&#xff0c;然后列举了六个能够避免陷入这些陷阱的步骤。以下是在敏捷环境中成功实现测试自动化的…

Linux系统iptables扩展

目录 一. iptables规则保存 1. 导出规则保存 2. 自动重载规则 ①. 当前用户生效 ②. 全局生效 二. 自定义链 1. 新建自定义链 2. 重命名自定义链 3. 添加自定义链规则 4. 调用自定义链规则 5. 删除自定义链 三. NAT 1. SNAT 2. DNAT 3. 实验 ①. 实验要求 ②. …

设计模式-创建型模式之原型、建造者设计模式

文章目录 七、原型模式八、建造者模式 七、原型模式 原型模式&#xff08;Prototype Pattern&#xff09;是用于创建重复的对象&#xff0c;同时又能保证性能。它提供了一种创建对象的最佳方式。 这种模式是实现了一个原型接口&#xff0c;该接口用于创建当前对象的克隆。当直…

C题目12:请写一个函数,判断一个数是否为质数,并在main函数中调用

一.每日小语 人的一切痛苦&#xff0c;本质上都是对自己的无能的愤怒。——王小波 自己思考 判断一个函数是否为质数&#xff0c;这个我在之前练过&#xff0c;我想至少两次&#xff0c;而这一次则是问我如何在main函数中调用&#xff0c;这个概念我不理解&#xff0c;所以我…

软件测试面试最全八股文

请你说一说测试用例的边界 参考回答&#xff1a; 边界值分析法就是对输入或输出的边界值进行测试的一种黑盒测试方法。通常边界值分析法是作为对等价类划分法的补充&#xff0c;这种情况下&#xff0c;其测试用例来自等价类的边界。 常见的边界值 1)对16-bit 的整数而言 32…

在gitlab上使用server_hooks

文章目录 1. 前置条件2. Git Hook2.1 Git Hook 分为两部分&#xff1a;本地和远程2.1.1 本地 Git Hook&#xff0c;由提交和合并等操作触发&#xff1a;2.1.2 远程 Git Hook&#xff0c;运行在网络操作上&#xff0c;例如接收推送的提交&#xff1a; 3. 操作步骤3.1 对所有的仓…

Linux 命令pwd

命令作用 pwd是Linux中一个非常有用而又十分简单的命令&#xff0c;pwd是词组print working directory的首字母缩写&#xff0c;即打印工作目录&#xff1b;工作目录就是你当前所处于的那个目录。 pwd始终以绝对路径的方式打印工作目录&#xff0c;即从根目录&#xff08;/&am…

半同步复制与MHA高可用架构设计

各位道友好&#xff0c;鼠鼠我呀校招刚通过了移动的面试 &#xff0c;但是安排的岗位是偏远县城里面的岗位&#xff0c;各位能给给建议吗&#xff1f;鼠鼠我啊真不想有时候变成销售员去卖产品&#xff01;&#xff01;&#xff01; 半同步复制与MHA高可用架构设计 一、半同步复…

力扣202题 快乐数 双指针算法

快乐数 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为&#xff1a; 对于一个正整数&#xff0c;每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1&#xff0c;也可能是 无限循环 但始终变不到 1。如果这个过程 结果为 1&#…

LeetCode(44)存在重复元素 II【哈希表】【简单】

目录 1.题目2.答案3.提交结果截图 链接&#xff1a; 存在重复元素 II 1.题目 给你一个整数数组 nums 和一个整数 k &#xff0c;判断数组中是否存在两个 不同的索引 i 和 j &#xff0c;满足 nums[i] nums[j] 且 abs(i - j) < k 。如果存在&#xff0c;返回 true &#xf…

.net-去重的几种情况

文章目录 前言1. int 类型的list 去重2. string类型的 list 去重3. T泛型 List去重4. 使用HashSet List去重5. 创建静态扩展方法 总结 前言 .net 去重的几种情况 1. int 类型的list 去重 // List<int> List<int> myList new List<int>(){ 100 , 200 ,100…

波奇学C++:C++11的可变参数模板和emplace

可变参数模板 // args是参数包 template<class T,class ...Args> void _ShowList(T value, Args... args) {cout << sizeof...(args) << endl; // 2cout << value << " ";/*_ShowList(args...);*/} int main() {_ShowList(1,2,3); re…

CSS 在性能优化方面的实践

前言 CSS&#xff08;层叠样式表&#xff09;是一种用于描述网页外观和格式的语言。随着网页变得越来越复杂&#xff0c;CSS文件的大小也随之增加&#xff0c;这可能会对网页性能产生负面 .box {width: 100px;height: 100px;transition: transform 0.3s; }.box:hover {transf…

算法通关村第一关—链表高频面试题(白银)

链表高频面试题 一、五种方法解决两个链表的第一个公共子节点的问题 面试 02.07.链表相交1.首先想到的是暴力解&#xff0c;将第一个链表中的每一个结点依次与第二个链表的进行比较&#xff0c;当出现相等的结点指针时&#xff0c;即为相交结点。虽然简单&#xff0c;但是时间…

SS6810R40V/1A 步进电机驱动芯片 替代ROHM BD68610EFV

SS6810R 是一款由 PWM 电流驱动的双极低功 耗电机驱动集成芯片。 SS6810R 有两路 H 桥驱 动&#xff0c;最大输出 40V /1A。输入接口采用 Pala-IN 的驱 动方式&#xff0c;电流衰减模式可选择为快衰减、慢衰减和 混合衰减&#xff0c;且可以任意设置快衰减与慢衰减的比 例…