基于FPGA的SPI_FLASH程序设计

SPI_FLASH简介

        

spi_flash是一种通用存储器,也称为SPI NOR Flash或SPI Flash。它使用SPI(Serial Peripheral Interface)接口进行通信,可以通过串行方式读写数据。spi_flash的特点是工作电压低,体积小,读写速度快,并且可擦写次数很大。因此,它被广泛应用于嵌入式系统中,用于存储程序代码、配置信息和数据。

spi_flash的存储单元由位线和字线组成,可以以字节为单位进行读写操作。它通常具有多个扇区,每个扇区又包含许多块。spi_flash的读操作是通过发送地址和读指令来获取数据,写操作是通过发送地址、写指令和数据来存储数据。

spi_flash的容量可以从几十KB到几GB不等。它可以通过软件进行编程,并且支持批量擦除和写入操作。此外,spi_flash还具有保护数据的功能,可以设置写保护位来防止误操作。

spi_flash的接口标准化,可以与许多微控制器和处理器进行连接。它可用于存储启动代码、操作系统、驱动程序和各种应用程序。在嵌入式系统中,spi_flash通常用作存储设备的主要存储介质,提供快速、可靠的数据存储和读取功能。

SPI_FLASH的通信协议

        它支持 Standard SPI、 Dual SPI Quad SPI 三种 SPI 协议通信方 式,最大传输数据速率可达
50MB/S

SPI_FLASH的存储容量 

 我们这里以W25Q128FV芯片为例子进行介绍,如下图所示。

这款芯片的总容量是128Mbit,这个存储阵列被划分为256个BLOCK(64KB),每一个BLOCK块划分为16个Sector(4KB) ,每一个Sector是包含16个page(256个字节)。

SPI_FLASH的指令介绍

 WR_EN指令介绍

WRENWriteEnable):使能指令(06h),写使能指令可将 Flash 芯片设置为写使能锁存(WEL)状态; 在每一次页写操作(PP)、扇区擦除(SE)、全擦除(BE)和写状态寄存器(WRSR)操作之前,都需要先进行写使 能指令写入操作。操作时序为先拉低片选信号,写入写使能指令,在指令写入过程中,片选信号始终保持 低电平,指令写入完成后,将片选信号拉高。

 READ STATUS REGISTER指令介绍

读取状态寄存器指令( 05h ),这条指令的作用就是指令允许读取状态 寄存器。状态寄存器可以在任何时候读取,即使在编程、擦除或写入状态寄存器循环进行操作时也是可以的。每次读取BUSY状态值来判断芯片是否处于工作状态还是空闲状态,从而更好的执行后续命令操作。

 

Page program指令介绍  

页编辑指令( 02h ),可以理解成写数据指令,当执行页编辑指令时就可以往对应的扇区对应的页中写入数据,一次性最多写入 256 个字节数据。 注意一点,当整页写数据时你可以不必写满 256 个字节,小于 256 个字节也是可以的,但是不能超过 256 个字节数据,因为超过 256 个字节,多余的数据就会返回这一页的开头重新写入,这样就会覆盖之前已经写入的数据

 

 

 READ DATA指令介绍

 

读取数据指令( 03h ),当 FLASH 中被写入数据后我们可以使用 ReadData 指令将 数据读取出来。操作过程就是发送命令字+地址,然后flash芯片就会读取数据。

 

 BLOCK ERASE(52h)指令介绍

 

扇区擦除指令( 52h ),扇区擦除指令是将 Flash 芯片中的被选中扇区的所有存储单 元设置为全 1 ,在 Flash 芯片写入扇区擦出指令之前,需要先写入写使能 (WREN) 指令,将芯片设置为写使 能锁存(WEL) 状态;随后要拉低片选信号,写入扇区擦除指令、扇区地址、页地址和字节地址,在指令、 地址写入过程中,片选信号始终保持低电平,待指令、地址被芯片锁存后,将片选信号拉高;扇区擦除指 令、地址被锁存并执行后,需要等待一个完整的扇区擦除周期(tSE) ,才能完成 Flash 芯片的扇区擦除操 作。

 

 备注:擦除命令还有其他几种,这里不再介绍。

SPI_FLASH指令如何操作 

 前面介绍的这些指令就是实际操作spi_flash时要用到的指令,具体如何操作呢?

 对spi_flash操作主要就是分为2个部分:写操作和读操作。

写操作部分

  1. 对空白的地址进行写操作

      第一步:执行写使能命令

       第二步:执行写命令

      第三步:执行读状态寄存器命令(判断flash芯片是否处于空闲状态)  如果读取的状态寄存器为空闲本次写就结束;如果读取状态寄存器为非空闲,继续发送本条命令,直达读取的状态寄存器为空闲 为止。

      2.对写过数据的地址重新进行写操作

