嵌入式——Flash(W25Q64)

news2024/11/25 14:35:30

目录

一、初识W25Q64

1. 基本认识

2. 引脚介绍

​编辑

二、W25Q64特性

1. SPI模式

2. 双输出SPI方式

三、状态寄存器

1. BUSY位

2. WEL位

3. BP2、BP1、 BP0位

4. TB位

5. 保留位

6. SRP位

四、常用操作指令

1. 写使能指令(06h)

2. 写禁止指令(04h)

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

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

5. 读数据指令(03h)


一、初识W25Q64

1. 基本认识

        W25Q64是华邦公司推出的大容量 基于SPI通信 的FLASH 产品,工作电压为 2.7~3.6V,存储容量为 64Mb(8MB),擦写周期可达 10万次,数据保存时间可达 20年。 W25Q64系列 Flash存储器与 普通串行Flash存储器 相比,其使用 更灵活、性能更出色,非常 适合用于存储声音、文本和数据

        W25Q64 有 32768个 可编程页,每页 256字节

        使用 页编程指令 就可以 每次编程 256字节。

        使用 扇区擦除指令 可以 每次擦除 256字节。

        使用 块擦除指令 可以 每次擦除 256 页。

        使用 整片擦除指令 可以 擦除整个 芯片。

        W25Q64 共有 2048个可擦除扇区(一个大小 4096) 或 128个 可擦除块

2. 引脚介绍

        W25Q16、 W25Q32 和 W25Q64 支持标准的 SPl接口,传输速率最大 75 MHz,采用四线制,即4个引脚。

    ① 串行 时钟引脚 (CLK)

    ② 芯片 选择引脚 (CS)

    ③ 串行数据 输出引脚(DO)

    ④ 串行数据 输入 / 输出引脚(DIO):在普通情况下,该引脚是 串行输入引脚(DI),当使用 快读双输出 指令时,该 引脚就变成了 输出引脚,在 这种情况下,芯片就有 2个 DO引脚,所以称为 双输出,其 通信速率 相当于翻了 一番,所以 传输速率更快。

二、W25Q64特性

1. SPI模式

        W25Q16 / 32 / 64支持通过 四线制SPl总线方式访问,支持 两种 SPI通信方式,即模式 0 和模式 3 都支持。

        模式 0 和 模式 3 的主要区别是:当主机的SPl接口处于空闲或者没有数据传输时CLK的电平是 高电平还是 低电平。对于模式 0,CLK的电平为 低电平;对于模式 3,CLK的电平为 高电平。在 两种模式下芯片都是在 CLK的上升沿 采集输入数据,下降沿 输出数据。

2. 双输出SPI方式

        W25Q16 / 32 / 64 支持 SPI 双输出方式,但需要使用 快读双输出指令(Fast Read Dual Output),这时通信速率相当于标准 SPI 的 2倍。这个命令非常适合在 需要一上电就快速下载代码到内存中的情况 或者 需要缓存代码段到内存中运行的情况。在使用快读双输出指令后,DI 引脚变为 输出引脚

3.保持功能

        芯片处于使能状态(CS=0)时,把 HOLD引脚拉低可以 使芯片暂停工作,适用于芯片和其他器件 共享主机 SPI 接口的情况。

        例如:当 主机接收到一个更高优先级的中断时 就会抢占主机的 SPl接口,而这时芯片的页缓存区(Page Buffer)还有一部分 没有写完,在这种情况下,保持功能可以保存好 页缓存区的数据,等中断释放 SPI 口时,再继续完成刚才 没有写完的工作。

        使用保持功能,CS引脚必须为低电平。在 HOLD引脚出现下降沿以后,如果CLK引脚为低电平,将 开启保持功能;如果 CLK引脚为高电平,保持功能在 CLK引脚的下一个 下降沿开始。在 HOLD引脚 出现上升沿以后,如果 CLK引脚为低电平,保持功能将结束;如果 CLK引脚为高电平,在 CLK引脚的下一个下降沿保持功能将结束

        在 保持功能起作用期间,DO引脚 处于 高阻抗状态DI引脚 和 DO引脚上的信号将被忽略,而且在此期间,CS引脚 也必须 保持低电平,如果在此期间 CS引脚电平 被拉高,芯片内部的 逻辑将会被重置。

