【FPGA】FPGA实现SPI协议读写FLASH(一)----- M25P16操作概述

news2024/11/18 17:28:28

文章目录

  • 一、FLASH介绍(M25P16)
    • 1、M25P16概述
    • 2、SPI模式
    • 3、存储结构
    • 4、指令集
    • 5、时间参数
  • 二、M25P16工作原理
  • 三、M25P16指令操作
    • 1、页编程 (PP)
    • 2、扇区擦除和整块擦除 (SE and BE)
    • 3、写使能 (WREN)
    • 4、读ID(RDID)
    • 5、读状态寄存器(RDSR)
    • 6、读数据(READ)

写在前面:
FPGA实现SPI协议读写FLASH系列相关文章:
SPI通信协议

本项目中所使用的开发板型号:Cyclone IV E (EP4CE6F17C8),FLASH型号:M25P16

一、FLASH介绍(M25P16)

1、M25P16概述

M25P16是一款带有先进写保护机制和高速SPI总线访问的串行Flash存储器。M25P16特点如下:

  • 存储结构:16M Bit(2M Byte)的存储空间,一共32个扇区(sector),每个扇区256页,每页256字节。
  • SPI总线兼容的串行接口。
  • 可以单扇区擦除,也可以整块擦除。
  • 可以同时编程1~256字节,页编程速率高达256Byte/1.4ms,即写入一页数据需要1.4ms。
  • 数据保存至少20年。
  • 支持SPI工作模式0和3。

M25P16引脚图如下:

在这里插入图片描述
在这里插入图片描述
C: 时钟信号,相当于SPI总线的SCLK。
D: 数据输入,相当于SPI总线的主机输出、从机输入MOSI。
Q: 数据输出,相当于SPI总线的主机输入、从机输出MISO。
S#: 片选信号,相当于SPI总线的片选信号CS_N。
HOLD: 在选中期间期间输出高阻态,实际上比较像SDRAM的“掩码”。
W#: 写保护,低电平有效,在写保护有效时无法写入数据。
VCC: 电源。
VSS : 电源地。

2、SPI模式

在这里插入图片描述
在这里插入图片描述

3、存储结构

M25P16一共2M Byte字节的存储空间,分32个扇区(SECTOR),每个扇区256页(PAGE),每页256字节(BYTE)。每个字节的的存储地址由扇区地址(8bit)+页地址(8bit)+字节地址(8bit)构成。
在这里插入图片描述

4、指令集

在本项目中只用到WREN指令、SE指令、RDSR指令、PP指令、RDID指令、READ指令即可。

在这里插入图片描述

5、时间参数

M25P16支持频率如下:
在这里插入图片描述
页写, 全擦除,扇区擦除等指令在发出后,仍需要一定的时间才能真正执行完,各个指令所需的时间如下:
在这里插入图片描述
两个指令之间需要间隔一定的时间(比如发送全擦除指令前需要发送写使能指令,在这两个指令之间就需要间隔一定的时间),具体时间如下:
在这里插入图片描述

二、M25P16工作原理

M25P16写入一个字节数据需写使能(WREN)和写入(PP)指令,采用这两个指令实现单页编程。对于某个单字节空间的操作,在使用PP指令之前需要对其擦除(FFh)。擦除操作可通过单块擦除指令(SE)和整块擦除(BE)来完成。擦除之前需要先执行WREN指令。

当片选信号被拉为低电平,在时钟信号的第一个下降沿开始采样数据输入信号。每个指令序列都是以单字节指令代码开头,紧接着就是地址或数据。在读取数据、快速读取数据、读状态寄存器、读标识和读电子签名时,数据输出序列紧随输入指令序列。当数据输出序列的所有数据位都输出后,片选信号置为高电平。而在页数据写入、单块擦除、整块擦除、写状态寄存器、写使能和写无效时,片选信号必须在一个字节内置为高电平。否则,指令不执行。也就是说,拉低片选信号后,时钟信号必须是8的整数倍。在写状态寄存器间期、数据写入周期或者擦除周期,则忽略任何对存储空间的访问,并不会对这些周期产生影响。

三、M25P16指令操作

1、页编程 (PP)

要发送一个数据字节,需要两个指令:写使能指令(WREN)和页编程指令(PP),然后是内部页编程周期(持续时间为tPP)。Page Program (PP)指令允许一次编程最多256字节(将位从1改为0),前提是它们位于同一内存页上的连续地址中。

2、扇区擦除和整块擦除 (SE and BE)

页程序(PP)指令允许位从1重置为0。在此之前,需要将内存字节全部擦除为FFh。这既可以使用扇区擦除指令(SE)实现擦除一个扇区,也可以使用整块擦除指令(BE)实现整块擦除。发送完擦除指令后就进入擦除周期(持续时间tSE或tBE)。发送擦除指令之前必须先发送写使能指令。

