细说Flash存储芯片W25Q128FW和W25Q16BV

目录

一、Flash存储芯片W25Q128FW

1、W25Q128硬件接口和连接

2、存储空间划分

3、数据读写的原则

4、操作指令

(1)“写使能”指令

(2)“读数据”指令

(3)“写数据”指令

5、状态寄存器SR1

二、Flash存储芯片W25Q16JV


一、Flash存储芯片W25Q128FW

1、W25Q128硬件接口和连接

        W25Q128FWFIG是一个Flash存储芯片,容量为128Mbit,也就是16MB。W25Q128支持标准SPI,除标准SPI外还支持Dual/Quad SPI。若W25Q128工作于Dual/Quad SPI通信模式,需要连接的MCU也支持Dual/QuadSPI通信。具有QUADSPI接口的MCU才支持Dual/Quad SPI通信,如STM32F214、STM32G474等。STM32F407只有标准SPI接口,不支持Dual/Quad SPI通信。

        W25Q128的各个引脚的功能描述如下(以普中PZ6808L或T300开发板原理图为例):

  • DO、DI、CLK这3个SPI引脚与MCU的SPI1接口的相应引脚连接,占用PB4、PB5、PB3引脚。
  • 片选信号CS与MCU的PB14连接,由MCU通过GPIO引脚PB14的输出控制W25Q128的片选状态。
  • WP是写保护设置引脚,WP为低电平时,禁止修改内部的状态寄存器,与状态寄存器的一些位配合使用,可以对内部的一些存储区域进行写保护。电路中将WP接高电平,也就是不使用此写保护信号。
  • HOLD是硬件保持信号引脚。当器件被选中时,如果HOLD输入为低电平,那么DO引脚变为高阻态,DI和CLK的输入被忽略。当HOLD输入为高电平时,SPI的操作又继续。这里将HOLD引脚接电源,就是不使用保持功能。

        W25Q128支持SPI模式0和模式3。在MCU与W25Q128通信时,设置使用SPI模式3,即设置CPOL=1,CPHA=1。

2、存储空间划分

        W25Q128总容量为16MB,使用24位地址线,地址范围是0x000000~0xFFFFFF。16MB分为256个块(Block),每个块的大小为64KB,16位偏移地址,块内偏移地址范围是0x0000~0xFFFF。

        每个块又分为16个扇区(Sector),共4096个扇区,每个扇区的大小为4KB,12位偏移地址,扇区内偏移地址范围是0x000~0xFFF。

        每个扇区又分为16个页(Page),共65536个页,每个页的大小为256字节,8位偏移地址,页内偏移地址范围是0x00~0xFF。

3、数据读写的原则

        从W25Q128读取数据时,用户可以从任意地址开始读取任意长度的数据。

        向W25Q128写入数据时,用户可以从任何地址开始写数据,但是一次SPI通信写入的数据范围不能超过一个页的边界。所以,如果从页的起始地址开始写数据,一次最多可写入一个页的数据,即256字节。如果一次写入的数据超过页的边界,会再从页的起始位置开始写。向存储区域写入数据时,存储区域必须是被擦除过的,也就是存储内容是0xFF,否则写入数据操作无效。用户可以对整个器件、某个块、某个扇区进行擦除操作,但是不能对单个页进行擦除。

4、操作指令

        SPI的硬件层和传输协议只是规定了传输一个数据帧的方法,对具体的SPI器件的操作由器件规定的操作指令实现。W25Q128制定了很多的操作指令,用以实现各种功能。W25Q128的操作指令由1字节或多字节组成,指令的第1个字节是指令码,其后跟随的是指令的参数或返回的数据。W25Q128常用的几个指令如表。表中用括号表示返回的数据,A23~A0是24位的全局地址,dummy表示必须发送的无效字节数据,一般发送0x00。

指令名称

BYTE1指令码

BYTE2

BYTE3

BYTE4

BYTE5

BYTE6

写使能

0x06

——

——

——

——

——

读状态寄存器1

0x05

(S7~S0)

——

——

——

——

读状态寄存器2

0x35

(S15~S8)

——

——

——

——

读厂家和设备ID

0x90

dummy

dummy

0x00

(MF7~MF0)

(ID7~ID0)

读64位序列号

0x4B

dummy

dummy

dummy

dummy