第一步:执行写使能命令

第二步:执行擦除命令

第三步:执行读状态寄存器命令(判断flash芯片是否处于空闲状态)  如果读取的状态寄存器为空闲本次写就结束;如果读取状态寄存器为非空闲,继续发送本条命令,直达读取的状态寄存器为空闲 为止。

第四步:执行写使能命令

第五步:执行写命令

 第六步:执行读状态寄存器命令(判断flash芯片是否处于空闲状态)  如果读取的状态寄存器为空闲本次写就结束;如果读取状态寄存器为非空闲,继续发送本条命令,直达读取的状态寄存器为空闲 为止。

 读操作部分

         执行读命令。

系统程序框架设计

 

 本系统通过串口下发相关指令,实时的对SPI_FALSH芯片进行读写操作,从而实现简单的人机交互功能,使用者操作起来更加直观和便利。

上板 实验结果

 首先通过串口下发写操作对spi_flash写入256个递增数据,然后下发回读命令,从spi_flash芯片中将写入的数据读出,最后通过串口发送回传到PC端的串口助手进行显示。

 

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

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

相关文章

梨花带雨网页音乐播放器二开优化修复美化版全开源版本源码

源码简介 最新梨花带雨网页音乐播放器二开优化修复美化版全开源版本源码下载 梨花带雨播放器基于thinkphp6开发的XPlayerHTML5网页播放器前台控制面板,支持多音乐平台音乐解析。二开内容:修复播放器接口问题,把接口本地化,但是集成外链播放器…

C++的并发世界(三)——线程对象生命周期

0.案例代码 先看下面一个例子&#xff1a; #include <iostream> #include <thread>void ThreadMain() {std::cout << "begin sub thread:" << std::this_thread::get_id()<<std::endl;for (int i 0; i < 10; i){std::cout <&…

矩阵间关系的建立

参考文献 2-D Compressive Sensing-Based Visually Secure Multilevel Image Encryption Scheme 加密整体流程如下: 我们关注左上角这一部分: 如何在两个图像之间构建关系,当然是借助第3个矩阵。 A. Establish Relationships Between Different Images 简单说明如下: …

Android的图片加载框架

Android的图片加载框架 为什么要使用图片加载框架&#xff1f;图片加载框架1. Universal Image Loader [https://github.com/nostra13/Android-Universal-Image-Loader](https://github.com/nostra13/Android-Universal-Image-Loader)2. Glide [https://muyangmin.github.io/gl…

美摄科技AI智能图像矫正解决方案

图像已经成为了企业传播信息、展示产品的重要媒介&#xff0c;在日常拍摄过程中&#xff0c;由于摄影技巧的限制和拍摄环境的复杂多变&#xff0c;许多企业面临着图像内容倾斜、构图效果不佳等挑战&#xff0c;这无疑给企业的形象展示和信息传递带来了不小的困扰。 美摄科技深…

CentOS7安装flink1.17完全分布式

前提条件 准备三台CenOS7机器&#xff0c;主机名称&#xff0c;例如&#xff1a;node2&#xff0c;node3&#xff0c;node4 三台机器安装好jdk8&#xff0c;通常情况下&#xff0c;flink需要结合hadoop处理大数据问题&#xff0c;建议先安装hadoop&#xff0c;可参考 hadoop安…

顶顶通呼叫中心中间件-话术编辑器机器人转人工坐席配置(mod_cti基于FreeSWITCH)

顶顶通呼叫中心中间件-话术编辑器机器人转人工座席配置(mod_cti基于FreeSWITCH) 配置方法 一、ACD排队转接 二、伴随转接 比如你设置的通知规则是任意满足一个就通知那么通话时间设置为10 秒那样他只要通话时间到10秒他就会转坐席。 如果要转人工的时侯转手机可以这样配置 把…

用于HUD平视显示器的控制芯片:S2D13V40

一款利用汽车抬头显示技术用于HUD平视显示器的控制芯片:S2D13V40。HUD的全称是Head Up Display&#xff0c;即平视显示器&#xff0c;以前应用于军用飞机上&#xff0c;旨在降低飞行员需要低头查看仪表的频率。起初&#xff0c;HUD通过光学原理&#xff0c;将驾驶相关的信息投射…

53 v-bind 和 v-model 的实现和区别

