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

细说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.mrgr.cn/news/79875.html

相关文章:

  • 【蓝桥杯每日一题】重新排序
  • web 自动化 selenium
  • 电压调整电路汇总
  • 前端的 Python 入门指南(六):调试方式和技巧对比
  • 深入了解 CSS 函数:使用方法与实战指南(附函数列表)
  • 十二月第三周
  • SQL 在线格式化 - 加菲工具
  • 关于linux kernel hardlockup 的探究
  • Linux系统操作02|基本命令
  • EfficientNet与复合缩放理论(Compound Scaling Theory) 详解(MATLAB)
  • 三、nginx实现lnmp+discuz论坛
  • 移动端自动化Auto.js入门及案例实操
  • Strawberry Fields:探索学习量子光学编程的奇妙世界
  • 【AI知识】有监督学习之回归任务(附线性回归代码及可视化)
  • scala的泛型参数
  • 作业Day2: 多文件编译; 思维导图
  • HBuilderX(uni-app)Vue3路由传参和接收路由参数!!
  • 自动驾驶控制与规划——Project 1: 车辆纵向控制
  • 【Redis源码】网络模型
  • hbuilder 安卓app手机调试中基座如何设置