操作NAND flash W25N01G

文章目录

  • W25N01G
    • 1 描述
    • 2 特点
    • 3 封装
      • 3.3.2 连接线
    • 4 引脚
      • /CS
      • DO
      • /WP
      • /Hold
    • SPI指令
      • 标准SPI命令
      • 双SPI
      • 四元SPI命令
      • 写保护
    • 5 地址
      • PA与PC
      • 最后一个扇区
    • OTP
    • 寄存器1
      • 块保护
        • 清除块保护指令*
      • WP-E
    • 寄存器2
    • 寄存器3
      • BUSY
      • P-FAIL
      • E-FAIL
      • ECC位
    • 8 命令
      • 8.1 装置ID
    • 指令解读
      • 写状态寄存器
    • 注意内容
      • 上拉
      • BUF
      • 写数据
      • 读数据
      • 写使能
      • 极性

W25N01G

1 描述

在这里插入图片描述

2 特点

在这里插入图片描述

3 封装

NAND FLASH W25N01GVZEIG支持Standard/DUAL/QUAD SPI
在这里插入图片描述

在这里插入图片描述
区别就是在于注释的内容:

  • IO0和IO2被用于标准和双SPI命令。
  • IO0-IO3被用于四元SPI指令(四元代表从四个IO口获取数据)
  • 写保护和保持函数只有在标准模式和双SPI模式才可用。

3.3.2 连接线

在这里插入图片描述

4 引脚

/CS

(Clip Select) :片选线
在这里插入图片描述当CS被拉低,装置将会被选择,能量消耗将会增加到激活水平,命令可以被写或者数据可以被读。上电后,CS必须从高到低的转变,在一个命令被传来之前。CS输入必须在上下电的时候跟随VCC供能水平。如果需要,一个上拉电阻可以帮助完成这个

DO

(Serial Data Output(Data Input Output 1)) :串行数据输出线

/WP

(Write Protect Input (Data Input Output 2)) :写数据保护线
在这里插入图片描述写保护引脚可以被用来保护状态寄存器。和状态寄存器的BP位、SRP位结合使用。一部分内存如256K到一整块的内存可以被硬件保护。WP-E位控制WP引脚的功能。
在这里插入图片描述
当WP-E为0时,装置软件保护,只有SR1被保护。WP引脚变作一个为四元SPI操作的数据引脚。
当WP-E为1时,装置硬件保护,WP变成一个激活的低输入引脚,作为整个装置的写保护。如果WP接地,装置变成一个只读引脚。

4、GND :地线
5、DI(Serial Data Input(Data Input Output 0)) :串行数据输入线
6、CLK(Serial Clock) :时钟线

/Hold

(Hold Input (Data Input Output 3)) :数据输入保持线
在这里插入图片描述
在标准和双SPI操作器件,hold引脚被选择时允许装置暂停。当hold被拉低,CS同时也拉低,DO引脚将会高阻态同时DI和CLK引脚上的信号将会被忽略。当hold是高,装置恢复。hold函数可以在多个装置被共享相同的SPI信号时使用。hold引脚低时激活。
8、VCC :电源输入

SPI指令

标准SPI命令

在这里插入图片描述
W25N01可以通过SPI兼容总线访问,由clk,cs,DI和DO组成。标准SPI命令使用:

  • 使用DI输入引脚将指令、地址或数据串行地写入CLK上升沿上的设备。
  • DO输出引脚用于从CLK下降沿上的设备读取数据或状态。
  • 模式0和模式3的主要区别在于CLK的电平,当SPI总线主设备处于待机且数据没有被传输时,对于模式0,CLK信号通常在/CS的下降和上升边缘处是低电平状态的;对于模式3,CLK信号通常在/CS的下降和上升边缘处是高电平状态的。

双SPI


当使用3B命令和BBH命令时候,w25n01支持双spi操作。这些命令允许数据可以从装置在两到三个时间周期内传递。双SPI命令对于快速下载到RAM上等非常理想。

四元SPI命令

在这里插入图片描述
当使用命令如6BH、EBH、32H等命令时,w25n01支持四元SPI操作。这些命令允许数据从装置以4-6个周期传输。四元读命令。。。

写保护