三、状态寄存器

1. BUSY位

        忙位,是只读位,位于状态寄存器中的S0。当执行页编程、扇区擦除、块擦除、芯片擦除、写状态寄存器等指令时,该位将自动置 1。此时,除了读状态寄存器指令,其他指令都忽略;当页编程、扇区擦除、块擦除、芯片擦除和写状态寄存器等指令执行完毕之后,该位将自动清 0,表示芯片可以接收其他指令了。

2. WEL位

        写保护位,是只读位,位于状态寄存器中的S1。执行完写使能指令后,该位将置 1。当芯片处于写保护状态下,该位为 0。

        在下面两种情况下,会进入 写保护状态:掉电后执行指令写禁止、页编程、扇区擦除、块擦除、芯片擦除,以及 写状态寄存器。

3. BP2、BP1、 BP0位

        块保护位,是可读可写位,分别位于状态寄存器的S4、S3、S2,可以用 写状态寄存器指令置位 这些块保护位。        

        在默认状态下,这些位都为 0,即 块处于 未保护状态下。可以设置块为没有保护、部分保护或者全部保护等状态。

        当 SPR位为 1 或 /P引脚 为低电平时,这些位 不可以被更改。

4. TB位

        底部和顶部块的保护位,是可读可写位,位于状态寄存器的 S5。该位默认为 0,表明顶部和底部块 处于未被保护状态下,可以用 写状态寄存器指令置位该位。当 SPR位为 1 或 /WP引脚 为低电平时,这些位不可以被更改。

5. 保留位

        位于状态寄存器的 S6,读取状态寄存器值时,该位为 0。

6. SRP位

        状态寄存器保护位,是可读可写位,位于状态寄存器的 S7。该位结合 /P引脚 可以禁止写状态寄存器功能

        该位默认值为0。当SRP=0时,/WP引脚 不能控制状态寄存器的写禁止;当 SRP=1 且 /P=0时,写状态寄存器指令失效;当SRP=1 且 /P=1 时,可以执行写状态寄存器指令。

四、常用操作指令

1. 写使能指令(06h)

        该指令会使 状态寄存器WEL位置位。在执行每个页编程、扇区擦除、块擦除、芯片擦除和写状态寄存器等指令之前,都要先置位 WEL/CS引脚 先拉低为低电平后,写使能指令代码 06h 从 DI引脚输入,在 CLK上升沿采集,然后将 /CS引脚 拉高为高电平。

2. 写禁止指令(04h)

        该指令将会使 WEL位 变为0。/CS引脚 拉低为低电平后,再把 04h 从 DI引脚 输入到芯片,将 /CS引脚 拉高为高电平后,就可完成这个指令。

        在执行完 写状态寄存器、页编程、扇区擦除、块擦除、芯片擦除等指令之后,WEL位就会自动变为 0。

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

        当 /CS引脚 拉低为低电平后,开始把 05h 从 DI引脚 输入到芯片在 CLK的上升沿 时数据被芯片采集,当芯片采集到的数据为 05h 时,芯片就会把 状态寄存器的值从 DO引脚输出,数据在CLK的下降沿输出高位在前

        读状态寄存器指令 在任何时候都可以用,甚至在 编程、擦除 和 写状态寄存器的过程中也可以用,这样就可以 根据状态寄存器的 BUSY位 判断编程、擦除和写状态寄存器周期有没有结束,从而知道芯片 是否可以接收 下一条指令了。

        如果 /CS引脚 没有被拉高为高电平状态寄存器的值将一直从DO引脚输出/CS引脚拉高为高电平后,读状态寄存器指令结束

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

        在执行 写状态寄存器指令之前,需要 先执行写使能指令。先将 /CS引脚 拉低为低电平后,然后把 01h 从 DI引脚 输入到芯片,接着把 想要设置的状态寄存器值通过 DI引脚 输入到芯片,/CS引脚拉高为高电平时,写状态寄存器指令结束。如果此时没有把 /CS 引脚 拉高为高电平 或者 拉得晚了,值将不会被写入,指令无效。

        只有 状态寄存器中的 SRP、TB、BP2、BP1、BP0 位可以被写入,其他只读位的值不会变。在该指令执行的过程中,状态寄存器中的 BUSY位为 1,这时可以用 读状态寄存器指令读出 状态寄存器的值并进行判断。当 写寄存器指令 执行完毕时,BUSY 位将自动变为 0,WEL位 也自动变为 0。

        通过对 TB、 BP2、 BP1、 BP0 等位写 1,就可以 实现将芯片的部分或全部存储区域设置为只读。通过对SRP位写 1,再把 /WP引脚 拉低为低电平,就可以 实现禁止写入 状态寄存器的功能。

