stm32入门-----W25Q64存储器

前言

        本期我们就来学习W25Q64存储器的相关知识点,W25Qxx系列的存储器是使用SPI通讯方式来进行数据传输的,在我们学习51单片机的时候也学习过类似的存储器芯片也就是AT24C02,这两者都是属于外接的存储器,可以保证掉电不丢失很好的存储数据(Flash闪存),下面就一起来看看吧(视频:[11-2] W25Q64简介_哔哩哔哩_bilibili

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引脚图:

引脚

功能

VCCGND

电源(2.7~3.6V

CSSS

SPI片选

CLKSCK

SPI时钟

DIMOSI

SPI主机输出从机输入

DOMISO

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。不过有一点要注意的是擦除操作的时候是必须按照大于最小单元擦除,也就是至少按一个扇区去擦除(当然也是可以按块擦除,也可以整个芯片存储空间都擦除),当你想擦出数据的时候就要慎重考虑了,而不是你想擦哪就擦哪的。这些注意事项是需要重点理解的,下一期我们讲解代码的时候是需要用到的。

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

今日壁纸:

  • 7
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fitz&

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值