【STM32】SPI通信协议W25Q64Flash存储器芯片(学习笔记)

news2025/3/23 17:35:45

通信接口部分有介绍SPI:【STM32】USART串口协议&串口外设-学习笔记-CSDN博客 

SPI通信协议

SPI通信

  • SPI(Serial Peripheral Interface)是由Motorola公司开发的一种通用数据总线
  • 四根通信线:SCK(Serial Clock)、MOSI(Master Output Slave Input)、MISO(Master Input Slave Output)、SS(Slave Select)
  • 同步,全双工
  • 支持总线挂载多设备(一主多从)

I2C通信和SPI通信区别: 

I2C 通信优点:使用两根线(SCL 时钟线和 SDA 数据线),半双工通信,布线简单,占用引脚少,支持多主机多从机模式,具备总线仲裁机制,适用于近距离低速设备间通信。缺点:数据传输速率相对较低,一般标准模式下为 100kbps,快速模式下为 400kbps,高速模式下为 3.4Mbps  ,每次通信需要发送起始、停止信号和应答信号,开销较大,通信效率不高。

SPI 通信优点:数据传输速率高,可达几十 Mbps ,适合高速数据传输场景,全双工通信,主机和从机可同时发送和接收数据,操作简单,只需 4 根线(SCK 时钟线、MOSI 主机输出从机输入线、MISO 主机输入从机输出线、SS 从机选择线)。缺点:布线复杂,占用引脚较多,只支持单主机多从机模式,没有总线仲裁机制,若多个主机同时试图控制总线,可能导致数据冲突,不适用于多主机环境。 

硬件电路 

  • 所有SPI设备的SCK、MOSI、MISO分别连在一起
  • 主机另外引出多条SS控制线,分别接到各从机的SS引脚
  • 输出引脚配置为推挽输出,输入引脚配置为浮空或上拉输入 

推挽输出:高低电平均有很强的驱动能力,这将使得SPI的下降沿和上升沿都非常的迅速。得益于推挽输出的强驱动能力,SPI信号变化快,自然就能达到更高的传输速度 。

SPI 冲突点:就是MISO引脚,主机一个输入,三个从机全是输出,如果三个从机都是推挽输出,肯定会产生冲突,所以SPI协议有规定,当SS从机引脚为高电平,就是未被选中时,它的MISO引脚必须切换为高阻态,高阻态就是引脚断开,不输出任何电平。这样就可以防止一条线有多个输出而导致的冲突问题。当SS为低电平时,MISO才允许变为推挽输出。 

移位示意图 

SPI基本收发电路: 

 只想发送不想接收?

仍然调用交换字节的时序,发送同时接收,只是接收到的数据不看他就可以了。

 只想接收不想发送?

同理,仍然调用交换字节的时序,发送同时接收,只是我们会随便发送有一个数据,来把从机的数据置换过来就可以。一般统一发0x00或者0xFF。

SPI的通信的基础就是,交换一个字节, 有了交换一个一个字节,就可以实现发送一个字节,接收一个字节,发送并同时接收一个字节的三种功能。

 SPI时序基本单元

  • 起始条件:SS从高电平切换到低电平
  • 终止条件:SS从低电平切换到高电平 

 模式0用的最多,模式0和模式3都是上升沿采样输入;模式1和模式2都是下降沿采样输入;

 SPI时序

以本节使用的芯片W25Q64时序进行讲解,SPI不像I2C规定那样,有效数据流的第一个字节是寄存器地址之后依次是读写的数据,使用的是读写寄存器的模型,在SPI中通常使用的是指令码加读写数据的模型,第一个交换发送给从机的数据叫指令码。在SPI从机芯片手册里,都会定义好指令集,什么指令对应什么功能,什么指令后面得跟上什么数据。

发送指令

向SS指定的设备,发送指令(0x06)在W25Q64芯片里0x06表示写使能 

 模式0

整个时序的功能就是,发送指令,指令码0x06,从机一比对定义好的指令集,发现是写使能指令,那从机就控制硬件进行写使能 。

