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

一、目的

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

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

        参考官网的资料

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

二、介绍

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

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

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

         超过10万次的擦除编程。

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

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

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

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

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

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

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

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

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

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

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

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

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

        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),并且该位时非易失的,也就是或如果你改了这个位的状态,断电就会一直保存其值。

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

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

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

                写保护说明

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

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

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

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

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

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

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

三、寄存器说明

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

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

         写使能寄存器

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

        读状态寄存器

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

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

        

        标准SPI读取数据指令

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

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

        单线快速读取数据指令 

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

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

        双线快速读取数据指令

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

         四线快速读取数据指令

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

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

                下面这条读取指令地址阶段也是两条数据线进行传递。手把手系列--华邦W25Q64JV Flash操作指南

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

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

        页编程

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

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

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

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

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

        

        四线页编程

手把手系列--华邦W25Q64JV Flash操作指南                跟一线页编程行为基本一样。

        区擦除

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

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

         块擦除指令

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

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

         块擦除指令

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

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

        芯片擦除指令

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

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

        读取厂商/设备编号

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

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

上一篇:迅为龙芯iTOP2K1000开发板NAND FLASH启动(烧写系统到nand)


下一篇:Keil5 HAL库操作 flash 存储数据(stm32f103c6t6),实现断电保存数据