3、写使能 (WREN)

写使能(WREN) 指令用于设置内部写使能锁存器位。在页编程(PP)、扇区擦除(SE)、整块擦除(BE)和写状态寄存器(WRSR)之前,必须先执行写使能。当片选信号拉低后,就开始执行写使能指令,接着传输指令。指令发送完后,片选信号置为高电平。

写使能时序图如下:

在这里插入图片描述

4、读ID(RDID)

Read Identification (RDID)指令允许读取8位的制造商标识,然后读取两个字节的设备标识。设备标识由设备制造商指定,第一个字节表示内存类型(20h),第二个字节表示内存类型(20h),第三个字节表示设备的内存容量(15h)。
在这里插入图片描述
读ID时序图如下:

在这里插入图片描述

5、读状态寄存器(RDSR)

读取状态寄存器(RDSR)指令允许读取状态寄存器。状态寄存器可以在任何时候被读取,即使是在页编程、擦除或写状态寄存器周期正在进行。当其中一个循环正在进行时,建议检查WIP位,然后再向设备发送新指令。
在这里插入图片描述
WIP: WIP (Write In Progress)位表示内存是否处于写状态寄存器、页编程或擦除周期。当设置为1时,表示设备处于工作状态,当设置为0时,表示设备处于空闲状态。
WEL: WEL (Write Enable Latch)位表示内部Write Enable Latch的状态。当设置为1时,内部写使能被设置,当设置为0时,表示没有接收写状态寄存器,页编程或擦除指令。
BP2、BP1、BP0: 块保护(BP2,BP1, BP0)位是非易失性的。它们定义了被软件保护的区域的大小
编程和擦除指令。这些位是用写状态寄存器(WRSR)指令写的。

读状态寄存器时序图如下:

在这里插入图片描述

6、读数据(READ)

首先通过驱动片选信号来选择设备,片选信号低有效。读取数据的指令字节(READ)指令后面跟着一个3字节的地址(A23-A0),每个位在串行时钟(SCLK)的上升沿期间被锁存。然后,在串行数据输出(Q)上输出数据。

读数据时序图如下:

在这里插入图片描述

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

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

相关文章

使用c#将aj-report桌面化:1.winform嵌入浏览器

说到底,aj-report是个工具,我想大多数人还是想快速使用它来创建一个可以展示的工具。通过之前的章节,你应该可以制作自己的报表页面了,下面我们来看看怎么把aj-report包装成一个桌面能够运行的软件。 当然作为扩展开发,受开源协议限制,我们不能大规模修改aj-report的源代…

【毕业设计】深度学习图像修复算法研究与实现 - python

文章目录1 前言2 什么是图像内容填充修复3 原理分析3.1 第一步:将图像理解为一个概率分布的样本3.2 补全图像3.3 快速生成假图像3.4 生成对抗网络(Generative Adversarial Net, GAN) 的架构3.5 使用G(z)生成伪图像4 在Tensorflow上构建DCGANs5 最后1 前言 &#x1…

PC_OS中断/中断屏蔽字

文章目录程序中断🎃中断概念中断功能(作用)中断请求中断源中断分类外中断非屏蔽中断和可屏蔽中断陷入(内中断)硬件中断和软件中断关系整理🎈中断判优🎈中断优先级CPU响应中断的条件外中断实现思路🎈中断隐指令 及其工作①关中断②…

下一个倒下的是不是Genesis

今日,一个关于“Genesis今晚破产”的传言在各个社交平台传播,包括行业的KOL也在讨论这个事情,认为Genesis或存在偿付能力问题,该公司将于美国东部时间11月17日8:00am与债权人通话以解释情况。若消息属实,Ge…

【AGC】flutter之agconnect_crash在ios上崩溃

问题背景 flutter agconnect_crash-1.2.0300 运行在ios平台上,出现了如下这个崩溃 NSInvalidArgumentException: *** [NSJSONSerialization dataWithJSONObject:options:error:]: value parameter is nil 0 CoreFoundation 0x00000001830d005c 0x183037000 62678…

视频讲解vue2基础之渲染v-if/v-show/v-for/v-html

大家好,我是你们的老朋友lqj_本人,最近一周没有更新文章了,是因为最近学校有一些活动比赛,也有一部分原因就是我在录制一些关于前端方面的视频,涉及到的领域主要一前端,比如:H5开发,…

项目经理如何搞懂难缠的客户【静说】

作为乙方的项目经理,是否经常遇见难缠的客户,现环境下,大部分都是甲方强势,乙方弱势,双方处于一种不对等的基础上,项目经理如何生产,成功交付项目呢? 流程机制上如何应对&#xff1…