指定地址写

  • 向SS指定的设备,发送写指令(0x02)
  • 随后在指定地址(Address[23:0])下,写入指定数据(Data)

指定地址读

向SS指定的设备,发送读指令(0x03)

 随后在指定地址(Address[23:0])下,读取从机数据(Data)

 

 W25Q64Flash存储器芯片

 W25Q64简介

  • W25Qxx系列是一种低成本、小型化、使用简单的非易失性存储器,常应用于数据存储、字库存储、固件程序存储等场景
  • 存储介质:Nor Flash(闪存)Nor Flash 是一种非易失性闪存存储介质,在嵌入式系统等领域应用广泛。
  • 时钟频率:80MHz / 160MHz (Dual SPI) / 320MHz (Quad SPI)
  • 存储容量(24位地址):分三个字节 

基本参数

  • 存储容量:W25Q64 的存储容量为 64Mb(兆比特),也就是 8MB(兆字节)。它被划分为 128 个块(Block),每个块大小为 64KB;每个块又由 16 个扇区(Sector)组成,每个扇区大小为 4KB。
  • 工作电压:其工作电压范围为 2.7V - 3.6V,这使得它能适配多种电源系统。不能直接接5V电压。
  • 通信接口:采用 SPI(Serial Peripheral Interface)通信接口,具有引脚少、通信速率高的特点,只需 SCK(时钟线)、MOSI(主出从入数据线)、MISO(主入从出数据线)和 CS(片选线)这几根线就能和主控芯片进行通信。

性能特点

  • 读写速度快:最高时钟频率可达 80MHz,能实现快速的数据读写操作,提升系统的数据处理效率。
  • 低功耗:在待机和掉电模式下功耗极低,适合对功耗有严格要求的应用场景,如电池供电的设备。
  • 擦写次数多:扇区擦除次数可达 10 万次,数据保存时间长达 20 年,保证了数据的长期可靠性和稳定性。
应用场景
  • 消费电子:像智能手机、平板电脑、数码相机等设备,用于存储系统固件、用户数据、图像和视频等信息。
  • 工业控制:在工业自动化设备、仪器仪表中,可存储程序代码、校准数据和运行记录等。
  • 汽车电子:应用于汽车的娱乐系统、仪表盘、导航系统等,存储地图数据、音频文件和系统配置信息。

操作方式

对 W25Q64 进行操作,一般要先通过 SPI 接口发送对应的命令。例如,发送写使能命令后,才能进行写操作;擦除操作也需要先发送相应的擦除命令。而且,在进行写操作前,通常要先对相应的扇区进行擦除。

拓展:Nor Flash 和 NAND Flash的区别

Nor Flash 和 NAND Flash 是两种常见的闪存技术,它们在多个方面存在明显区别:

存储结构
  • Nor Flash:其存储单元结构类似随机存储器(RAM),各个存储单元是独立的,能够直接对单个存储单元进行随机访问,这使得它具备字节级别的随机读写能力。
  • NAND Flash:存储单元以页(Page)和块(Block)的形式组织。数据的读写通常以页为基本单位,页的大小一般在几百字节到几 KB 不等;而擦除操作则以块为单位,块由多个页组成。
读写性能
  • 读取速度:Nor Flash 的读取速度较快,特别是随机读取性能出色,它可以像内存一样直接执行代码(XIP),适合频繁随机读取少量数据的场景,如存储程序代码。NAND Flash 顺序读取速度也较快,但随机读取性能相对较差,不太适合随机读取小数据量的操作。
  • 写入和擦除速度:Nor Flash 的写入和擦除速度较慢,尤其是擦除操作,需要较长时间,而且擦除次数有限。NAND Flash 的写入和擦除速度相对较快,不过在写入数据前也需要先进行块擦除操作。
可靠性
  • 位反转:NAND Flash 更容易出现位反转现象,即存储的数据在没有进行写入操作的情况下,某些位的值发生了改变。这是由于 NAND Flash 的存储密度高,相邻存储单元之间的干扰较大。因此,NAND Flash 通常需要使用纠错码(ECC)来检测和纠正数据错误。Nor Flash 出现位反转的概率相对较低。
  • 擦写次数:Nor Flash 的擦写次数一般在 10 万次左右,而 NAND Flash 根据不同的类型,擦写次数有所差异,普通的 SLC(单电平单元)NAND Flash 擦写次数可达 10 万 - 100 万次,MLC(多电平单元)和 TLC(三层单元)的擦写次数相对较少。