在这里插入图片描述
需要注意的是:片选引脚必须跟随VCC供电水平,从上电直到最小电压的VCC供电水平和Tvsl延时时间到达。并且该引脚必须跟随VCC供电水平在下电时阻止指令序列颠倒。如果需要上拉电阻可以帮助完成这玩意。
在这里插入图片描述
上电之后装置自动处于写失能状态,WEL位0。一个写使能命令必须在一个页程序、扇区擦除、块擦除命令执行被接收之前发出。在执行完一个程序、擦朱或者写命令之后,WEL位会被自动清除到0。
在这里插入图片描述
软件控制写保护是容易的,通过使用写状态寄存器命令并且设置状态寄存器的SRP0、SRP1和块波阿虎TB、BP3-0位。这样可以设置一个部分或者完全的内存序列被配置为只读。与WP引脚结合,在软件控制下改变状态寄存器就可以使能或者失能。看写保护寄存器了解更多信息。
在这里插入图片描述
写访问状态寄存器由非只读的状态寄存器保护位SRP0,SRP1、写使能命令、和当WP-E为1的时候的WP引脚控制。

5 地址

在这里插入图片描述W25N01G的寻址方式是页地址+列地址(Page Add + Column Add)。
在这里插入图片描述

  • 列地址大小为2112( 2 11 + 2 6 2^{11}+2^6 211+26)Byte,由2048Byte的数据缓冲区和64Byte的备用区域(Spare Area)组成。(没有完全用完地址)
  • 页地址大小1024 x 64 x 2KB,即该flash共有1024个块(Block),每个块包含64页(Page),每页大小为2KB。(对应flash的大小,1024x64x2/1024=128M)
  • 由于NAND Flash在设定上存在坏块,所以就有Spare Area,它被用于标记坏块(bad block)和保存对MainArray中main区的ECC码(Error Checking and Correcting,纠错码)。

PA与PC

在这里插入图片描述

  • PA是页地址请求16位,PA[15:6]是一个128K的块的地址(共有1024个)。PA[0-5]是一个2K的页的地址(共有64个)。

最后一个扇区

1024*(4096)*N每个扇区大小4K,但实际可用的只有2K。
1024代表快,N代表第几个页。

OTP

OTP锁定的值。
One Time Program (OTP) write protection

寄存器1

在这里插入图片描述

块保护

S7-S2为块保护位,主要提供写保护控制和状态。块保护位上电后的默认值是1,以保护整个flash。如果配置寄存器(SR-2)中的SR1-L位被设置为1,那么其默认值将是OTP锁定的值。

清除块保护指令*

Protection Register / Status Register-1 (Volatile Writable, OTP lockable) 此寄存器上电后的默认值是 0b01111100,也就是说 Flash 处于写保护状态。我们需要用 Write Status Register (1Fh/01h) 这条指令清除写保护。 否则擦写指令不起作用。
{

}

WP-E

当WP-E = 0(默认值)时,设备处于软件保护模式,当WP-E = 1时,设备处于硬件保护模式。
在这里插入图片描述
写保护位用来使能硬件保护。当该位1时,WP引脚被拉低,堵塞任何写、执行和擦除命令。装置变成只读的。四元SPI操作也不能在WP-E为1的时候操作。

寄存器2

状态寄存器2可以改变BUF和ECC-E的状态。

寄存器3

在这里插入图片描述
地址:0xC0即可。

BUSY

擦写、执行程序忙。

P-FAIL

程序执行失败

E-FAIL

擦写失败

ECC位

累计的ECC状态
在这里插入图片描述
ECC函数用在NAND闪存中纠正在读操作器件有限内存的错误。
ECC状态位应该在完成读操作后检查一下证明数据的完整性。
ECC状态位不关心0.
这些位将会在重新上电或者执行复位命令后清零。
在这里插入图片描述
解读上图。ECC1和0都是1的情况只在BUF=0的时候应用。
0 0 整个数据输出成功,没有任何ECC纠正
0 1 整个数据输出成功,有1-4位的ECC纠正
1 0 仅一个单页里不能被ECC修复,整个数据输出包含超过4位的错误。
1 1 在多个页中整个数据输出包含超过4位错误。在连续读模式,额外的命令只能提供最后失败的PA地址,用户不能获得其它失败页的PA地址。数据不适合使用。

8 命令

8.1 装置ID

在这里插入图片描述

指令解读

写状态寄存器

在这里插入图片描述
写状态寄存器指令让我们可以写状态寄存器。可以写的状态位包括…,所有其它位是只读的,不受该命令影响。

在这里插入图片描述
未来写状态寄存器位,命令通过拉低CS进入。发送命令1F,呆着寄存器地址,然后写状态寄存器即可。
在这里插入图片描述
参照7.1.3的描述,上拉之后,默认BP,TB,ECC-E位都是1,其它位是0.
在这里插入图片描述
写状态寄存器命令。
impedance/阻抗/