(ID63~ID0)

器件擦除

0xC7/0x60

——

——

——

——

——

块擦除(64KB)

0xD8

A23~A16

A15~A8

A7~A0

——

——

扇区擦除(4KB)

0x20

A23~A16

A15~A8

A7~A0

——

——

写数据(页编程)

0x02

A23~A16

A15~A8

A7~A0

D7~D0

——

读数据

0x03

A23~A16

A15~A8

A7~A0

(D7~D0)

——

快速读数据

0x0B

A23~A16

A15~A8

A7~A0

dummy

(D7~D0)

        以几个指令为例,说明指令传输的过程,以及返回数据的读取等原理。

(1)“写使能”指令

        “写使能”指令(指令码0x06)只有一个指令码,其传输过程如图所示。一个指令总是从片选信号CS由高到低的跳变开始,片选信号CS由低到高的跳变结束。

        CS变为低电平后,MCU向W25Q128传输1字节数据0x06,然后结束SPI传输即可。W25Q128接收数据后,根据指令码判断指令类型,并进行相应的处理。“写使能”指令是将状态寄存器1的WEL位设置为1,在擦除芯片、擦除扇区等操作之前必须执行“写使能”指令。无返回数据的指令的操作都与此类似,就是连续将指令码、指令参数发送给W25Q128即可。

(2)“读数据”指令

        “读数据”指令(指令码0x03)用于从某个地址开始读取一定个数的字节数据,其时序如图16-6所示。地址A23~A0是24位全局地址,分解为3字节,在发送指令码0x03后,再发送3字节的地址数据。然后MCU开始从DO线上读取数据,一次读取1字节,可以连续读取,W25Q128会自动返回下一地址的数据。

(3)“写数据”指令

        “写数据”指令(指令码0x02)就是数据手册上的“页编程”指令,用于向任意地址写入一定长度的数据。“写数据”指令的时序如图所示,图中是向一个页一次写入256字节的数据。一个页的容量是256字节,写数据操作一次最多写入256字节。如果数据长度超过256字节,会从页的起始位置开始继续写。所以,如果要一次写入256字节的数据,写入的起始地址必须是页的起始地址。

        "写数据"指令的起始地址可以是任意地址,数据长度也可以小于256,但如果写的过程中地址超过页的边界,就会从页的起始地址开始继续写。

        写数据操作的存储单元必须是被擦除过的,也就是内容是0xFF。如果存储单元的内容不是0xFF,那么重新写入数据无效。所以,已经写过的存储区域是不能重复写入的,需要擦除后才能再次写入。

 

5、状态寄存器SR1

        W25Q128有3个状态寄存器(status register),用于对器件的一些参数进行配置,或返回器件的当前状态信息。对W25Q128的编程最常到状态寄存器SR1,其各个位的定义见表。

位编号

位名称

功能说明

存储特性

读/写特性

S7

SRP0

状态寄存器保护位0

非易失

可写

S6

SEC

扇区保护

非易失

可写

S5

TB

顶/底保护

非易失

可写

S4

BP2

块保护位2

非易失

可写

S3

BP1

块保护位1

非易失

可写

S2

BP0

块保护位0

非易失

可写

S1

WEL

写使能锁存

易失

只读

S0

BUSY

有正在进行的擦除或写操作

易失

只读

        通过读状态寄存器SR1的指令(指令码0x05),我们可以读取SR1的内容。状态寄存器中某些位是可写的,是指可以通过写状态寄存器的指令修改这些位的内容;某些位是非易失的,是指修改的内容可永久保存,掉电也不会丢失。

        SR1中有2个位在编程中经常用到:WEL位和BUSY位。

        写使能锁存(Write Enable Latch,WEL)位是只读的。器件上电后,WEL位是0。只有当WEL位是1时,才能进行擦除芯片、擦除扇区、页编程等操作。这些操作执行完成后,WEL位自动变为0。只有执行“写使能”指令(指令码0x06)后,WEL位才变为1。所以,在进行擦除芯片、擦除扇区、页编程等操作之前,"写使能"指令是必须先执行的。

        BUSY位是只读的,表示器件是否处于忙的状态。如果BUSY位是1,表示器件正在执行页编程、扇区擦除、器件擦除等操作。此时,除了“读状态寄存器”指令和“擦除/编程挂起”指令,器件会忽略其他任何指令。当正在执行的页编程、擦除等指令执行完之后,BUSY位自动变为0,这意味着可以继续执行其他指令了。

        其他位以及状态寄存器SR2和SR3的具体定义,可以查阅W25Q128的数据手册。一定要注意,在没有完全搞清楚状态寄存器各个位的意义和用法之前,请勿随便修改状态寄存器的内容,因为有些位是非易失的,有些位还是一次性编程的,修改状态寄存器的内容可能改变器件的特性,甚至造成器件无法再使用。