计算机毕业设计jsp教师课堂教学评价系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 教师课堂教学评价系统 是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql&#xff0c…

智慧公交解决方案-最新全套文件

智慧公交解决方案-最新全套文件一、建设背景二、思路架构三、建设方案3大能力:1、数据驱动的智慧公交全息感知能力2、精细化精准化的公交健康诊断能力3、高品质的公交运营组织能力6大系统:1、公交线网健康诊断系统2、职能部门指挥决策支持系统3、公共出行…

Spring读取.xml和通过Java类配置对比

Spring读取配置文件获取容器,通过容器获得javaBean演示 1.创建一个空项目 配置项目JDK 新建module 选择Maven项目 注意路径 pom.xml文件 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"…

C实现扫雷小游戏(简易版)

你知道&#xff0c;有些鸟儿是注定不会被关在牢笼里的&#xff0c;它们的每一片羽毛都闪耀着自由的光辉。——《肖申克的救赎》 目录 1、设计框架 2、设计流程 2.1菜单 2.2初始化雷阵 2.3生成雷 2.4玩家输入坐标 2.5显示有多少个雷 3、所有程序的源码 3.1game.h 3.2…

Slimming剪枝方法

本文参考&#xff1a;5-剪枝后模型参数赋值_哔哩哔哩_bilibiliz https://github.com/foolwood/pytorch-slimming 一、模型剪枝理论说明 论文&#xff1a;Learning Efficient Convolutional Networks through Network Slimming &#xff08;1&#xff09;卷积后得到多个特征图…

通过逻辑回归和感知器算法对乳腺癌数据集breastCancer和鸢尾花数据集iris进行线性分类

逻辑回归和感知器算法进行线性分类 代码使用了LogisticRegression和Perceptron两种分类方法 # 使用LogisticRegreeion分类器学习和测试 lr LogisticRegression() lr.fit(X_train_scaler, y_train) y_pred_lr lr.predict(X_test_scaler)#定义感知机 perceptron Perceptron(…

N3-PEG-ALD,Azide-PEG-Aldehyde,醛基-聚乙二醇-叠氮

1、名称 英文&#xff1a;N3-PEG-ALD&#xff0c;Azide-PEG-Aldehyde 中文&#xff1a;叠氮-聚乙二醇-醛基 2、CAS编号&#xff1a;N/A 3、所属分类&#xff1a;Aldehyde / Acetal PEG Azide PEG 4、分子量&#xff1a;可定制&#xff0c;5000 N3-PEG-ALD、10000 叠氮-PEG…

用html做一个漂亮的网站【茶文化12页】期末网页制作 HTML+CSS网页设计实例 企业文化网站制作

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

【仿牛客网笔记】项目进阶,构建安全高效的企业服务——Spring Security

https://spring.io/projects/spring-security 认证判断用户有没有登录。 授权 是访问有没有访问的权限 Spring MVC 的核心组件是DispatcherServlet&#xff0c;所有的组件都是交给DispatcherServlet处理&#xff0c;然后将请求分发给控制器&#xff0c;具体由某个控制器控制请求…

如何在微信上制作小程序?【制作小程序的方式】

很多人想知道如何在微信上制作小程序&#xff0c;毕竟小程序现在已经成为了我们每天都会使用到的轻应用。在微信上制作小程序之前&#xff0c;要先了解自己想要做出什么的小程序&#xff0c;才能下手开展小程序制作。那么下面就介绍三种如何在微信上制作小程序的方式。 1、懂编…

彻底搞懂SwaggerKnife4j使用方法

&#xff08;一&#xff09;、准备 1、SpringBoot项目 说明&#xff1a;前后端分离前提下&#xff0c;前端是一个独立项目&#xff0c;因此该SpringBoot无需添加Thymeleaf依赖&#xff01; 2、vo类 Employee类&#xff1a; package com.soft.vo;import java.util.Date;publ…

Hadoop与Spark的使用,HBase分布式数据库安装及操作实验

docker pull harisekhon/hbase:1.3 docker run -d --name hbase001 -p 16010:16010 harisekhon/hbase:1.3 进入环境 docker exec -it hbase001 bash hbase shell 按照一个特定的值来查找 hbase(main):003:0> scan students,{FILTER>"ValueFilter(,binary:20202…

Matplotlib教程一

文章目录一.简介二.Mapltlib的简单使用2.1 Pylot的API2.2 Pylab模块2.3 matplotlib简单绘图三.Mapltlib进阶使用3.1 面向对象思想画图3.2 Figure类3.3 Axes类3.4 画布上创建多个子图3.5 图中添加网格3.6 设置图片轴线3.7 保存图片一.简介 matplotlib是最初由John D.Hunter于20…