当前位置: 首页 > 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

相关文章:

细说Flash存储芯片W25Q128FW和W25Q16BV

目录 一、Flash存储芯片W25Q128FW 1、W25Q128硬件接口和连接 2、存储空间划分 3、数据读写的原则 4、操作指令 (1)“写使能”指令 (2)“读数据”指令 (3)“写数据”指令 5、状态寄存器SR1 二、Fl…...

python爬虫--小白篇【爬取B站视频】

目录 一、任务分析 二、网页分析 三、任务实现 一、任务分析 将B站视频爬取并保存到本地,经过分析可知可以分为四个步骤,分别是: 爬取视频页的网页源代码;提取视频和音频的播放地址;下载并保存视频和音频&#x…...

Three.js入门-模型加载

Three.js 支持多种 3D 模型格式,每种格式有其独特的优势和适用场景。根据项目的需求,选择合适的格式可以提高开发效率和用户体验。下面将详细介绍几种常见的模型格式及其特点,并补充每种格式的典型使用场景。 支持的模型类型及特点 Three.j…...

ECharts实现数据可视化入门详解

文章目录 ECharts实现数据可视化入门详解一、引言二、基础配置1.1、代码示例 三、动态数据与交互2.1、代码示例 四、高级用法1、多图表组合1.1、在同一容器中绘制多个图表1.2、创建多个容器并分别初始化 ECharts 实例1.3、实现多图联动 五、总结 ECharts实现数据可视化入门详解…...

C++(举例说明类的实例化方式)

太多的信息会让你抓不住重点,下面通过间短的举例说明了类的几种实例化方式,熟悉以后再阅读代码的时候就能减少疑惑。 1.直接实例化:使用类名直接实例化对象 MyClass obj; 2.使用 new 关键字动态分配内存:使用 new 关键字来在堆上…...

LeetCode32. 最长有效括号(2024冬季每日一题 32)

