问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

STM32入门:W25Q64存储器详解

创作时间:
作者:
@小白创作中心

STM32入门:W25Q64存储器详解

引用
CSDN
1.
https://m.blog.csdn.net/m0_73633088/article/details/140954999

W25Q64存储器是一种基于SPI通讯方式的非易失性存储器,广泛应用于数据存储、字库存储和固件程序存储等场景。它具有低成本、小型化和使用简单的特点,存储容量为8Mbit/8MByte,支持80MHz、160MHz和320MHz的时钟频率。本文将详细介绍W25Q64存储器的基本概念、硬件电路、结构框图和注意事项,帮助读者更好地理解和使用这种存储器。

W25Q64存储器

1.基本概念

  • W25Qxx系列是一种低成本、小型化、使用简单的非易失性存储器,常应用于数据存储、字库存储、固件程序存储等场景
  • 存储介质:Nor Flash(闪存)
  • 时钟频率:80MHz(标准SPI,一个时钟发送一位) / 160MHz (Dual SPI 双重SPI,一个时钟发送两位) / 320MHz(Quad SPI 四重SPI,一个时钟发送四位)
  • 存储容量(24位地址):
  • W25Q40: 4Mbit / 512KByte
  • W25Q80: 8Mbit / 1MByte
  • W25Q16: 16Mbit / 2MByte
  • W25Q32: 32Mbit / 4MByte
  • W25Q64: 64Mbit / 8MByte
  • W25Q128: 128Mbit / 16MByte
  • W25Q256: 256Mbit / 32MByte

在我们学习51单片机的时候也学习过类似的存储器芯片也就是AT24C02,不过相较于AT24C02本期学习的W25Qxx系列的芯片存储容量是以Mb为单位的容量,而AT24C02基本上是Kb为单位的容量,W25Qxx系列是一种掉电不丢失数据的存储器。本期我们以学习W25Q64作为示例,其他系列的除了存储容量上的不同功能使用上基本上是一致的。

2.硬件电路

W25Q64引脚图:

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

电路图:

3.结构框图

下面展示的是W25Q64的结构图,这里我们可以看到存储空间8MB分为了127个块(Block),每一个块的存储容量为64KB,然后每个块又分为了16个扇区,每一个扇区的存储容量为4KB。前面我们说到过W25Qxx系列是24位地址的,也就是三字节作为地址的寻址位,那么24字节对应最大的地址存储是16MB,而我们学习的W25Q64是8MB的,所以其最大地址位7F FF FF h(十六进制),只用了一半。下面框图虽然没有展示更加详细的划分,但是每一个扇区还可以划分为多个页,每一个页的大小是256个字节。这点其实跟计算机组成原理学过的知识点是一样的。

另外我们看到左下角部分,这个是SPI控制逻辑,这个是整个芯片的管理员,我们读写数据都是通过这个控制器去完成的,当我们写入数据的时候数据会通过SPI控制逻辑进入到右边的缓存页区,缓存区域的存储容量是256个字节,我们写入的数据会暂时存储到这个区域,也就是说我们一次性写入的数据不能超过256个字节,这是有限制的,当完成写入的时候,缓存区会把里面的数据搬运到块区存储起来,这里W25Q64会处于一个忙的状态,这时候状态寄存器BUSY置1,芯片是无法执行其他任何操作的,回拒收其他指令。

4.注意事项(重点)

写入操作时:

  1. 写入操作前,必须先进行写使能
  2. 每个数据位只能由1改写为0,不能由0改写为1
  3. 写入数据前必须先擦除,擦除后,所有数据位变为1
  4. 擦除必须按最小擦除单元进行
  5. 连续写入多字节时,最多写入一页的数据,超过页尾位置的数据,会回到页首覆盖写入
  6. 写入操作结束后,芯片进入忙状态,不响应新的读写操作

读取操作时:

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

这里总结一下上面这些注意事项,对于写入方面,这跟我们之前遇到的不一样,不是说写入下一个数据的时候就会把之前一个数据给覆盖掉存储现在要用的数据,而是当要写入数据的时候这个存储器会有一个限制的,也就是写入的数据1可以改为0,而0不能去改写为1,也就是说没有覆盖之前数据的功能,所以这里是必须先去执行擦除操作,也就是每一个位都设置为1,当写入数据的时候如果要存放的数据位为1就保持不变,如果为0那就把1改写为0。不过有一点要注意的是擦除操作的时候是必须按照大于最小单元擦除,也就是至少按一个扇区去擦除(当然也是可以按块擦除,也可以整个芯片存储空间都擦除),当你想擦出数据的时候就要慎重考虑了,而不是你想擦哪就擦哪的。这些注意事项是需要重点理解的,下一期我们讲解代码的时候是需要用到的。

以上就是本期的全部内容了,我们下次见!

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号