当前位置: 首页 > news >正文

非易失性存储器·W25Q64使用手册解读

目录

1.  简介

2.  引脚定义

3.  设计框图

3.1  控制逻辑

3.2  存储逻辑

4.  指令集

4.1  写使能指令(06h)

4.2  写禁止指令(04h)

4.3  读状态寄存器指令(05h)

4.4  写状态寄存器指令(01h)

4.5  读数据指令(03h)


1.  简介

        W25Qxx系列是一种低成本、小型化、使用简单的非易失性存储器,常应用于数据存储、字库存储、固件程序存储等场景。

存储介质:Nor Flash(闪存)

时钟频率:80MHz / 160MHz (Dual SPI) / 320MHz (Quad SPI)

芯片型号存储容量(24位地址)
W25Q404Mbit / 512KByte
W25Q808Mbit / 1MByte
W25Q1616Mbit / 2MByte
W25Q3232Mbit / 4MByte
W25Q6464Mbit / 8MByte
W25Q128128Mbit / 16MByte
W25Q256256Mbit / 32MByte

        对于上述数据怎么来的呢?我们可以参考数据手册,对于W25Q64其是 64Mbit 的容量,而1数据位是8字节,那么 64Mbit 就是 8MByte:

2.  引脚定义

        芯片手册的引脚图如下:

引脚功能补充
VCC、GND电源(2.7~3.6V)
CS(SS)SPI片选,低电平有效

当 /CS 为高电平时,设备处于未选中状态,串行数据输出(DO 或 IO0、IO1、IO2、IO3)引脚处于高阻态。当设备未选中时,除非正在进行内部擦除、编程或状态寄存器操作,否则设备功耗将处于待机水平。

当 /CS 为低电平时,设备将被选中,功耗将增加到活动水平,并且可以向设备写入指令和从设备读取数据。

上电后,在接受新指令之前,/CS 必须从高电平变为低电平。/CS 输入在上电时必须跟踪 VCC 电源电平,如有需要,可在 /CS 上使用上拉电阻来实现这一点。

CLK(SCK)SPI时钟

串行时钟(CLK)SPI 串行时钟输入(CLK)引脚为串行输入和输出操作提供时序。

DI(MOSI)SPI主机输出从机输入W25Q64BV 支持标准 SPI、双 SPI 和四 SPI 操作。标准 SPI 指令使用单向 DI(输入)引脚,在串行时钟(CLK)输入引脚的上升沿将指令、地址或数据串行写入设备。标准 SPI 还使用单向 DO(输出)引脚在时钟(CLK)下降沿从设备读取数据或状态。双线和四线 SPI 指令使用双向 IO 引脚在时钟(CLK)上升沿向设备串行写入指令、地址或数据,并在时钟(CLK)下降沿从设备读取数据或状态。四线 SPI 指令要求状态寄存器 2 中的非易失性四线使能位(QE)被设置。当 QE=1 时,WP 引脚变为 IO2,/HOLD 引脚变为 IO3。
DO(MISO)SPI主机输入从机输出
WP写保护,低电平有效

写保护(/WP)引脚可用于防止状态寄存器被写入。与状态寄存器的块保护(SEC、TB、BP2、BP1 和 BPO)位以及状态寄存器保护(SRP)位配合使用时,可以对部分或整个存储阵列进行硬件保护。/WP 引脚为低电平有效。当状态寄存器 2 的 QE 位设置为四线 IO 时,/WP 引脚(硬件写保护)功能不可用,因为此引脚用于 IO2。

HOLD数据保持/HOLD 引脚允许在设备被选中时将其暂停。当 /HOLD 被拉低时。当 /CS 为低电平时,DO 引脚将处于高阻态,DI 和 CLK 引脚上的信号将被忽略(无关紧要)。当 /HOLD 被置为高电平时,设备操作可以恢复。当多个设备共享相同的 SPI 信号时,HOLD 功能可能很有用。/HOLD 引脚为低电平有效。当状态寄存器 2 的 QE 位设置为四线 I/O 时,HOLD 引脚功能不可用,因为此引脚用于 IO3。

        常规外围电路设计:

3.  设计框图

        我们分上下两部分介绍,完整的设计框图:

