手把手系列--华邦W25Q64JV Flash操作指南

一、目的

        前段时间淘了一个STM32H750XBH6_ArtPi开发板,板载两颗华邦的Flash芯片,一颗为W25Q64JV(8Mbytes),通过STM32H750XBH6的QUADSPI控制用于XIP;一颗为W25Q128JV(16Mbytes)用于数据存储,通过标准SPI访问。

        那么本篇的目的就是给大家介绍介绍W25Q64JV这块颗粒。

W25Q64JV - Serial NOR Flash - 闪存 - 华邦电子https://www.winbond.com/hq/product/code-storage-flash-memory/serial-nor-flash/index.html?__locale=zh&partNo=W25Q64JV

        参考官网的资料

二、介绍

        

        W25Q64JV存储容量为8Mbytes,每页256bytes,总共有32768个可编程页,最大一次可编程大小为256bytes。一次擦除大小可以为4K、32K、64K字节(K=1024)或者全擦除。

        支持标准SPI、Dual SPI、Quad SPI,最大操作时钟为133MHz。

         超过10万次的擦除编程。

        编程即写数据,由于Flash的特性,只能从1编程0,所以写数据之前Flash里面的数据不是0xFF就必须先擦除,然后才能写数据。

        擦除即将Flash里面的数据恢复为0xFF的过程。

        

         标准SPI使用CS、CLK、DO、DI。

        Dual SPI使用CS、CLK、IO0、IO1。

        Quad SPI使用CS、CLK、IO0、IO1、IO2、IO3。

        无论哪种SPI都是使用半双工方式。

         CS拉低则代表设备被选择,即可以读写寄存器或者数据。

        注意8bit的指令无论使用什么SPI都是通过DI(IO0)写入设备,也就是说,即使你是Dual、Quad SPI发送8bit指令时,都是通过单线DI写入。

         从上图可以到一个Sector为4KBytes,一个Block为64KBytes。

        SPI支持4中模式(时钟的相位/极性),此Flash支持Mode0和Mode3。

        标准SPI指令DI用于输入指令,DO主机从设备读取数据和状态。

        当使用指令如Fast Read Dual Output (3Bh)和Fast Read Dual I/O (BBh)时必须使用Dual SPI指令方式。

        当使用指令如Fast Read Quad Output (6Bh)和Fast Read Quad I/O (EBh)时必须使用Quad SPI指令方式。需要特别注意Quad SPI指令需要状态寄存器2的QE位设置为1才可以使用(默认就是1),并且该位时非易失的,也就是或如果你改了这个位的状态,断电就会一直保存其值。

         

         软复位需要依次执行两条指令Enable Reset (66h) & Reset (99h)(复位使能指令和复位指令)。在复位期间不处理任何新指令。

                写保护说明

                上电后设备自动进行写禁止状态(WEL为0,WEL是只读位)。在Page Program, Sector Erase, Block Erase, Chip Erase or Write Status Register instruction(页编程、区擦除、块擦除、芯片擦除或者写状态寄存器指令)之前必须先进行写使能指令。在编程、擦除、写状态寄存器指令完成后,WEL自动变成0。

                

         BUSY位是状态寄存器0的第0位,并且是只读位,当执行页编程、区擦除、块擦除、芯片擦除、写状态寄存器、擦除/编程安全寄存器指令时,其值位1;并且在此期间不再接收新的指令,但是可以接收读状态寄存器指令和擦除编程挂起指令。

        

        QE位出厂时被设置为1,并且不能被设置为0。有些型号的Flash QE是设置为0的。

         在时钟的上升沿采样数据,并且是MSB,即第一个bit为最高bit位。

三、寄存器说明

        

 

         写使能寄存器

        

        读状态寄存器

         可以一次读指令连续读出多次状态值,一般情况下,我们会一次读一个值,然后延时一段时间再重新读取。

        

        标准SPI读取数据指令

                可以一次读取多个数据,内部地址自增,这样我们就可以一次读取指定字节的数据。

        单线快速读取数据指令 

         该指令与指令03h的区别就是,可以用最大时钟频率去读取,但是需要添加一个dummy byte(虚拟字节),不关系其具体值。一般可以设置位0xFF。

        双线快速读取数据指令

        

         四线快速读取数据指令

                注意上面的读取操作,指令、地址、虚拟字节都是DI(IO0)上传递,其他IO1-IO3都是高阻状态

                下面这条读取指令地址阶段也是两条数据线进行传递。

                 下面这条指令地址阶段、交替字节(0xFxh)、虚拟字节、数据阶段都是四条线传递

        页编程

        

        一次页编程的最大大小为256个字节,如果是满页写,要注意地址一定要被256整除;

        当然也可以进行部分写,比如说写10字节。

        在进行部分写的时候如果超过当前页的地址范围,就会回到该页开头覆盖写。

        在写的过程中可以检查BUSY位,以确定是否已经写完成。

        

        四线页编程

                跟一线页编程行为基本一样。

        区擦除

        

         一次擦除4KBytes,擦除之前必须发送写使能指令,然后发送擦除指令,擦除完毕BUSY会自动变为0。

         块擦除指令

        和区擦除指令一样,区别只是一次擦除32Kbytes。

         块擦除指令

        

          和区擦除指令一样,区别只是一次擦除64Kbytes。

        芯片擦除指令

         一次全擦除指令,不建议经常使用,耗时并且会损耗Flash。

        读取厂商/设备编号

        

        需要特别关注的时间参数

 

        相邻两次CS拉低的时间间隔,很多Quad SPI外设设置时需要设置。 

         至此,对于芯片手册的学习基本完成。后面我会基于STM32XBH6_ArtPi开发板分别介绍如何使用STM32的QSPI和SPI分别实现对Flash的读写。

  • 7
    点赞
  • 82
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值