二、Flash存储芯片W25Q16BV

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

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

相关文章

浩辰CAD教程004:柱梁板

文章目录 柱梁板标准柱角柱构造柱柱齐墙边绘制梁绘制楼板 柱梁板 标准柱 绘制标准柱: ①:点选插入柱子②:沿着一根轴线布置柱子③:指定的矩形区域内的轴线交点插入柱子 替换现有柱子:选择替换之后的柱子形状&#x…

关于Git分支合并,跨仓库合并方式

关于Git合并代码的方式说明 文章目录 关于Git合并代码的方式说明前情提要开始合并方式一:git merge方式二:git cherry-pick方式三:git checkout Git跨仓库合并的准备事项前提拉取源仓库代码 前情提要 同仓库不同分支代码的合并可直接往下看文…

Python Turtle 实现动态时钟:十二时辰与星空流星效果

在这篇文章中,我将带你通过 Python 的 turtle 模块构建一个动态可视化时钟程序。这个时钟不仅具备传统的时间显示功能,还融合了中国古代的十二时辰与八卦符号,并通过动态星空、流星效果与昼夜背景切换,为程序增添了观赏性和文化内…

鸿蒙NEXT开发案例:颜文字搜索器

【引言】 本文将介绍一个名为“颜文字搜索器”的开发案例,该应用是基于鸿蒙NEXT平台构建的,旨在帮助用户快速查找和使用各种风格的表情符号。通过本案例的学习,读者可以了解如何在鸿蒙平台上进行数据处理、UI设计以及交互逻辑的实现。 【环…

Linux进阶·如何在Ubuntu安装、调试、运行gcc/g++,以及如何进行多文件编译

目录 1. 简介 2. 安装gcc 3. gcc的编译流程 3.1 预处理 3.2 编译 3.3 汇编 3.4 链接 4. gcc相关参数 5. 多文件编译 6. gcc和g的区别 1. 简介 gcc是Linux下的编译工具集,是GNU Compiler Collection的缩写,包含gcc, g等编译器。这个工…

Python鼠标轨迹算法(游戏防检测)

一.简介 鼠标轨迹算法是一种模拟人类鼠标操作的程序,它能够模拟出自然而真实的鼠标移动路径。 鼠标轨迹算法的底层实现采用C/C语言,原因在于C/C提供了高性能的执行能力和直接访问操作系统底层资源的能力。 鼠标轨迹算法具有以下优势: 模拟…

【新人系列】Python 入门(十六):正则表达式

✍ 个人博客:https://blog.csdn.net/Newin2020?typeblog 📝 专栏地址:https://blog.csdn.net/newin2020/category_12801353.html 📣 专栏定位:为 0 基础刚入门 Python 的小伙伴提供详细的讲解,也欢迎大佬们…

uni-app实现小程序、H5图片轮播预览、双指缩放、双击放大、单击还原、滑动切换功能

前言 这次的标题有点长,主要是想要表述的功能点有点多; 简单做一下需求描述 产品要求在商品详情页的头部轮播图部分,可以单击预览大图,同时在预览界面可以双指放大缩小图片并且可以移动查看图片,双击放大&#xff0…

计算机网络之传输层协议TCP

个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 计算机网络之传输层协议TCP 收录于专栏【计算机网络】 本专栏旨在分享学习计算机网络的一点学习笔记,欢迎大家在评论区交流讨论💌 目…

知识库系统,集成neo4j,集成activiti工作流,集成es全文检索,知识图谱血缘关系,nlp知识库

一、项目介绍 一款全源码,可二开,可基于云部署、私有部署的企业级知识库云平台,一款让企业知识变为实打实的数字财富的系统,应用在需要进行文档整理、分类、归集、检索、分析的场景。 为什么建立知识库平台? 助力企业…