3.1  控制逻辑

        先说一下控制逻辑部分:

        首先左侧框住部分和芯片引脚相连,可以参考上方电路图,然后 Write Control Logic 配合 WP 引脚进行写保护的操作,其状态会被状态寄存器记录下来:

  • BUSY位:忙位,是只读位,位于状态寄存器中的S0。当执行页编程、扇区擦除、块擦除、芯片擦除、写状态寄存器等指令时,该位将自动置 1。此时,除了读状态寄存器指令,其他指令都忽略;当页编程、扇区擦除、块擦除、芯片擦除和写状态寄存器等指令执行完毕之后,该位将自动清 0,表示芯片可以接收其他指令了。
  • WEL位:写保护位,是只读位,位于状态寄存器中的S1。执行完写使能指令后,该位将置 1。当芯片处于写保护状态下,该位为 0。
  • BP2、BP1、 BP0位:块保护位,是可读可写位,分别位于状态寄存器的S4、S3、S2,可以用 写状态寄存器指令置位 这些块保护位。在默认状态下,这些位都为 0,即 块处于 未保护状态下。可以设置块为没有保护、部分保护或者全部保护等状态。
  • TB位:底部和顶部块的保护位,是可读可写位,位于状态寄存器的 S5。该位默认为 0,表明顶部和底部块 处于未被保护状态下,可以用 写状态寄存器指令置位该位。当 SPR位为 1 或 /WP引脚 为低电平时,这些位不可以被更改。
  • 保留位:位于状态寄存器的 S6,读取状态寄存器值时,该位为 0。
  • SRP位:状态寄存器保护位,是可读可写位,位于状态寄存器的 S7。该位结合 /P引脚 可以禁止写状态寄存器功能。该位默认值为0。当SRP=0时,/WP引脚 不能控制状态寄存器的写禁止;当 SRP=1 且 /P=0时,写状态寄存器指令失效;当SRP=1 且 /P=1 时,可以执行写状态寄存器指令。

        实现掉电不丢失部分,W25Q64 的每一个存储单元(存储一个比特 0 或 1)在物理上都是一个 “浮栅MOSFET晶体管”。

  • 浮栅:这是一个被绝缘体(二氧化硅)完全包围、与外界物理隔离的导电栅极。电荷一旦被注入,就无法轻易逃逸。
  • 电荷的囚笼:你可以把浮栅想象成一个“电子陷阱”。在无外力作用下,被困在里面的电子可以稳定地保存很多年(通常超过20年)。

        状态如何定义?

  • 状态 ‘1’ (已擦除):浮栅内没有电子。此时晶体管的阈值电压较低,容易导通。
  • 状态 ‘0’ (已编程):通过高压,将电子注入到浮栅中。这些电子的存在会改变晶体管的特性,使其阈值电压变高,不易导通。

        接着页地址锁存计数器和字节地址锁存计数器。

  • 页地址锁存计数器:它锁存的是 “页”的编号。对于 8MB 的芯片,总页数为 8,388,608 / 256 = 32,768 页。所以这个计数器可以理解为一个从 0 到 32767 的计数器。这个计数器保存的是地址的 高16位(A23-A8)。它决定了当前读取操作位于 哪一页。
  • 字节地址锁存计数器:它锁存的是在一个页内部的 “字节”位置。由于一页只有 256 字节,所以这个计数器是一个 8 位计数器,范围是 0 到 255。这个计数器保存的是地址的 低8位(A7-A0)。它决定了当前读取操作从该页的 哪个字节 开始。

        简单来说,页地址锁存计数器,管理 “在哪一页”,在字节计数器溢出时递增。字节地址锁存计数器,管理 “在页内的哪个字节”,每读取一个字节就递增一次。

3.2  存储逻辑

        首先我们先看一些这个介绍:

        简单翻译一下,W25Q64BV 阵列由 32,768 个可编程页组成,每页 256 字节。每次最多可编程 256 字节。页可以以 16 页为一组(扇区擦除)、128 页为一组(32KB 块擦除)、256 页为一组(64KB 块擦除)或整个芯片(芯片擦除)的方式进行擦除。W25Q64BV 分别具有 2048 个可擦除扇区和 128 个可擦除块。较小的 4KB 扇区在需要数据和参数存储的应用中提供了更大的灵活性:

        每块,每扇区都有自己的地址空间

4.  指令集

        这些是我们想要操作W25Q64是需要的一些指令集,下面对常用的一些进行讲述:

4.1  写使能指令(06h)

功能:将状态寄存器中的 WEL (Write Enable Latch) 位置 '1'。

前置条件:在执行页编程、擦除(扇区/块/芯片)或写状态寄存器指令前,必须先执行此指令。

时序:

  • 将 /CS 引脚拉至低电平。
  • 通过 DI 引脚发送 1 字节指令码 06h。数据在 CLK 的上升沿被锁存。
  • 将 /CS 引脚拉至高电平,完成指令。