成本
  • 单位容量成本:NAND Flash 的制造成本较低,单位容量的价格相对 Nor Flash 更便宜,因此在大容量存储应用中具有明显的成本优势。Nor Flash 由于制造工艺和结构的原因,成本较高,特别是大容量的 Nor Flash 价格更为昂贵。
  • 系统成本:使用 Nor Flash 时,由于其可以直接执行代码,不需要额外的内存来加载代码,在一定程度上可以降低系统的整体成本。而使用 NAND Flash 时,通常需要额外的控制器和纠错电路来保证数据的可靠性,这会增加系统的成本和复杂度。
应用场景
  • Nor Flash:主要用于存储代码和少量的关键数据,如嵌入式系统的启动代码、BIOS、汽车电子中的发动机控制单元程序等,适用于对随机读取性能和数据可靠性要求较高的场景。
  • NAND Flash:广泛应用于大容量数据存储领域,如固态硬盘(SSD)、USB 闪存驱动器、存储卡、智能手机和平板电脑的内置存储等,适合顺序读写大量数据的场景。

常见的非易失性存储器和易失性存储器: 

非易失性存储器

  • 闪存(Flash Memory):基于闪存芯片的存储介质,如常见的 U 盘、固态硬盘(SSD)等。具有掉电后数据不丢失、可多次擦写、体积小、重量轻、抗震性强等优点,广泛应用于移动设备、计算机存储等领域。
  • 只读存储器(ROM):通常用于存储计算机系统的启动程序、BIOS 等重要信息。在制造过程中就将数据固化在芯片中,只能读取,不能写入或修改,具有很高的稳定性和可靠性。
  • 电可擦除可编程只读存储器(EEPROM):可以通过电信号进行擦除和编程的只读存储器。与闪存类似,但擦写操作更加灵活,通常用于存储一些需要频繁修改但掉电后又需要保存的数据,如设备的配置信息等。不过,EEPROM 的擦写次数有限,且写入速度相对较慢。
  • 铁电存储器(FRAM):利用铁电材料的极化特性来存储数据。具有高速读写、低功耗、抗辐射等优点,且擦写次数几乎无限,但成本较高,容量相对较小,目前在一些特定领域,如航空航天、工业控制等有一定应用。

易失性存储器

  • 随机存取存储器(RAM):计算机中最常用的易失性存储器,用于暂时存储正在运行的程序和数据。根据技术和性能的不同,可分为静态随机存取存储器(SRAM)和动态随机存取存储器(DRAM)。
  • SRAM:速度快,但成本高、集成度低,常用于高速缓存(Cache)等对速度要求极高的场景。
  • DRAM:成本低、集成度高,但速度相对较慢,是计算机内存的主要组成部分,用于存储正在运行的程序和数据。计算机在运行过程中,需要不断地对 DRAM 中的数据进行刷新操作,以防止数据丢失。
  • 高速缓冲存储器(Cache):位于 CPU 和主存之间的一种高速小容量存储器,用于存储 CPU 近期可能会频繁访问的数据和指令。Cache 通常采用 SRAM 实现,速度比主存快得多,能有效提高 CPU 访问数据的速度,减少 CPU 等待数据从主存传输的时间,从而提高整个计算机系统的性能。

硬件电路  

 W25Q64框图

两个地址锁存和计数器解释

框图重点部分:四点 

Flash操作注意事项 

