FPGA falsh相关知识总结

1.存储容量是128M/8 Mb=16MB

2.有256个sector扇区*每个扇区64KB=16MB

3.一页=256Byte

4.页编程地址=0+256

5:在调试SPI时序的时候一定注意,miso和mosi两个管脚只要没发送数据就一定要悬空(处于高组态),不然指令会通过两个管脚进入主从机里面。

6.如果通过串口实现远程升级,都是按照页编程(256B),如果遇到256的非整数倍后面直接用FF代替(可行),用0代替(有待验证)。

7.flash的读指令必须要能正确读出数据,必须要首先在前几个状态机给出擦除操作。

8.编程底层flash驱动需要用到

STARTUPE2  原语

STARTUPE2  #(.PROG_USR("FALSE"), // Activate program event security feature. Requires encrypted bitstreams..SIM_CCLK_FREQ(0.0) // Set the Configuration Clock Frequency(ns) for simulation
)
STARTUPE2_inst
(.CFGCLK(), // 1-bit output: Configuration main clock output.CFGMCLK(), // 1-bit output: Configuration internal oscillator clock output.EOS(), // 1-bit output: Active high output signal indicating the End Of Startup..PREQ(), // 1-bit output: PROGRAM request to fabric output.CLK(0), // 1-bit input: User start-up clock input.GSR(0), // 1-bit input: Global Set/Reset input (GSR cannot be used for the port name).GTS(0), // 1-bit input: Global 3-state input (GTS cannot be used for the port name).KEYCLEARB(1), // 1-bit input: Clear AES Decrypter Key input from Battery-Backed RAM (BBRAM).PACK(1), // 1-bit input: PROGRAM acknowledge input.USRCCLKO(flash_clk), // 1-bit input: User CCLK input.USRCCLKTS(0), // 1-bit input: User CCLK 3-state enable input.USRDONEO(1), // 1-bit input: User DONE pin output control.USRDONETS(1) // 1-bit input: User DONE 3-state enable outpu
);

九:VIVADO 擦除flash 流程

1.MCS和PRM文件(如program就只需MCS即可)

2.完整的配置存储器设备

3.只选erase

4.其他默认不勾选

十:FPGA程序执行相关知识点

 1.目前,大多数FPGA芯片是基于 SRAM 的结构的, 而 SRAM 单元中的数据掉电就会丢失,因此系统上电后,必须要由配置电路将正确的配置数据加载到 SRAM 中,此后 FPGA 才能够正常的运行。

常见的配置芯片有EPCS 芯片 (EPCS4、EPCS8、EPCS16、EPCS64、EPCS128),还有通用的串行 SPI FLASH 芯片如 M25P40、 M25P16、 W25Q16 等。

配置(configuration)是对FPGA的内容进行编程的过程。每次上电后都需要进行配置是基于SRAM工艺FPGA的一个特点,也可以说是一个缺点。FPGA配置过程如下:

2.在线烧录程序文件(bit/elf)——相当于把程序放在SRAM去执行,掉电程序无。

3.固化——相当于把程序放在flash去,上电FPGA会自动去flash里面拿固化的程序(配置芯片),掉电程序依然有。

十一:远程升级,从gloden区跳转到updata区

1.远程升级的思路(实验成功):

在flash的0地址固化带有接收远程升级程序(如串口接收功能)/和往flash里面写数据功能且能引导到flash的固定地址的程序(如QSPI)/和接收跳转到flash的固定地址启动(利用原语)指令。

2:流程

设备上电——FPGA自动从flash的基地址拿先前固化好的程序——通过串口往falsh里面写升级程序,并且修改跳转flash地址(最新升级的新程序)的指令。

设备断电——在启动上电——FPGA自动去之前设定好的flah跳转地址拿最新的升级程序——如果拿取失败就会自动加载旧版固化在flash的程序。

3:工具

1.所需ip核:QSPI+UART+ARM架构cpu

2.首先往flah里面固化bit+elf(bootloader),可以从flash的地址0开始固化(mcs文件生成处可以选择)。

3.上电从flash拿合并程序,并运行bit+elf(bootloader)

4.在bootloader程序里的设置写flash的地址:就是意味着往flash的哪个地址去写并引导app程序的启动。

五.需要用到的原语(从golden区跳转到update区)

1.主要就是对原语的几个信号进行操作