4.2  写禁止指令(04h)

功能:将状态寄存器中的 WEL 位清零 ('0')。

时序:

  • 将 /CS 引脚拉至低电平。
  • 通过 DI 引脚发送 1 字节指令码 04h。
  • 将 /CS 引脚拉至高电平,完成指令。

        在写状态寄存器、页编程、擦除指令执行完成后,WEL 位会自动清零。

4.3  读状态寄存器指令(05h)

功能:读取状态寄存器的当前值。

时序:

  • 将 /CS 引脚拉至低电平。
  • 通过 DI 引脚发送 1 字节指令码 05h(在 CLK 上升沿锁存)。
  • 芯片随即通过 DO 引脚输出状态寄存器的值(在 CLK 下降沿输出,MSB first)。

        需要注意的是:

  • 此指令可在任何时候执行,包括芯片忙于编程或擦除操作时。
  • 通过读取 BUSY 位,可判断内部操作是否完成,从而确定芯片是否能接收下一条指令。
  • 只要 /CS 保持为低,状态寄存器数据将持续输出。指令在 /CS 拉高后结束。

4.4  写状态寄存器指令(01h)

功能:读取状态寄存器的当前值。

时序:

  • 将 /CS 引脚拉至低电平。
  • 通过 DI 引脚发送 1 字节指令码 05h(在 CLK 上升沿锁存)。
  • 芯片随即通过 DO 引脚输出状态寄存器的值(在 CLK 下降沿输出,MSB first)。

        需要注意的是:

  • 此指令可在任何时候执行,包括芯片忙于编程或擦除操作时。
  • 通过读取 BUSY 位,可判断内部操作是否完成,从而确定芯片是否能接收下一条指令。
  • 只要 /CS 保持为低,状态寄存器数据将持续输出。指令在 /CS 拉高后结束。

4.5  读数据指令(03h)

功能:从指定地址开始读取一个或多个字节的数据。

时序:

  • 将 /CS 引脚拉至低电平。
  • 通过 DI 引脚依次发送:指令码 03h、24 位地址(A23-A0)。
  • 芯片从该地址开始,在 CLK 的下降沿通过 DO 引脚输出数据(MSB first)。

        需要注意的是:

  • 地址自动递增:输出当前地址数据后,地址计数器自动加1,并连续输出下一地址的数据,形成数据流。只要时钟持续且 /CS 为低,即可连续读取整个存储器。
  • 指令在 /CS 拉高后结束。
  • 当芯片正在执行编程、擦除或写状态寄存器操作时,此指令无效。

【STM32】SPI通讯协议入门解析-CSDN博客

STM32学习笔记_时光の尘的博客-CSDN博客

http://www.dtcms.com/a/613888.html

相关文章:

  • 网站统计关键词重庆市建设局网站
  • 分布式缓存技术选型指南
  • mysql主从复制配置
  • html网站模板建站手机建网站推广
  • Vue 项目实战《尚医通》,预约挂号的路由与静态搭建,笔记36
  • 网站建设 风险防控网站首页的head标签内
  • 多用户跨学科交流系统(3):评论模块与 Spring Boot 全局异常处理
  • 前后端分离部署学之思在线考试系统
  • 在树莓派4B上部署ONNX格式的YOLOv8-Pose
  • websocket和传统socket有何差别?是属于一个子集还是完全不同?
  • 双指针问题2(c++)
  • 龙岩市城乡规划建设局网站三只松鼠的网络营销方式
  • Docker容器使用手册——入门篇(上)
  • C语言编译器网页版 | 轻松编写与调试C语言程序
  • QT注册自定义类相关的两个用法
  • 进程间关系(linux)
  • WordPress外贸成品网站的免费获取渠道
  • 经典算法题之汉明距离(二)
  • 公司注册网站模板上杭网站设计
  • 基于Spring AI的RAG和智能体应用实践
  • Flutter:跨平台开发终极指南
  • Python-将身份证正反面图片-生成PDF
  • 建单页网站搜网站的关键词
  • 数据科学每日总结--Day20--区块链
  • 自建网站平台有哪些建立个人网站能干
  • Docker中容器的备份方法和步骤
  • 折叠屏手机如何选:横向内折与竖向内折形态及核心参数解析
  • 我想网上做网站软件项目管理书籍推荐
  • el-table组件右侧出现空隙
  • 南宁响应式网站制作抖音运营公司排名前十