基于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端的串口助手进行显示。

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

使用SpringBoot实现的登录注册后端功能

1、系统演示视频(演示视频) 2、需要交流和学习请联系

高级IO/多路转接-select/poll(1)

概念背景 IO的本质就是输入输出 刚开始学网络的时候,我们简单的写过一些网络服务,其中用到了read,write这样的接口,当时我们用的就是基础IO,高级IO主要就是效率问题。 我们在应用层调用read&&write的时候&…

elementui 实现一个固定位置的Pagination(分页)组件

系列文章目录 一、elementui 导航菜单栏和Breadcrumb 面包屑关联 二、elementui 左侧导航菜单栏与main区域联动 三、elementui 中设置图片的高度并支持PC和手机自适应 四、 elementui 实现一个固定位置的Pagination(分页)组件 文章目录 系列文章目录…

【css】使用display:inline-block后,元素间存在4px的间隔

问题:在本地项目中使用【display: inline-block】,元素间存在4px间隔。打包后发布到外网又不存在这个问题了。 归根结底这是一个西文排版的问题,英文有空格作为词分界,而中文则没有。 此时的元素具有文本属性,只要标签…

CNAS软件测试公司有什么好处?如何选择靠谱的软件测试公司?

CNAS认可是中国合格评定国家认可委员会的英文缩写,由国家认证认可监督管理委员会批准设立并授权的国家认可机构,统一负责对认证机构、实验室和检验机构等相关机构的认可工作。 在软件测试行业,CNAS认可具有重要意义。它标志着一个软件测试公…

uniapp android 原生插件封装--入门篇

本文将介绍uniapp 插件封装官方例子的搭建,运行。和注意事项,避坑 1、文档地址:简介 | uni小程序SDK 开发者须知 | uni小程序SDK Android平台第三方插件开发指导 - DCloud问答 这个介绍插件与原生的架构 2、下载官方示例:百度…

JAX深度学习库入门

JAX简介 https://www.bilibili.com/video/BV1Sb4y1b7rK/?spm_id_from333.999.0.0&vd_sourceb2549fdee562c700f2b1f3f49065201b JAX is NumPy wiht Autograd , XLA and Composable (function) transformations, brought together for high-performance machine learning …

hive词频统计---文件始终上传不来

目录 准备工作: 文件内容: 创建数据库及表 将文件上传到:上传到/user/hive/warehouse/db1.db/t_word目录下 hive里面查询,始终报错:(直接查询也是不行) 解决方案: 准备工作&am…

【Django学习笔记(三)】BootStrap介绍

BootStrap介绍 前言正文1、BootStrap 快速了解2、初识BootStrap2.1 下载地址2.2 创建目录2.3 引入BootStrap2.4 使用BootStrap 3、BootStrap 组件&样式3.1 导航条3.2 栅格系统3.3 container3.3.1 container3.3.2 container-fluid 3.4 面板3.5 媒体对象3.6 分页3.7 图标3.7.…

【协议篇:Http与Https】

1. Http 1.1 Http的定义 超文本传输协议(Hypertext Transfer Protocol,HTTP)是用于分布式、协作式和超媒体信息系统的应用层协议。它是互联网上最广泛应用的数据通信协议之一,尤其对于万维网(WWW)服务而言…

SQLite下一代查询规划器(十)

返回:SQLite—系列文章目录 上一篇:SQLite 查询优化器概述(九) 下一篇:SQLite—系列文章目录 1. 引言 “查询规划器”的任务是弄清楚 找出完成 SQL 语句的最佳算法或“查询计划”。 从 SQLite 版本 3.8.0 &am…

Redis的值有5种数据结构,不同数据结构的使用场景是什么?

文章目录 字符串缓存计数共享Session限速 哈希缓存 列表消息队列文章列表栈队列有限集合 集合标签抽奖社交需求 有序集合排行榜系统 字符串 缓存 (1)使用原生字符类型缓存 优点:简单直观,每个属性都支持更新操作 缺点&#xff1…

vue2源码解析——vue中如何进行依赖收集、响应式原理

vue每个组件实例vm都有一个渲染watcher。每个响应式对象的属性key都有一个dep对象。所谓的依赖收集,就是让每个属性记住它依赖的watcher。但是属性可能用在多个模板里,所以,一个属性可能对应多个watcher。因此,在vue2中&#xff0…

基于单片机的超声波测距仪设计_kaic

摘 要 如今社会持续深化转型,在人工智能领域,传感器采集外部数据,经过处理器对数 据运算和处理,从而实现相应的功能。比如自动驾驶技术中,超声波传感器应用广泛, 超声波是一种频率在 20khz 以上的声波&…

如何保护IP地址?安全匿名上网的方法

当互联网成为每个家庭的重要组成部分后,IP地址就成了你的虚拟地址。您的请求从该地址开始,然后 Internet 将消息发送回该地址。那么,您担心您的地址被泄露吗? 对于安全意识高或者某些业务需求的用户,如果您正在寻找保护…

Zabbix6 - Web管理网络拓扑/端口流量监控配置手册

Zabbix6 - Web管理网络拓扑/端口流量监控配置手册 概述: 1)Zabbix能监视各种网络参数,保证服务器系统的安全运营;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。 Zabbix由两部分构成,Zabbix Server与可选组件Zabbix Agent。通过C/S模式采集数据,通过B…

WEB 工程路径

WEB 工程路径 相对路径 使用相对路径来解决, 一个非常重要的规则:页面所有的相对路径,在默认情况下,都会参考当前浏览器地址栏的路径 http://ip:port/工程名/ 资源来进行跳转。 相对路径带来的问题 如上图,若在a.h…

MySQL进阶-----前缀索引、单例与联合索引

目录 前言 一、前缀索引 1. 语法 2. 如何选择前缀长度 3. 前缀索引的查询流程 二、单列索引与联合索引 三、索引设计原则 前言 本期是MySQL进阶篇当中索引的最后一期内容,这里我们主要接着上一期继续讲解前缀索引、单例与联合索引。(上一期链接&…

02 Python进阶:CGI编程

什么是CGI CGI是通用网关接口(Common Gateway Interface)的缩写,它是一种标准协议,用于Web服务器执行外部程序或脚本与Web浏览器进行交互。通过CGI,Web服务器能够动态生成网页内容,处理用户提交的表单数据…

从零开始 使用OMNET++结合VEINS,INET和SUMO的联合仿真

背景知识 当我们探索未来的交通系统和智能交通解决方案时,车辆到一切(Vehicle-to-Everything, V2X)通信技术显得尤为重要。V2X是指在车辆与车辆(V2V)、车辆与基础设施(V2I)、车辆与行人&#x…