注意内容

上拉

1、SPI 的信号线最好加 1k 上拉电阻, 实测发现 W25N01GV 这颗芯片的驱动能力比较弱。在调试的时候这可能发生误导,因为 BUSY = 0 时表明命令执行完毕,实际上是读回来的虚假低电平。(待验证)。

BUF

3、要注意两个型号的区别
W25N01GVxxIG, 默认 BUF = 1, 处于 Buffer Read Mode。
W25N01GVxxIT, 默认 BUF = 0,处于 Continous Read Mode。
两种模式可以用过命令切换。

写数据

4、写入数据分两步:1. 先把数据传入芯片内部的 2048 字节 RAM 缓冲区。比如通过 Quad Program Data Load (32h) 指令装载数据。 2 执行 Program Execute (10h)。如果只执行第一步,不执行第二步,数据还可以从缓冲区读出来,但是掉电后数据就没有了。

读数据

5.读数据也分为两步,第一步先将指定页数据读取到缓冲区(0x13H ),第二步将数据从缓冲区读出来(0x03H)。

写使能

6、在执行 Block Erase,Program Execute等命令前要先执行Write Enable(06h)指令,否则指令不起作用。

极性

7、 非常重要的一点是:SPI的 频率1M合适 ,SPI的的极性一定要为高。也就是空闲时要为高电平。(吃亏了,血泪教训)

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

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

相关文章

今天给大家带来Python炫酷爱心代码

前言: 这个是小编之前朋友一直要小编去做的,不过之前技术不够所以一直拖欠今天也完成之前的约定吧! 至于他是谁,我就不多说了直接上代码 一.代码展示 import random from math import sin, cos, pi, log from tkinter import …

Navicat 技术指引 | 适用于 GaussDB 的用户权限设置

Navicat Premium(16.2.8 Windows版或以上) 已支持对 GaussDB 主备版的管理和开发功能。它不仅具备轻松、便捷的可视化数据查看和编辑功能,还提供强大的高阶功能(如模型、结构同步、协同合作、数据迁移等),这…

SpringMVC系列-7 @CrossOrigin注解与跨域问题

背景 前段时间帮同事分析了一个跨域问题,正好系统分析和整理一下。 1.跨域 理解同源策略是理解跨域的前提。同源策略定义如下: 在同一来源的页面和脚本之间进行数据交互时,浏览器会默认允许操作,而不会造成跨站脚本攻击&#x…

2023年最新前端面试题汇总大全(含答案超详细,HTML,JS,CSS汇总篇)-- 持续更新

专项练习–持续更新 HTML篇CSS篇JS篇Vue篇TypeScript篇React篇微信小程序篇前端面试题汇总大全二(含答案超详细,Vue,TypeScript,React,微信小程序,Webpack 汇总篇)-- 持续更新 前端面试题汇总大…

Wireshark的捕获过滤器

Wireshark的过滤器,顾名思义,作用是对数据包进行过滤处理。具体过滤器包括捕获过滤器和显示过滤器。本文对捕获过滤器进行分析。 捕获过滤器:当进行数据包捕获时,只有那些满足给定的包含/排除表达式的数据包会被捕获。 捕获过滤器…

float和double(浮点型数据)在内存中的储存方法

作者:元清加油 主页:主页 编译环境:visual studio 2022 (x86) 相信大家都知道数据在内存中是以二进制储存的 整数的储存方法是首位是符号位,后面便是数值位 那么浮点数在内存中是怎么储存的呢?我们先来看一个例子&am…

深度学习技巧应用30-深度学习中的GPU的基本架构原理与应用技巧

大家好,我是微学AI,今天给大家介绍一下深度学习技巧应用30-深度学习中的GPU的基本架构原理与应用技巧,GPU是一种专门用于处理大量并行操作的硬件设备,它的架构设计主要是为了图形渲染。然而,由于其并行处理能力,现在广泛应用于深度学习、科学计算等领域。主要的GPU制造商…

C#,《小白学程序》第十九课:随机数(Random)第六,随机生成任意长度的大数(BigInteger)

1 文本格式 using System; using System.Linq; using System.Text; using System.Collections.Generic; /// <summary> /// 大数的&#xff08;加减乘除&#xff09;四则运算、阶乘运算 /// 乘法计算包括小学生算法、Karatsuba和Toom-Cook3算法 /// 除法运算为 Truffer…

