首页 > 其他分享 >STM32硬件篇:W25Q64

STM32硬件篇:W25Q64

时间:2024-09-01 11:51:12浏览次数:9  
标签:硬件 字节 引脚 芯片 W25Q64 STM32 SPI 地址 擦除

W25Q64简介

W25Qxx系列是一种低成本、小型化、使用简单(使用SPI通信协议)的非易失性(掉电不丢失)存储器,常用于数据存储、字库存储、固件程序存储等场景。

【注意】W25Qxx芯片只支持SPI的模式0和模式3。

存储介质:Nor Flash(闪存)

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

----------拓展----------

上述Dual SPI指双重SPI,当SPI通信只发送或只接收时有点浪费资源,但W25Qxx芯片的厂商不忍心浪费,对SPI做出了一些改进:在只发送时,可以同时用MOSI和MISO发送;在接收时,也可以同时用MOSI和MISO发送。即MOSI和MISO既可以发送又可以接收,一个SCK时钟同时发送或接收两位数据。

Quad SPI指四重SPI,对于W25Qxx芯片,除了SPI通信引脚,还有两个引脚:一个是WP写保护、一个是HOLD。这两个引脚,如果不需要的话也可以充当数据传输引脚。(加上MISO和MOSI,一共4个数据传输引脚)

有点并行传输的意思。

对于W25Qxx芯片,共有以下这些型号:

W25Q404Mbit512KByte
W25Q808Mbit1MByte
W25Q1616Mbit2MByte
W25Q3232Mbit4MByte
W25Q6464Mbit8MByte
W25Q128128Mbit16MByte
W25Q256256Mbit32MByte

【注意】其存储容量的地址为24位地址(最大分配16MB),因为每个字节都要分配一个地址,这样才能找到它们。但对于W25Q256芯片,24位地址是不够的。根据数据手册,其分为3字节地址模式和4字节地址模式,在3字节地址模式下,只能读写前16MB的数据;


模块硬件电路

如上为W25Q64模块的原理图,其各引脚功能如下:

引脚功能
VCC、GND电源(2.7~3.6V)
CS(SS)SPI从机选择
CLK(SCK)SPI时钟
DI(MOSI)主机输出从机输入
DO(MISO)主机输入从机输出
WP写保护(数据能否被写入)
HOLD数据保持

可以看出,此模块不使用WP和HOLD引脚(均为高电平) 。

【注意】关于HOLD,当你正常读写时突然产生中断,然后要用SPI去操控其他器件。这时如果把CS置回高电平,那时序就终止了。但如果你不想终止时序,又想操控其他器件,可以将HOLD引脚置低电平,这样芯片就hold住了:芯片释放总线,但芯片时序不会终止,而是会记住当前状态。HOLD置回高电平后,又会继续之前的时序。


W25Qxx内部结构

存储器划分:①对于一整个存储空间(以8MB为例),分为128块(一个块64KB)。对于每个块,又划分为16个扇区(一个扇区4KB);②对于整个空间,又可以划分成很多页,每页256字节(一个页包括:xxxx00~xxxxFF)。

xx0000~xxFFFF
扇区xxx000~xxxFFF
xxxxx0~xxxxxF

SPI控制逻辑:芯片内部进行地址锁存、数据读写等操作都可以由控制逻辑来自动完成,控制逻辑就相当于整个芯片的管理员。

状态寄存器:芯片是否忙碌、是否写使能、是否写保护都可以在状态寄存器里体现。

写控制逻辑:配合WP引脚实现硬件写保护。

高电压生成器:用于实现掉电不丢失。

页地址锁存/计数器:用于指定页地址,3位地址的前两位进入页地址锁存/计数器里

字节地址锁存/计数器:用于指定字节地址,3位地址的最后一位进入字节地址锁存/计数器里

页地址通过写保护和行解码来选择操作哪一页,字节地址通过列解码和256字节页缓存来进行指定地址的读写操作。又因为地址锁存都有计数器,地址指针在读写之后,自动加1。


对于256字节页缓存区,实际是一个256字节的RAM存储器。数据读写就是通过这个RAM缓存器来进行的。我们写数据,先将数据放到缓存区里,等时序结束,芯片再将缓存区的数据复制到对应的Flash里面(放入具体某一页里面),进行永久保存。


为什么要有缓存区呢,而不进行直接读写?这是因为SPI的写入频率是非常高的,而Flash的写入是比较慢的(而RAM的速度非常快),所以先放RAM里面存着。但由于RAM缓存区只有256个字节,因此连续的写入量不能超过256个字节。因此当时序结束后,芯片又要将RAM里的数据移入Flash里,这需要一定的时间,所以芯片会进入一段忙的状态


Flash操作注意事项

因为Flash作为一种掉电不丢失的存储器,为了保证掉电不丢失这个特性,同时还要保证存储容量足够大、成本足够低,所以Flash存储器会在其他地方(如操作便携性等)作出一些妥协和让步。

写操作时

1、写入操作时,必须先进行写使能。用SPI发生一个写使能指令即可。通过查询状态寄存器的WEL位来确定能否进行写入操作(1代表写使能)。

2、每个数据位只能由1改写为0,不能由0改写为1(成本原因或技术原因)。

3、写入数据前必须先擦除,擦除后,所有数据位变为1。发出擦除指令后,芯片也会进入忙状态。