写入操作时:

  • 写入操作前,必须先进行写使能
  • 每个数据位只能由1改写为0,不能由0改写为1(这个意思就是Flash并没有像RAM那样的直接完全覆盖的改写能力,而是受到这个规则限制)比如:在某个存储单元存储了0xAA,写入新的0x55,那数据并不会覆盖为0x55,而是受到限制变为0x00,为了弥补这个缺陷,就用到了擦除的规定
  • 写入数据前必须先擦除,擦除后,所有数据位变为1,擦除有专门的擦除电路,我们只需要发送对应的指令,擦除后,所有的数据为都变为1,也就是16进制的0xFF,这样就可以弥补第二条的限制。
  • 擦除必须按最小擦除单元进行,有最小擦除单元限制,不能指定某一个字节擦除,要一大片的擦除,可以按片擦除,按快擦除或者按扇形擦除,最小的单元就是一个扇区擦除。
  • 连续写入多字节时,最多写入一页的数据,超过页尾位置的数据,会回到页首覆盖写入(意思就是写入的时候,一次性不能写太多,一个写入时序最多写入一页的数据,也就是256字节)
  • 写入操作结束后,芯片进入忙状态,不响应新的读写操作,使用读状态寄存器指令,看BUSY位是否为0,BUSY为0就是不忙状态

读取操作时:

  • 直接调用读取时序,无需使能,无需额外操作,没有页的限制,读取操作结束后不会进入忙状态,但不能在忙状态时读取 

W25Q64数据手册 (摘取)

控制及状态寄存器 

指令集 

 

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

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

相关文章

SpringBoot最佳实践之 - 使用AOP记录操作日志

1. 前言 本篇博客是个人在工作中遇到的需求。针对此需求,开发了具体的实现代码。并不是普适的记录操作日志的方式。以阅读本篇博客的朋友,可以参考此篇博客中记录日志的方式,可能会对你有些许帮助和启发。 2. 需求描述 有一个后台管理系统…

第六届机电一体化技术与智能制造国际学术会议(ICMTIM 2025)

重要信息 4月11-13日 南京江北新区工业大学亚朵酒店 www.icmtim.org(点击了解参会投稿等) 简介 由南京工业大学主办,南京工业大学电气工程与控制科学学院、中国矿业大学、黑龙江大学、江苏省自动化学会承办的第六届机电一体化技术…

期刊分区表2025年名单下载(经济学、管理学)

2025年期刊分区表包括SCIE、SSCI、A&HCI、ESCI和OAJ,共设置了包括自然科学、社会科学和人文科学在内的21个大类 本次分享的是期刊分区表2025年名单经济学类、管理学类,一共7631025条 一、数据介绍 数据名称:期刊分区表2025年名单 数据…

八股学习-JUC java并发编程

本文仅供个人学习使用,参考资料:JMM(Java 内存模型)详解 | JavaGuide 线程基础概念 用户线程:由用户空间程序管理和调度的线程,运行在用户空间。 内核线程:由操作系统内核管理和调度的线程&…

PostgreSQL_数据下载并保存(psycopg2)

目录 前置: 1 数据下载 1.1 多个股票多个交易日 1.2 一个交易日所有股票 2 数据保存,使用python中的psycopg2包 2.1 在PyCharm中创建新项目,并安装包 2.2 代码-多个股票多个交易日 2.3 代码-一个交易日所有股票 2.4 在 pgAdmin4 中…

启明星辰春招面试题

《网安面试指南》https://mp.weixin.qq.com/s/RIVYDmxI9g_TgGrpbdDKtA?token1860256701&langzh_CN 5000篇网安资料库https://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247486065&idx2&snb30ade8200e842743339d428f414475e&chksmc0e4732df793fa3bf39…

边缘计算革命:重构软件架构的范式与未来

摘要 边缘计算通过将算力下沉至网络边缘,正在颠覆传统中心化软件架构的设计逻辑。本文系统分析了边缘计算对软件架构的范式革新,包括分布式分层架构、实时资源调度、安全防护体系等技术变革,并结合工业物联网、智慧医疗等场景案例&#xff0c…

【读点论文】Chain Replication for Supporting High Throughput and Availability

在分布式系统中,强一致性往往和高可用、高吞吐是矛盾的。比如传统的关系型数据库,其保证了强一致性,但往往牺牲了可用性和吞吐量。而像 NoSQL 数据库,虽然其吞吐量、和扩展性很高,但往往只支持最终一致性,无…