//   ICAPE2    : In order to incorporate this function into the design,
//   Verilog   : the following instance declaration needs to be placed
//  instance   : in the body of the design code.  The instance name
// declaration : (ICAPE2_inst) and/or the port declarations within the
//    code     : parenthesis may be changed to properly reference and
//             : connect this function to the design.  All inputs
//             : and outputs must be connected.//  <-----Cut code below this line---->// ICAPE2: Internal Configuration Access Port//         Artix-7// Xilinx HDL Language Template, version 2019.1ICAPE2 #(.DEVICE_ID(0'h3651093),     // Specifies the pre-programmed Device ID value to be used for simulation// purposes..ICAP_WIDTH("X32"),         // Specifies the input and output data width..SIM_CFG_FILE_NAME("NONE")  // Specifies the Raw Bitstream (RBT) file to be parsed by the simulation// model.)ICAPE2_inst (.O(O),         // 32-bit output: Configuration data output bus.CLK(CLK),     // 1-bit input: Clock Input.CSIB(CSIB),   // 1-bit input: Active-Low ICAP Enable.I(I),         // 32-bit input: Configuration data input bus.RDWRB(RDWRB)  // 1-bit input: Read/Write Select input);// End of ICAPE2_inst instantiation

2.一定注意(如下图第四点是固化到falsh的update区的首地址(即是更新程序的mcs文件的首地址))——实测不需要在XDC里面约束这个地址

设定值的时候一定要是整数(如A00000=10MB)不然没法跳转到最新程序如(160160=1.37M)

3.还需主要 key信号:代表跳转命令需要电平1——0——1(按键)

4.还需主要:csib信号和rdwrb同时拉低。

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

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

相关文章

年终好价节入手什么数码合适?盘点23年度值得入手的数码好物

各位科技控和数码迷&#xff01;时间过得飞快&#xff0c;一眨眼2023年就要过去了&#xff0c;说到年底&#xff0c;当然少不了年终好价节啦&#xff01;这时候正是更新你的数码装备、升级生活品质的绝佳时机。别管你是不是科技控&#xff0c;工作狂还是生活追求者&#xff0c;…

JavaWeb服务器详解和后端分层解耦

JavaWeb HTTP协议请求数据格式响应数据格式协议解析 Web服务器请求响应请求参数的接收响应 分层解耦IOC&DI入门IOC详解 HTTP协议 超文本传输协议&#xff0c;规定了浏览器和服务器之间数据传输的规则 特点&#xff1a; 基于TCP协议&#xff1a;面向连接&#xff0c;安全 …

npm WARN npm npm does not support Node.js v13.9.0

Microsoft Windows [版本 10.0.19045.2965] (c) Microsoft Corporation。保留所有权利。C:\Users\Administrator>node -v v13.9.0C:\Users\Administrator>npm -v npm WARN npm npm does not support Node.js v13.9.0 npm WARN npm You should probably upgrade to a newe…

正则表达式回溯陷阱

一、匹配场景 判断一个句子是不是正规英文句子 text "I am a student" 一个正常的英文句子如上&#xff0c;英文单词 空格隔开 英文单词 多个英文字符 [a-zA-Z] 空格用 \s 表示 那么一个句子就是单词 空格&#xff08;一个或者多个&#xff0c;最后那个单词…

力扣:1419. 数青蛙

题目&#xff1a; 代码&#xff1a; class Solution { public:int minNumberOfFrogs(string croakOfFrogs){string s "croak";int ns.size();//首先创建一个哈希表来标明每个元素出现的次数&#xff01;vector<int>hash(n); //不用真的创建一个hash表用一个数…

40.0/jdbc/Java数据连接/jar包运用增删改

目录 40.1. 回顾 40.2. 正文 40.1 为什么需要jdbc 40.2 如何连接mysql数据库 40 .3 jdbc容易出现的错误 40.4 完成删除 40.5 完成修改 40.1. 回顾 1. 自联查询: 自己连接自己的表。注意:一定要为表起别名。 2. 嵌套查询: 把一个查询的结果作为另一个查询的条件值。 3. 组…

高效率:使用DBeaver连接spark-sql

提高运行效率一般采取底层使用spark引擎替换成hive引擎的方式提高效率&#xff0c;但替换引擎配置较为复杂考虑到兼容版本且容易出错&#xff0c;所以本篇将介绍使用DBeaver直接连接spark-sql快速操作hive数据库。 在spark目录下运行以下命令&#xff0c;创建一个SparkThirdSe…

计算机网络:网络层

0 本节主要内容 问题描述 解决思路 1 问题描述 两大问题&#xff08;重点&#xff0c;也是难点&#xff09;&#xff1a; 地址管理&#xff1b;路由选择。 1.1 子问题1&#xff1a;地址管理 网络上的这些主机和节点都需要使用一种规则来区分&#xff0c;就相当于是一种身…

数据可视化:用图表和图形展示数据

写在开头 在当今信息爆炸的时代,海量的数据如同一座沉默的宝库,等待着我们挖掘和理解。然而,这些庞大的数据集本身可能令人望而生畏。在这个时候,数据可视化成为了解数据、发现模式和传达信息的强大工具。本篇博客将带领你探索数据可视化的奇妙世界,学习如何在python中使…

