操作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.mzph.cn/news/171043.shtml

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

相关文章

Java,File类与IO流,处理流:缓冲流、转换流、数据流、对象流

目录 处理流之一:缓冲流 四种缓冲流: 缓冲流的作用: 使用的方法: 处理文本文件的字符流: 处理非文本文件的字节流: 操作步骤: 处理流之二:转换流 转换流的使用: …

企业编码生成程序Python毕业设计

(1)生成6位数字防伪编码。当用户在主程序界面中输入数字“1”菜单项时,将进入“生成6位数字防伪编码 (213563型)”的功能执行任务。此时要求输入生成防伪码的数量,可以根据需要输入生成防伪码的数量。按下&…

范围查询 range级别 继续优化思路

问题&#xff1a; 这几天工作遇到了一个问题。千万级别的表&#xff0c;每秒钟产生很多数据&#xff0c;select count(id) from table where flag 1 and create_time < 2023.11.07;分区表&#xff0c;range级别&#xff0c;已经是走create_time列上的索引&#xff0c;flag…

springboot宠物店管理系统-计算机毕设 附源码 32041

SpringBoot宠物店管理系统 摘 要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;宠物行业当然也不例外。宠物店管理系统是以实际运用为开发背景&#xff0c;运用软件工程原理…

多级嵌套vue同步调用用法

//需求 要求同步调用initGame2方法 //调用方法 this.initSocket(); //定义方法为同步 async initSocket() { //调用为同步 await this.initGame2(); //定义方法为同步 async initGame2() {const e await w({ url: //定义w方法 const w e.create({ baseURL: http://my_url:8…

python pdf转txt文本、pdf转json

文章目录 一、前言二、实现方法1. 目录结构2. 代码 一、前言 此方法只能转文本格式的pdf&#xff0c;如果是图片格式的pdf需要用到ocr包&#xff0c;以后如果有这方面需求再加这个方法 二、实现方法 1. 目录结构 2. 代码 pdf2txt.py 代码如下 #!/usr/bin/env python # -*- …

H5ke12--3--iframe--编辑邮箱的制作

下面我们来window.iframes[] frames是一个全局变量&#xff0c;它是一个对象数组&#xff0c;其中包含当前窗口中的所有框架&#xff08;如果存在&#xff09;。 在这段代码中&#xff0c;let frameframes[0];是将第一个框架赋值给变量frame。通过frame.document.designMode&q…

【ArcGIS Pro微课1000例】0037:ArcGIS Pro中模型构建器的使用---以shp批量转kml/kmz为例

文章目录 一、ArcGIS Pro模型构建器介绍二、shp批量转kml/kmz1. 打开模型构建器2. 添加工作空间4. 添加【创建要素图层】工具5. 添加【图层转kml】工具6. 输出文件命名7. 运行模型三、模型另存为1.py文件2. 保存为工具一、ArcGIS Pro模型构建器介绍 模型构建器是一种可视化编程…

感冒的六大经方2

3 葛根汤 处方内容是&#xff1a;葛根15克&#xff0c;麻黄5克&#xff0c;桂枝10克&#xff0c;白芍10克&#xff0c;生薑二片&#xff0c; 炙甘草10克&#xff0c;大枣十枚 每付药加入六碗水使用大火来煮成二碗&#xff0c;成人于每三小时空腹时喝一碗&#xff0c;小孩减半…

C语言从入门到精通之【表达式和语句】

1 表达式 表达式由运算符和运算对象组成&#xff0c;最简单的表达式一个单独的运算对象。每个表达式都有一个值&#xff0c;并且是根据运算符优先级规定的顺序来执行&#xff0c;以下是一些表达式&#xff1a; 4 -6 421 a*(b c/d)/20 q 5*2 x q % 3 #q > 3 2 语句 语句…

yolov5从英伟达平台移植到华为昇腾开发板上的思路

作者&#xff1a;朱金灿 来源&#xff1a;clever101的专栏 为什么大多数人学不会人工智能编程&#xff1f;>>> 最近需要将yolov5代码从英伟达平台移植到华为昇腾开发板上。搜了一些代码和资料&#xff0c;大致明白了二者的差别。 1.二者使用的模型文件不一样 yolov…

【unity实战】实现一个放置3d物品建造装修系统(附项目源码)

文章目录 最终效果前言绘制开始场景素材开始放置旋转物体扩展优化1. 绘制地图边界&#xff0c;确保放置物品在指定区域内工作2. 让模型所占面积大小更加准确3. 隐藏白色瓦片指示区域 最终效果其他源码参考完结 最终效果 前言 其实3d物品建造装修系统之前就已经做过了&#xff…

2024年天津天狮学院食品质量与安全专业《普通化学》考试大纲

2024年天津天狮学院食品质量与安全专业高职升本入学考试《普通化学》考试大纲 一、考试性质 《普通化学》专业课程考试是天津天狮学院食品质量与安全专业高职升本入学考试 的必考科目之一&#xff0c;其性质是考核学生是否达到了升入本科继续学习的要求而进行的选拔性考试。《…

位姿变换线性变换与坐标变换

位姿,线性变换与坐标变换.yuque 内旋,外旋, 左乘,右乘很容易把人绕晕是因为缺少一种科学的符号。 自己的符号,如果经常变不稳定,对推理和理解都很不利。 一旦问题复杂起来, 直观和直觉靠不住, 只能靠代数符号来推理 约定 P1: A,B,C…是空间中的标准正交基 P2&#xff1a; [a1,…

GZ031 应用软件系统开发赛题第6套

2023年全国职业院校技能大赛 应用软件系统开发赛项&#xff08;高职组&#xff09; 赛题第6套 工位号&#xff1a; 2023年4月 竞赛说明 一、项目背景 党的二十大报告指出&#xff0c;要加快建设制造强国、数字中国&#xff0c;推动制造业高端化、智能化、…

kafka入门(二): 位移提交

位移提交&#xff1a; Kafka的每条消息都有唯一的 offset&#xff0c; 用来表示消息在分区中对应的位置。有的也称之为 “偏移量”。 消费者每次在 poll() 拉取消息&#xff0c;它要返回的是还没有消费过的消息集&#xff0c; 因此&#xff0c;需要记录上一次消费时的消费位…

[计算机网络]运输层概述

虽然我自己也不知道写在前面和前言有什么区别..... 这个系列其实是针对<深入浅出计算机网络>的简单总结,加入了一点个人的理解和浅薄见识,如果您有一些更好的意见和见解,欢迎随时协助我改正,感激不尽啦. 最近心态平和了不少, 和过去也完全做了个割舍吧,既然痛苦和压力的…

记录华为云服务器(Linux 可视化 宝塔面板)-- 安全组篇

文章目录 前言安全组说明安全组的特性安全组的应用场景 进入安全组添加基本规则添加自定义规则如有启发&#xff0c;可点赞收藏哟~ 前言 和windows防火墙类似&#xff0c;安全组是一种虚拟防火墙&#xff0c;具备状态检测和数据包过滤功能&#xff0c;可以对进出云服务器的流量…

typeof,instanceof

1.typeof typeof运算符返回的结果是以小写的字符串表示的变量的类型 2.instanceof instanceof运算符用于判断右边构造函数的原型对象是否在左边对象的原型链上 let arr[]let obj{}let datenew Dateconsole.log(arr instanceof Array)console.log(arr instanceof Object)conso…