Servlet、Servlet的5个接口方法、生命周期、以及模拟实现 HttpServlet 来写接口的基本原理

DAY15.1 Java核心基础 Servlet Servlet是一个接口,是java的基础,java之所以编写web的程序,接收请求并响应,就是因为Sevlet接口 Java 类实现了Servlet接口的时候就可以接收并响应请求,成为web服务器 Web服务器就是接…

贝叶斯公式的一个直观解释

E E E:抓到娃娃 H H H:坐地铁 H ˉ \bar H Hˉ:坐公交 P ( E ) P ( H ) P ( E ∣ H ) P ( H ‾ ) P ( E ∣ H ‾ ) P({E}) P({H}) P({E} \mid {H}) {P}(\overline{{H}}) {P}({E} \mid \overline{{H}}) P(E)P(H)P(E∣H)P(H)P(E∣H) P (…

Java 大视界 -- Java 大数据分布式计算中的通信优化与网络拓扑设计(145)

💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…

reconstruct_3d_object_model_for_matching例子

文章目录 1.获取om3文件2.准备可视化3.准备3D可视化4.读取3D模型5.显示成对注册结果16.显示成对注册结果27.联合注册模型8.处理图像8.1子采样8.2 图像计算与平滑8.3 三角测量 9.基于表面做3D匹配10.评估模型准确度10.1 在场景中找到模型10.2 计算模型和场景之间的距离 11.立体系…

【JavaWeb学习Day27】

Tlias前端 员工管理 条件分页查询&#xff1a; 页面布局 搜索栏&#xff1a; <!-- 搜索栏 --><div class"container"><el-form :inline"true" :model"searchEmp" class"demo-form-inline"><el-form-item label…

Webrtc编译官方示例实现视频通话

Webrtc编译官方示例实现视频通话 前言 webrtc官网demo中给了一个供我们学习和应用webrtc的一个很好的例子&#xff1a;peerconnection&#xff0c;这期我们就来编译和运行下这个程序看看视频通话的效果以。 1、打开源码工程 继上期源码编译完成后&#xff0c;我们使用vs打开…

大数据学习(80)-数仓分层

&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4dd;支持一…

刘强东突然发声:不该用算法压榨最底层兄弟!东哥,真正的人民企业家

今天忙了一天&#xff0c;很累&#xff0c;准备睡觉的时候&#xff0c;看到网上盛传的刘强东的朋友圈&#xff0c;东哥又在朋友圈发文了。 说实话&#xff0c;看完之后&#xff0c;感动&#xff0c;真的感动。 尤其是当我看到这两句话的时候。 1、我们所学的知识、商业模式、技…

Java 记忆链表,LinkedList 的升级版

文章目录 记忆链表 MemoryLinkedList实战源代码 众所周知&#xff0c;ArrayList 和 LinkedList 是 Java 集合中两个基本的数据结构&#xff0c;对应数据结构理论中的数组和链表。但在这两个数据结构&#xff0c;开发者们通常使用 ArrayList&#xff0c;而不使用 LinkedList。JD…

poetry安装与使用

文章目录 安装方法创建虚拟环境其他常用命令从 poetry.lock 中安装第三方依赖包 安装方法 安装命令&#xff08;全局安装&#xff0c;不要在虚拟环境中安装&#xff0c;方便后面创建环境使用&#xff09; pip install poetry修改虚拟环境路径&#xff08;首次使用poetry时执行&…

UVM config机制及uvm_resource_pool

目录 1. uvm_config_db 类源码 1.1 set 1.2 get 2. uvm_resource_pool 2.1 uvm_resource_pool::set 2.2 uvm_resource 3. usage 4. 小结 uvm提供一种uvm_config_db机制使得在仿真中通过变量设置来修改环境,使环境更加灵活。本文主要介绍uvm_config_db#(type)::get/set…

JAVA学习*接口

接口 在生活中我们常听说USB接口&#xff0c;那接口是什么呢&#xff1f; 在Java中&#xff0c;接口相当于多个类的一种公共规范&#xff0c;是一种引用数据类型。 定义接口 public interface IUSB {public static final String SIZE "small";public abstract vo…