【Java程序员面试专栏 专业技能篇 】Java SE核心面试指引(四):Java新特性

关于Java SE部分的核心知识进行一网打尽,包括四部分:基础知识考察、面向对象思想、核心机制策略、Java新特性,通过一篇文章串联面试重点,并且帮助加强日常基础知识的理解,全局思维导图如下所示 本篇Blog为第四部分:Java新特性,子节点表示追问或同级提问 Java8新特性…

第一百八十五回 如何禁止页面跟随手机自动旋转

文章目录 1. 概念介绍2. 使用方法2.1 全面禁止2.2 局部禁止3. 示例代码4. 内容总结我们在上一章回中介绍了"如何自定义Radio组件"相关的内容,本章回中将介绍 如何禁止页面随手机自动旋转.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 在手机默认设置下,手机…

1.ORB-SLAM3中如何保存多地图、关键帧、地图点到二进制文件中

1 保存多地图 1.1 为什么保存(视觉)地图 因为我们要去做导航&#xff0c;导航需要先验地图。因此需要保存地图供导航使用&#xff0c;下面来为大家讲解如何保存多地图。 1.2 保存多地图的主函数SaveAtlas 2051 mStrSaveAtlasToFile是配置文件中传递的参数&#xff1a; 这里我们…

jsoup登录日志平台后调企业微信机器人自动发送错误日志告警

一、需求&#xff1a;错误日志Top10告警发送 二、需求分解 jsoup实现登录&#xff0c;获取到cookie和token等用户鉴权信息获取接口相应的key值调用日志平台错误日志Top榜接口&#xff0c;查询到结果集调用企业微信机器人发送消息接口加上定时任务&#xff0c;可以实现定时发送…

11月30日作业

作业&#xff1a; 设计一个Per类&#xff0c;类中包含私有成员:姓名、年龄、指针成员身高、体重&#xff0c;再设计一个Stu类&#xff0c;类中包含私有成员:成绩、Per类对象p1&#xff0c;设计这两个类的构造函数、析构函数和拷贝构造函数。 #include <iostream>using n…

vue.js ——Vuex

基本概念 vue进行开发过程中有没有遇到这样一种场景&#xff0c;就是有些时候一些数据是一种通用的共享数据&#xff08;比如登录信息&#xff09;&#xff0c;那么这类数据在各个组件模块中可能都会用到&#xff0c;如果每个组件中都去后台重新获取那么势必会造成性能浪费&am…

嵌入式Linux:ARM驱动+QT应用+OpenCV人脸识别项目实现

一、前言&#xff1a; 这个项目主要分为两部分&#xff0c;客户端&#xff08;ARM板端&#xff09;负责利用OpenCV采集人脸数据&#xff0c;利用TCP将人脸数据发送给服务器&#xff0c;然后服务器根据人脸数据进行人脸识别&#xff0c;将识别后的结果返还给客户端&#xff0c;客…

Unity中Shader编译目标渲染器

文章目录 前言一、Unity在打包时&#xff0c;会把Shader编译成不同平台对应的代码我们在状态栏&#xff0c;可以看见我们目前所处于的目标平台 二、在Unity中&#xff0c;怎么指定目标平台1、#pragma only_renderers2、#pragma exclude_renderers 三、我们测试一下看看效果1、 …

C语言贪吃蛇(有详细注释)

这个贪吃蛇是在比特特训营里学到的&#xff0c;同时我还写了用EasyX图形库实现的图形化贪吃蛇&#xff0c;含有每个函数的实现以及游戏中各种细节的讲解&#xff0c;感兴趣的可以去看一看。 贪吃蛇小游戏 实现效果 以下就是源码&#xff0c;感兴趣的小伙伴可以cv自己玩一玩改…

Node.js+Express+Nodemon+Socket.IO构建Web实时通信

陈拓 2023/11/23-2023/11/27 1. 简介 Websocket WebSocket是一种在单个TCP连接上提供全双工通讯的协议。特别适合需要持续数据交换的服务&#xff0c;例如在线游戏、实时交易系统等。 Websocket与Ajax之间的区别 Ajax代表异步JavaScript和XML。它被用作一组Web开发技术&…

java实战(四):编写学生信息管理系统页面·

1.要求 编写程序 实现表格的输入和编辑功能。界面如下&#xff1a; 1、用户按插入键后&#xff0c;把学号、姓名和成绩插入到最后一行&#xff0c;序号显示当前的行号。 2、当用户选中表格的某一行时&#xff0c;按删除按钮&#xff0c;则这一行从表格中删除 3、编辑功能&am…