4、擦除必须按最小擦除单元(整个存储区/按块擦除/按扇区擦除)进行,若只想擦除某一个字节,只能将其所在的最小擦除单元全部擦除。

5、连续写入多字节时,最多写入一页的数据,超过页尾位置的数据,会回到页首覆盖写入。

6、写操作结束后,芯片会进入忙状态,不响应新的读写操作。通过读取状态寄存器的BUSY位来判断芯片是否忙碌(BUSY为0代表不忙)。

读操作时

1、直接调用读取时序,无需使能,没有页的限制。

2、读取操作后不会进入忙状态,但不能在忙状态时读取。


一些SPI指令集

写使能:指令码---0x06;

写失能:指令码---0x04;

读取状态寄存器:指令码---0x05;数据位---S7~S0(寄存器8位中的某一位);

页编程(数据写入):指令码---0x02;数据位---3字节地址码、数据...

扇区擦除:指令码---0x20;数据位---3字节地址码;(此地址对应某个字节,芯片会直接对应到该字节所在扇区,并对该扇区进行擦除)

读取数据:指令码---0x03;数据位---3字节地址、数据...


标签:硬件,字节,引脚,芯片,W25Q64,STM32,SPI,地址,擦除
From: https://blog.csdn.net/qq_74114817/article/details/141759303

相关文章

  • STM32的寄存器详解
    目录前言一、 STM32单片机寄存器概述1.寄存器的作用2.寄存器的分类二、STM32内核寄存器1.程序计数器(PC)2.堆栈指针(SP)3.链接寄存器(LR)4.控制寄存器(CONTROL)三、STM32外设寄存器1.GPIO寄存器2.USART寄存器3.TIM定时器寄存器4.ADC寄存器四、寄存器的访问方式......
  • 单片机软件工程师与硬件工程师:协同共创智能未来
    摘要:本文深入探讨了单片机软件工程师与硬件工程师在单片机开发中的重要作用。详细阐述了软件工程师的职责包括需求分析、软件设计、编码实现、调试与测试以及维护与升级等,同时强调了其所需的编程语言、开发工具、算法与数据结构、操作系统、硬件知识、问题解决和团队合作等技能......
  • linux文件——文件系统——学习、理解、应用软硬件链接
        前言:本篇内容主要讲解文件系统的软硬件链接。经过前两篇文件系统的文章——讲解硬件(磁盘)、讲解文件系统底层,inode,我们本节内容可以很好的理解我们要讲解的内容。并且本节内容较少,友友们学习本节的时候将会比前几节相对轻松一些。     ps:友友们务......
  • 【STM32开发指南】手把手带你从零开始搭建工程(HAL库版)
    【前言】STM32微控制器因其高性能、低功耗和丰富的外设资源,在嵌入式系统开发中得到了广泛应用。在开发STM32项目时,创建工程是第一步,也是至关重要的一步。【STM32开发指南】手把手带你从零开始搭建工程(标准库版)_stm32开发教程-CSDN博客文章浏览阅读1.5k次,点赞40次,收藏30次。本......
  • 硬件工程师入门笔记---LDO原理和应用(来源--Trent带你学硬件)
    LDO原理LDO参数LDO手册解读 LDO设计要点及案例分析......
  • STM32--硬件读写W25Q64
    声明:我是跟着B站江科大的视频的学习过程中记录下来作者的文案,记录下来是为了方便自己日后复习。如果你也是跟着江科大的视频学习的,可以一起学习。我把其中一些白话进行了修改,并且添加了自己的一些理解。我只有一些pyhon基础,所以可能有错误,学起来也比较吃力,就把自己的一些理解......
  • STM32学习笔记,SPI通信协议(理论部分)
    SPI通信和I2C通信差不多,两个协议的目的都一样,都是实现主控芯片和各种外挂芯片之间的数据交流;有了数据交流的能力,主控芯片就可以挂载并操纵各式各样的外部芯片,来实现一个功能更强大的控制系统;课程安排与I2C通信一样,先学习SPI协议的软硬件规定;先用软件模拟的SPI,实现读写W25Q64......
  • STM32F411 标准库硬件SPI (硬件NSS/CS)驱动st7735--1.8寸TFT显示屏
    TFT的spi驱动文件完整工程网盘放在末尾#include"lcd_driver.h"staticuint16_tSPI_TIMEOUT_UserCallback(uint8_terrorCode);//液晶IO初始化配置voidLCD_Driver_Init(void){ SPI_InitTypeDefSPI_InitStructure; GPIO_InitTypeDefGPIO_InitStructure; /*......
  • 13、STM32MP157A-HDMI移植
    1、介绍​STM32MP157A系列SoC中默认没有HDMI相关控制器,FS-MP1A使用SiI9022芯片将RGB信号转化为HDMI信号。STM32MP157A集成LTDC(LCD-TFTDisplayController),提供一个24bitRGB并行接口用于连接到各种LCD和TFT面板​SiI9022A是一款HDMI传输芯片,......
  • STM32GPIO操作底层解析
    我们使用HAL和标准库时,常常忽略他两的底层,只知道怎么用不知其原理,其实是大忌,因为底层丢了代码的灵魂就丢了,对以后的Linux开发不利常用的指令函数:voidGPIO_WriteBit(GPIO_TypeDef*GPIOx,uint16_tGPIO_Pin,BitActionBitVal){/*Checktheparameters*/assert_p......