【数据结构】什么是队列?

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:数据结构 ⚙️操作环境:Visual Studio 2022 目录 &#x1f4cc;队列的定义 &#x1f4cc;队列的抽象数据类型 &#x1f4cc;队列的顺序存储结构 &#x1f4cc;队列的链式存储结构 结语 人生,是一个又一个小小的队列…

KVM虚拟机的NAT网络模式原理及过程展示

NAT的方式及原理 NAT方式是KVM安装后的默认方式。 它支持主机与虚拟机的互访&#xff0c;同时也支持虚拟机访问互联网&#xff0c;但不支持外界访问虚拟机。 default是宿主机安装虚拟机支持模块的时候自动安装的。 其中 virbr0是由宿主机虚拟机支持模块安装时产生的虚拟网络接…

【数学建模系列】TOPSIS法的算法步骤及实战应用——MATLAB实现

文章目录 TOPSIS简介方法和原理数学定义数学语言描述现实案例 正负理想解定义实例 量纲 TOPSIS法的算法步骤1.用向量规范化的方法求得规范决策矩阵2.构成加权规范阵C(c~ij~)~m*n~3.确定正负理想解的距离4.计算各方案到正理想解与负理想解的距离5.计算各方案的综合评价指数6.排列…

学习.NET验证模块FluentValidation的基本用法(续1:其它常见用法)

FluentValidation模块支持链式验证方法调用&#xff0c;也就是说&#xff0c;除了 RuleFor(r > r.UserName).NotEmpty()调用方式之外&#xff0c;还可以将对单个属性的多种验证函数以链式调用方式串接起来&#xff0c;比如UserName属性不能为空&#xff0c;长度在5~10之间&a…

PyTorch包

进入PyTorch的官网&#xff1a; pytorch GitHub 点击GitHub&#xff1a; 进入PyTorch的主目录&#xff1a; 进入Vision reference&#xff1a; detection&#xff1a; 这就是我们在训练过程中会使用到的文件了&#xff1a;

微信小程序 基于Android的共享付费自习室座位选座系统uniAPP

题目&#xff1a; 基于Android的共享自习室APP设计与实现 (学校要求&#xff1a;数据库不少于有逻辑关系的20个表&#xff0c;系统功能不少于60个功能点&#xff09; 技术&#xff1a; 功能&#xff1a; 1. 用户端&#xff1a; 一、首页&#xff1a; &#xff08;1&…

网络安全—自学

1.网络安全是什么 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 2.网络安全市场 一、是市场需求量高&#xff1b; 二、则是发展相对成熟…

自建私有化证书颁发机构(Certificate Authority,CA)实战之 《0x02 Nginx 配置 https双向认证》

自建CA实战之 《0x02 Nginx 配置 https双向认证》 上一章节我们已经实现了Nginx上配置https单向认证&#xff0c;主要场景为客户端验证服务端的身份&#xff0c;但是服务端不验证客户端的身份。 本章节我们将实现Nginx上配置https双向认证&#xff0c;主要场景为客户端验证服…

寄存器、缓存、内存之间的关系和区别

https://blog.csdn.net/m0_46761060/article/details/124689209 目录 关系1、寄存器2、缓存&#xff08;Cache&#xff09; 2.1、寄存器和缓存的区别2.2、一级缓存和二级缓存3、内存 3.1、只读存储器 ROM&#xff08;Read Only Memory&#xff09;3.2、随机存储器 RAM&#xf…

计算机图形学头歌实训平台答案——CG1-v2.0-直线绘制

第1关&#xff1a;直线光栅化-DDA画线算法 任务描述 1.本关任务 (1)根据直线DDA算法补全line函数&#xff0c;其中直线斜率0<k<1&#xff1b; (2)当直线方程恰好经过P(x,y)和T(x,y1)的中点M时&#xff0c;统一选取直线上方的T点为显示的像素点。 2.输入 (1)直线两端…

服务器数据恢复—raid5上层NTFS分区误删除/格式化的数据恢复案例

NTFS是windows操作系统服务器应用最为广泛的文件系统之一。理论上&#xff0c;NTFS文件系统格式化操作虽然不会对数据造成太大的影响&#xff0c;但是有可能会出现部分文件目录结构丢失的情况。下面介绍一台服务器误操作导致raid5阵列上层的NTFS分区被格式化后如何逆向操作恢复…

【数据结构/C++】栈和队列_链队列

#include <iostream> using namespace std; // 链队列 typedef int ElemType; typedef struct LinkNode {ElemType data;struct LinkNode *next; } LinkNode; typedef struct {LinkNode *front, *rear; } LinkQueue; // 初始化 void InitQueue(LinkQueue &Q) {Q.fron…