5. 读数据指令(03h)

        该指令 允许读出一个字节或一个以上的字节。先把 /CS引脚 拉低为低电平,然后把 03h 通过DI引脚 写入芯片,再送入 24位的地址,这些数据将在 CLK 的上升沿被芯片采集

        芯片接收完 24位地址 之后,就会把相应地址的数据在 CLK引脚的下降沿 DO引脚 发送出去,高位在前。当发送完这个地址的数据之后,地址将自动增加,然后通过 DO引脚把 下一个地址的数据发送出去,从而形成一个 数据流。也就是说,只要时钟在工作,通过 一条读指令,就可以把 整个芯片存储区的数据读出来。

        把 /CS引脚 拉高为高电平时,读数据指令将结束当芯片在 执行页编程、扇区擦除、块擦除、芯片擦除和读状态寄存器指令的周期内,读数据指令不起作用。


                                                                代码后期补充。

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

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

相关文章

2.16数据结构与算法学习日记(模拟,搜索)

目录 洛谷P1328 [NOIP2014 提高组] 生活大爆炸版石头剪刀布 题目背景 题目描述 输入格式 输出格式 输入输出样例 说明/提示 题目分析 代码示例 洛谷2080增进感情 题目背景 题目描述 输入格式 输出格式 输入输出样例 说明/提示 数据范围与约定 题目分析 代码示…

建筑工程如何找答案? #职场发展#笔记#职场发展

这些软件以其强大的搜索引擎和智能化的算法,为广大大学生提供了便捷、高效的解题方式。下面,让我们一起来了解几款备受大学生欢迎的搜题软件吧! 1.易解题 这是一个网站 是我在百度搜题,经常会出现的一个网站,它里面…