前言 这个主要的来源是 偶尔的情况下 出现的问题 就比如是 el-select 中选择组件之后, 视图不回显, 然后 model 不更新等等 这个 其实就是 vue 中 视图 -> 模型 的数据同步, 我们通常意义上的处理一般是通过 模型 -> 数据 的数据同步, 比如 我们代码里面更新了 model.…

pygame--坦克大战(二)

加载敌方坦克 敌方坦克的方向是随机的&#xff0c;使用随机数生成。 初始化敌方坦克。 class EnemyTank(Tank):def __init__(self,left,top,speed):self.images {U: pygame.image.load(img/enemy1U.gif),D: pygame.image.load(img/enemy1D.gif),L: pygame.image.load(img/e…

10_MVC

文章目录 JSON常用的JSON解析Jackson的常规使用指定日期格式 MVC设计模式MVC介绍前后端分离案例&#xff08;开发与Json相关接口&#xff09; 三层架构三层架构介绍 JSON JSON&#xff08;JavaScript Object Notation&#xff09; 是一种轻量级的数据交换格式&#xff0c;是存…

python 爱心代码

效果图&#xff1a; 代码&#xff1a; import random from math import sin, cos, pi, log from tkinter import *CANVAS_WIDTH 640 CANVAS_HEIGHT 480 CANVAS_CENTER_X CANVAS_WIDTH / 2 CANVAS_CENTER_Y CANVAS_HEIGHT / 2 IMAGE_ENLARGE 11 # 设置颜色 HEART_COLOR &…

QT中的文件操作QFile、QDataStream、QTextStream、QBuffer

文件操作概述 1、Qt中IO操作的处理方式 &#xff08;1&#xff09;、Qt通过统一的接口简化了文件与外部设备的操作方式 &#xff08;2&#xff09;、Qt中的文件被看做是一种特殊的外部设备 &#xff08;3&#xff09;、Qt中的文件操作与外部设备操作相同 2、IO操作中的关键…

Topaz Video AI for Mac v5.0.0激活版 视频画质增强软件

Topaz Video AI for Mac是一款功能强大的视频处理软件&#xff0c;专为Mac用户设计&#xff0c;旨在通过人工智能技术为视频编辑和增强提供卓越的功能。这款软件利用先进的算法和深度学习技术&#xff0c;能够自动识别和分析视频中的各个元素&#xff0c;并进行智能修复和增强&…

DAY17 平衡二叉树二叉树所有路径左叶子之和

12.平衡二叉树 给定一个二叉树&#xff0c;判断它是否是 平衡二叉树? 平衡二叉树是一棵空树或它的左右两个子树的高度差的绝对值不超过1&#xff0c;并且左右两个子树都是一棵平衡二叉树。它是一棵空树或它的左右两个子树的高度差的绝对值不超过1&#xff0c;并且左右两个子…

ZKP价值链路的垂直整合

1. ZKP proof生命周期 从ZKP&#xff08;zero-knowledge proof&#xff09;生命周期&#xff0c;先看围绕ZKP的价值链路形成&#xff1a; 1&#xff09;User intent用户意图&#xff1a;以某用户意图为起点&#xff0c;如想要在某zk-rollup上swap某token、证明其身份、执行某…

EasyExcel 模板导出excel、合并单元格及单元格样式设置。 Freemarker导出word 合并单元格

xls文件&#xff1a; 后端代码&#xff1a; InputStream filePath this.getClass().getClassLoader().getResourceAsStream(templateFile);// 根据模板文件生成目标文件ExcelWriter excelWriter EasyExcel.write(orgInfo.getFilename()).excelType(ExcelTypeEnum.XLS).withTe…

element-ui badge 组件源码分享

今日简单分享 badge 组件的源码实现&#xff0c;主要从以下两个方面&#xff1a; 1、badge 组件页面结构 2、badge 组件属性 一、badge 组件页面结构 二、badge 组件属性 补充几个标签的用途&#xff1a; sub&#xff1a;下标、sup&#xff1a;上标、var 变量 代码如下&am…

docker搭建CI/CD环境配置过程中的常见问题

一、Jenkins 1、pull镜像问题 docker pull jenkins/jenkins:lts Using default tag: latest Trying to pull repository docker.io/library/centos ... Get https://registry-1.docker.io/v2/library/centos/manifests/latest: Get https://auth.docker.io/token?scoperepo…

端点攻击剖析:网络攻击如何破坏企业网络

为了实现真正有效的网络安全态势&#xff0c;将公司的所有设备作为网络设备进行保护至关重要。攻击者可以将任何端点&#xff08;电话、计算机、虚拟机、嵌入式设备、服务器、POS 终端&#xff09;变成进入组织的入口点。 未受保护的端点是恶意行为者的主要攻击媒介&#xff0…