Eclipse MAT(Memory Analyzer Tool) 使用手册

参考:JAVA内存泄露使用MAT(Memory Analyzer Tool)快速定位代码 Eclipse MAT 1.15.0提示JDK版本最低需要使用17版本的,如果不想安装可以下载ZIP包,或者使用较低版本的MAT。 为了避免下载的17版本JDK和本地环境干扰,可以直接在MAT配…

选择WordPress和Shopify:搭建对谷歌SEO友好的网站

在建设网站时,不仅要考虑它的美观和功能性,还要关注它是否对谷歌SEO友好。如果你希望网站能够获得更好的搜索排名,WordPress和Shopify是两个值得推荐的建站平台。 WordPress作为最流行的内容管理系统,其强大的灵活性和丰富的插件…

微信小程序:实现节点进度条的效果;正在完成的节点有动态循环效果;横向,纵向排列

参考说明 微信小程序实现流程进度功能 - 知乎 上面的为一个节点进度条的例子&#xff0c;但并不完整&#xff0c;根据上述代码&#xff0c;进行修改完善&#xff0c;实现其效果 横向效果 代码 wxml <view classorder_process><view classprocess_wrap wx:for&quo…

NMEA/观测文件/导航电文

NMEA-0183 NMEA-0183是美国国家海洋电子协会为海用电子设备制定的标准格式。它包含了定位时间&#xff0c;纬度&#xff0c;经度&#xff0c;高度&#xff0c;定位所用的卫星数&#xff0c;DOP&#xff0c;差分状态和校正时段等很多信息。 参考&#xff1a;GPS NMEA数据包解析…

.Net C#医院检验系统源码,实验室管理信息LIS系统

LIS系统源代码&#xff0c;.Net C#医院检验系统源码&#xff0c;三级医院应用案例&#xff0c;自主版权&#xff0c;适合二次开发上项目。 本套实验室管理信息LIS系统采用.Net C#语言开发&#xff0c;用C/S架构。支持DB2,Oracle,MS SQLServer等主流数据库。可根据医院情况配置…

从零开始学TiDB(5)Raft与Multi Raft

leader是集群中领导者&#xff0c;所有的读写都是走leader&#xff0c;follower副本不参加读写&#xff0c;leader会周期性的向follower发出心跳&#xff0c;同时也会把自己的日志同步给follower。 follower不参与读写&#xff0c;只会对其它服务做出相应&#xff0c;并同步lea…

短视频矩阵源码开发部署全流程解析

在当今的数字化时代&#xff0c;短视频已成为人们娱乐、学习和社交的重要方式。短视频矩阵系统的开发与部署&#xff0c;对于希望在这一领域脱颖而出的企业和个人而言&#xff0c;至关重要。本文将详细阐述短视频矩阵源码的开发与部署流程&#xff0c;并附上部分源代码示例&…

ubuntu 磁盘空间满,找不到占用文件的目录

解决方法&#xff1a; 检查磁盘空间&#xff1a; 执行 df -h 查看各分区磁盘使用情况。 查找大文件或目录&#xff1a; 执行 du -sh /* 2>/dev/null 查找根目录下的大文件或目录&#xff0c;再逐一进入子目录使用相同命令查找。 清理缓存和临时文件&#xff1a; 清理 /t…

2024154读书笔记|《带着诗歌上街去》——我不长叶子,不开花,也不必要什么结果

2024154读书笔记|《带着诗歌上街去》——我不长叶子&#x1f33f;&#xff0c;不开花&#x1f33c;&#xff0c;也不必要什么结果 《带着诗歌上街去》作者隔花人&#xff0c;作者很有巧思&#xff0c;在拍摄的照片上做诗&#xff0c;诗不是很有感觉&#xff0c;但是在墙上、风景…

ChatGPT突然全球宕机,OpenAI致歉:并查明原因,正积极修复

ChatGPT突然全球宕机&#xff0c;OpenAI致歉&#xff1a;并查明原因&#xff0c;正积极修复 在 2024 年 12 月 12 日上午的北京时间时段内&#xff0c;ChatGPT突发全球宕机&#xff0c;OpenAI致歉&#xff1a;已查明原因&#xff0c;正积极修复 官方证实了其备受瞩目的聊天机器…