给你一个只包含 ( 和 ) 的字符串,找出最长有效(格式正确且连续)括号子串的长度。 示例 1: 输入:s “(()” 输出:2 解释:最长有效括号子串是 “()” 示例 2: 输入:s “…...

Textfocals ——基于大言模型的用户驱动型文本改进工具让用户在审阅自己的写作时对其进行修改

概述 论文地址:https://arxiv.org/abs/2403.01055 大规模语言模型可以生成媲美专业作家撰写的文本。目前使用的对话技术主要有两种:一种是交互式(如 OpenAI 的 ChatGPT 和 Google 的 Gemini),另一种是预测性文本补全&…...

docker 部署 redis

docker 部署 redis 1. 下载 redis 镜像 # docker images | grep redis bitnami/redis 7.2.4-debian-11-r5 45de196aef7e 10 months ago 95.2MB2. docker-compose 部署 version: "3" services:redis:image: bitnami/redis:7.2.4-debian-11-…...

微信小程序横屏页面跳转后,自定义navbar样式跑了?

文章目录 问题原因:解决方案: 今天刚遇到的问题,横屏的页面完成操作后跳转页面后,自定义的tabbar样式乱了,跑到最顶了,真机调试后发现navbar跑到手机状态栏了,它正常应该跟右边胶囊一行。 知道问…...

回归预测 | MATLAB实现BiGRU(双向门控循环单元)多输入单输出

回归预测 | MATLAB实现BiGRU(双向门控循环单元)多输入单输出 文章目录 回归预测 | MATLAB实现BiGRU(双向门控循环单元)多输入单输出预测效果基本介绍程序设计参考资料致谢预测效果 基本介绍 BiGRU(双向门控循环单元)多输入单输出模型是一种结合了双向门控循环单元(BiGRU)的…...

智能时代的基石:神经网络

智能时代的基石:神经网络 第一节:神经网络简介 课程目标 本节课程旨在全面介绍神经网络的基本概念、结构以及其在历史发展中的重要里程碑。通过深入理解神经网络的工作原理和演变过程,学员将能够掌握神经网络在现实世界中的多种应用&#…...

红与黑,,

有一间长方形的房子,地上铺了红色、黑色两种颜色的正方形瓷砖。 你站在其中一块黑色的瓷砖上,只能向相邻(上下左右四个方向)的黑色瓷砖移动。 请写一个程序,计算你总共能够到达多少块黑色的瓷砖。 输入格式 输入包…...

嵌入式驱动开发详解16(音频驱动开发)

文章目录 前言WM8960简介I2S协议接口说明 SAI音频接口简介驱动框架简介设备树配置内核使能声卡设置与测试 后续参考文献 前言 该专栏主要是讲解嵌入式相关的驱动开发,但是由于ALSA驱动框架过于复杂,实现音频编解码芯片的驱动不是一个人能完成的&#xf…...

【嵌入式软件】跑开发板的前置服务配置

在嵌入式开发中,通常需要在 开发板和主机之间共享、传输和挂载文件。 这篇文章是关于如何在 Ubuntu 中配置 Samba、TFTP 和 NFS 协议的详细步骤。这些协议分别用于远程文件共享、文件传输和内核挂载文件系统。 如何安装协议: 参考:ubuntu18配置:详细的内容我手写了一份文档。…...

如何高效实现进程间通信

实现进程间通信(IPC)有多种高效的方法,以下是一些常见的技术及其简要说明: 1. 共享内存: 共享内存是一种高效的进程间通信机制,允许多个进程共享同一块内存区域以实现快速的数据交换。与其他IPC机制相比&a…...

scala基础学习_变量

文章目录 scala中的变量常量 val(不可变变量)变量 var变量声明多变量声明匿名变量 _ 声明 变量类型声明变量命名规范 scala中的变量 常量 val(不可变变量) 使用val关键字声明变量是不可变的,一旦赋值后不能被修改 对…...

Java 身份证校验工具类(15位校验、18位校验与15转18)

文章目录 身份证简介(一)身份证号码的组成(二)一代和二代身份证一代身份证二代身份证 检验思路分析(一)15位身份证号码(二)18位身份证号码(三)校验算法示例&a…...

HTML+CSS+Vue3的静态网页,免费开源,可当作作业使用

拿走请吱一声&#xff0c;点个关注吧&#xff0c;代码如下&#xff0c;网页有移动端适配 HTML <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width…...

【FAQ】HarmonyOS SDK 闭源开放能力 —Push Kit(8)

1.问题描述&#xff1a; 在AGC中&#xff0c;推送服务的消息回执新建成功后&#xff0c;有一个有效期 1&#xff0c;这个有效期是什么意思&#xff0c;过期后&#xff0c;会影响什么呢&#xff1f; 2&#xff0c;这个有效期是否可以修改成一直不过期&#xff1f; 解决方案&…...

HCIA-Access V2.5_2_2_2网络通信基础_IP编址与路由

网络层数据封装 首先IP地址封装在网络层&#xff0c;它用于标识一台网络设备&#xff0c;其中IP地址分为两个部分&#xff0c;网络地址和主机地址&#xff0c;通过我们采用点分十进制的形式进行表示。 IP地址分类 对IP地址而言&#xff0c;它细分为五类&#xff0c;A,B,C,D,E,…...

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

Qt Http Server模块功能及架构

Qt Http Server 是 Qt 6.0 中引入的一个新模块&#xff0c;它提供了一个轻量级的 HTTP 服务器实现&#xff0c;主要用于构建基于 HTTP 的应用程序和服务。 功能介绍&#xff1a; 主要功能 HTTP服务器功能&#xff1a; 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】

1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件&#xff08;System Property Definition File&#xff09;&#xff0c;用于声明和管理 Bluetooth 模块相…...

相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制

目录 节点的功能承载层&#xff08;GATT/Adv&#xff09;局限性&#xff1a; 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能&#xff0c;如 Configuration …...

stm32wle5 lpuart DMA数据不接收

配置波特率9600时&#xff0c;需要使用外部低速晶振...

ubuntu系统文件误删(/lib/x86_64-linux-gnu/libc.so.6)修复方案 [成功解决]

报错信息&#xff1a;libc.so.6: cannot open shared object file: No such file or directory&#xff1a; #ls, ln, sudo...命令都不能用 error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory重启后报错信息&…...

STM32标准库-ADC数模转换器

文章目录 一、ADC1.1简介1. 2逐次逼近型ADC1.3ADC框图1.4ADC基本结构1.4.1 信号 “上车点”&#xff1a;输入模块&#xff08;GPIO、温度、V_REFINT&#xff09;1.4.2 信号 “调度站”&#xff1a;多路开关1.4.3 信号 “加工厂”&#xff1a;ADC 转换器&#xff08;规则组 注入…...

C++中vector类型的介绍和使用

文章目录 一、vector 类型的简介1.1 基本介绍1.2 常见用法示例1.3 常见成员函数简表 二、vector 数据的插入2.1 push_back() —— 在尾部插入一个元素2.2 emplace_back() —— 在尾部“就地”构造对象2.3 insert() —— 在任意位置插入一个或多个元素2.4 emplace() —— 在任意…...

项目进度管理软件是什么?项目进度管理软件有哪些核心功能?

无论是建筑施工、软件开发&#xff0c;还是市场营销活动&#xff0c;项目往往涉及多个团队、大量资源和严格的时间表。如果没有一个系统化的工具来跟踪和管理这些元素&#xff0c;项目很容易陷入混乱&#xff0c;导致进度延误、成本超支&#xff0c;甚至失败。 项目进度管理软…...