P1090 [NOIP2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G题解

题目 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。多多决定把所有的果子合成一堆。 每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和。可以看出,所…

CMake进行C/C++与汇编混合编程

1. 前提 这篇文章记录一下怎么用CMake进行项目管理, 并用C/C和汇编进行混合编程, 为了使用这项技术, 必须在VS的环境中安装好cmake组件 由于大部分人不会使用C/C与汇编进行混合编程的情况。所以这篇文章并不适用于绝大部分人不会对其中具体细节进行过多叙述。只是做一些简单的…

数值类型的运算方式总结

提纲1:常见的位运算使用场景 提纲2:整数类型运算时的类型溢出问题,产生原因以及解决办法 提纲3:浮点类型运算时的精度丢失问题,产生原因以及解决办法 数值类型(6种)分为: 整型&…

跟着pink老师前端入门教程-day27

三、变量 (一)变量概述 1、什么是变量 白话:变量就是一个装东西的盒子 通俗:变量是用于存放数据的容器,通过变量名获取数据,甚至数据可以修改 2、变量在内存中的存储 本质:变量是程序在内存…

Springboot+vue的大学生智能消费记账系统的设计与实现(有报告)。Javaee项目,springboot vue前后端分离项目

演示视频: Springbootvue的大学生智能消费记账系统的设计与实现(有报告)。Javaee项目,springboot vue前后端分离项目 项目介绍: 本文设计了一个基于Springbootvue的大学生智能消费记账系统的设计与实现,采…

165基于matlab的各类滤波器

基于matlab的各类滤波器。汉宁窗设计Ⅰ型数字高通滤波器、切比雪夫一致逼近法设计FIR数字低通滤波器、模拟Butterworth滤波器设计数字低通滤波器、频域抽样法的FIR数字带阻滤波器设计、频域抽样法的FIR数字带通滤波器设计、汉宁窗的FIR数字高通滤波器设计、双线性法设计巴特沃斯…

在python中JSON数据格式的使用

什么是JSON? JSON是一种数据格式,由美国程序设计师DouglasCrockford创建的,JSON全名是JavaScript Object Notation,由JSON英文全文字义我们可以推敲JSON的缘由,最初是为JavaScript开发的。这种数据格式由于简单好用被大量应用在We…

阿里云香港服务器多少钱一年?288元

阿里云香港服务器2核1G、30M带宽、40GB ESSD系统盘优惠价格24元/月,288元一年,每月流量1024GB,多配置可选,官方优惠活动入口 https://t.aliyun.com/U/bLynLC 阿里云服务器网aliyunfuwuqi.com分享阿里云香港服务器优惠活动、详细配…

.netcore音乐播放器 musicPlayer

html音乐播放器 .net core mvc 音乐播放器 支持上传本地音乐到云端 支持通过文件夹创建歌单(不需要数据库和其他数据存储) 通过歌单分类 播放歌曲 支持播放暂停 上一首 下一首切换 支持显示歌曲列表 歌单切换 展示歌曲根据歌单名去获取歌曲显示 功能 版权原因 或者想创建自己的…

拿捏c语言指针(上)

目录 前言 ​编辑 指针 内存与地址 计算机常见单位 理解编址 取地址,指针变量,解引用 取地址 指针变量 解引用 指针变量大小 指针类型的作用 char*解引用后 指针-整数 应用 void*指针 const修饰指针变量 const修饰普通变量 const修饰指…

就是民族的气节

我们拥有一个名字叫中国 - 张明敏 一把黄土塑成千万个你我 静脉是长城 动脉是黄河五千年的文化是生生不息的脉搏(齐楚燕韩赵魏秦)提醒你 提醒我我们拥有个名字叫中国(中原地区为主体,河南,山东,安徽&…

OLMo 以促进语言模型科学之名 —— OLMo Accelerating the Science of Language Models —— 全文翻译

OLMo: Accelerating the Science of Language Models OLMo 以促进语言模型科学之名 摘要 语言模型在自然语言处理的研究中和商业产品中已经变得无所不在。因为其商业上的重要性激增,所以,其中最强大的模型已经闭源,控制在专有接口之中&#…

跨部门协作,是持续绩效管理最有效的手段

跨部门协作是企业管理痛点 一项调查结果显示,企业中普通员工与中层管理者之间,花费在内部沟通上的时间,大约占其工作时间的40%-50%,对于更高层的主管来说这一比例则会更高。 有些工作在部门内沟通完全没问题,但是跨部…

SQL的1999语法

目录 交叉连接 实现交叉连接 自然连接 实现自然连接(实际上就是内连接) ON和USING 使用自然连接时要求两张表的字段名称相同,但是如果不相同或者两张表中有两组字段是重名,这时就要利用 ON 子句指定关联条件,利用 USING 子句…

windows10安装配置nvm以达到切换nodejs的目的

前言 各种各样的项目,各种node环境,还有node_modules这个庞然大物。。想想都觉得恐怖。 所以现在有了:nvm-切换node环境,pnpm–解决重复下载同样类库的问题。 下面将就如何在win10下配置进行说明 nvm下载配置 nvm的github下载地…

springboot189基于SpringBoot电商平台的设计与实现

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的 适用于计算机类毕业设计,课程设计参考与学习用途。仅供学习参考, 不得用于商业或者非法用途,否则,一切后果请用户自负。 看运行截图看 第五章 第四章 获取资料方式 **项…

黄金交易策略(Nerve Nnife.mql4):做单手数设计

完整EA:Nerve Knife.ex4黄金交易策略_黄金趋势ea-CSDN博客 NK的做单量是由参数设定的,以下分别是参数项: 考虑到复利的情况,若10000本金,在以上三个参数的设计下,第1单的购买量是0.01*10,第2单是0.01*10*2…

题解43-48

124. 二叉树中的最大路径和 - 力扣(LeetCode) 二叉树中的 路径 被定义为一条节点序列,序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。 路径和…