STM32F030 HAL库硬件SPI操作W25Q16存储芯片(一)

 芯片:华邦W25Q16JV

        W25Q16JV (16m位)串行闪存为有限空间、引脚和电源的系统提供了存储解决方案。25Q系列提供了超越普通串行闪存设备的灵活性和性能。它们非常适合代码跟踪到RAM,直接从Dual/Quad SPI (XIP)执行代码,并存储语音、文本和数据。该设备工作在单路2.7V ~ 3.6V电源上,下电时电流消耗低至1uA。

        W25Q16JV数组被组织成8192个可编程页,每个页256字节。一次最多可编程256字节。页面可以按16组(4KB扇区擦除)、128组(32KB块擦除)、256组(64KB块擦除)或整个芯片(芯片擦除)进行擦除。W25Q16JV分别有512个可擦扇区和32个可擦块。小的4KB扇区允许在需要数据和参数存储的应用程序中提供更大的灵活性。

        W25Q16JV支持标准串行外围接口(SPI),高性能双/四输出以及双/四I/O SPI:串行时钟,芯片选择,串行数据I/O0 (DI), I/01 (DO), I/O2,和I/O3。支持高达133MHz的SPI时钟频率,允许双I/O的等效时钟速率为266MHz (133MHz x 2)和四I/O的532MHz (133MHz x 4),当使用快读双/四I/O指令时。这些传输速率可以超过标准的异步8位和16位并行闪存。

        此外,该设备支持JEDEC标准制造商和设备ID和SFDP寄存器,一个64位唯一序列号和三个256字节的安全寄存器。

        芯片封装与引脚介绍如下:

STM32F030 HAL库硬件SPI操作W25Q16存储芯片(一)_第1张图片

STM32F030 HAL库硬件SPI操作W25Q16存储芯片(一)_第2张图片

电路图如下:

STM32F030 HAL库硬件SPI操作W25Q16存储芯片(一)_第3张图片

引脚描述

1、 Chip Select (/CS)

SPI Chip Select (/CS)引脚启用和禁用设备操作。当/CS高时,设备被取消选中,串行数据输出(DO,或IO0, IO1, IO2, IO3)引脚处于高阻抗。当取消选中时,设备的功耗将处于待机水平,除非正在进行内部擦除、程序或写状态寄存器循环。当/CS降低时,设备将被选中,功耗将增加到活动级别,可以向设备写入指令并从设备读取数据。在上电后,/CS必须从高转换到低,然后才会接受新的指令。/CS输入必须在上电和下电时跟踪VCC供电电平(参见“写保护”和图58)。如果需要,可以在/CS引脚上使用一个上拉电阻来实现这一点。

2、串行数据输入,输出和IOs (DI, DO和IO0, IO1, IO2, IO3)

W25Q16JV支持标准SPI,双SPI和四SPI操作。标准SPI指令使用单向DI(输入)引脚串行地将指令、地址或数据写入串行时钟(CLK)输入引脚上升边缘上的设备。标准SPI还使用单向DO(输出)从CLK下降边缘上的设备读取数据或状态。双和四SPI指令使用双向IO引脚串行写入指令,地址或数据到CLK上升沿上的设备,并从CLK下降沿上的设备读取数据或状态。四方SPI指令要求在状态寄存器-2中设置非易失四方使能位(QE)。当QE=1时,/WP引脚变成IO2, /HOLD引脚变成IO3。 

3、写保护(/WP)写保护(/WP)引脚可以用来防止状态寄存器被写入。

与状态寄存器的块保护(CMP, SEC, TB, BP2, BP1和BPO)位和状态寄存器保护(SRP)位一起使用,小到4KB扇区或整个内存阵列都可以进行硬件保护。/WP引脚低电平激活。

4、保存(/保存)/HOLD引脚允许设备在被主动选择时暂停。

当/HOLD被压低,而/CS被压低时,DO引脚将处于高阻抗,DI和CLK引脚上的信号将被忽略(不关心)。当/HOLD值高时,设备可以恢复运行。当多个设备共享相同的SPI信号时,/HOLD函数可能很有用。/HOLD引脚处于低电平。当状态寄存器-2的QE位设置为Quad I/O时,/HOLD引脚功能不可用,因为该引脚用于IO3。Quad I/O操作的引脚配置如图1a-c所示。

5 、Serial Clock (CLK)串口时钟SPI串行时钟输入(CLK)引脚为串行输入和输出操作提供计时。

(“看到SPI操作”)

6、RESET

SOIC-16和TFBGA包上有专用的硬件/RESET引脚。当它被驱动在最低-1uS的时间内。该设备将终止任何外部或内部操作,并恢复到开机状态。

状态寄存器

1、 忙(Busy)

忙在状态寄存器S0中是个只读位。当设备在执行页编程、扇区擦除、块擦除、芯片擦除或者写状态寄存器指令时会置成状态1。忙状态时设备将忽略后续指令,除了读状态寄存器和擦除暂停指令(参见AC特性中tw、tPP、tSE、tBE和tCE).当编程写、擦除或者写状态寄存器指令完成时,位忙会清成状态0---标识设备已为后续指令做好准备。

2、 写使能锁(WriteEnable Latch ---WEL)

WEL在状态寄存器S1中是个只读位。在执行写使能指令时被置成1。当设备停止写时,位WEL将清成0。停止写状态发生在加电时或者 在停止写、页编程、扇区擦除、块擦除、芯片擦除、写状态寄存器之后。

3 、块保护位(BlockProtect Bit ------BP2、BP1、BP0)

         块保护位在状态寄存器S4、S3、S2中是非易失读写位,它提供写保护控制和状态。块保护位可以使用写状态寄存器指令设置(参见AC特性里tw)。编程写和擦除指令可以保护整个或部分内存数组,或者没有一个内存数组被保护。块保护位出厂设置为0---即不保护。

4、 顶端块或者底部块保护(Top/BottomBlock Protect----TB)

         根据TB数组(TB = 0,顶端;TB=1,底部)是否出现在状态寄存器保护列表里,非易失TB位决定块保护位(BP2、BP1、BP0) 是否受保护。TB出厂设置为0。TB位可以通过基于SRP0、SRP1和WEL位的写状态寄存器指令设置。

5、 扇区/块保护(Sector/BlockProtect----SEC)

非易失性扇区保护位(SEC)控制 块保护位(BP2、BP1、BP0)是否保护TB数组里的4KB扇区(SEC=1)或者64KB块(SEC=0)。这个TB(TB=0,顶端;TB=1,底部)数组显示在状态寄存器保护列表中。SEC默认设置为0。

6、 状态寄存器保护(SRP1,SRP0)

         状态寄存器保护位(SRP1和SRP0)在状态寄存器(S8、S7)中是非易失性读写位。SRP控制写保护方式:软件保护、硬件保护、掉电或者一次性可编程保护。

7、 擦除暂停状态(EraseSuspend Status---SUS)

         暂停状态位在状态寄存器(S15)中是个只读位。它在执行一次擦除暂停指令(75h)后自动置成1。在擦除恢复指令(7Ah)后自动清0.如同掉电、上电循环一样。

指令集

 写使能(06h)

写使能指令会将状态寄存器中的写使能锁WEL位置成1.WEL位优先级需高于页编程、扇区擦除、块擦除、芯片擦除以及读状态寄存器指令。写使能指令通过使片选信号(/CS)低电平,在时钟信号(CLK)上升沿时提取指令码“06h”到DI引脚时载入,然后在片选信号高电平时驱动。

STM32F030 HAL库硬件SPI操作W25Q16存储芯片(一)_第4张图片

 

禁止写(04h)

禁止写指令会将状态寄存器中的写使能锁WEL位置成0.禁止写指令通过驱动片选信号低电平,提取指令码”04h”到DI脚时载入,然后在片选信号高电平时驱动。记住,WEL位在加电、写状态寄存器、页编程、块擦除、芯片擦除指令完成后自动重置。

STM32F030 HAL库硬件SPI操作W25Q16存储芯片(一)_第5张图片

 

读状态寄存器1(05h) 和 读状态寄存器2(35h)

读状态寄存器指令允许读取8-bit状态寄存器。这个指令通过驱动片选信号(/CS)为低电平时,然后在时钟信号(CLK)上升沿提取指令码(05h---寄存器1;35h---寄存器2)送入DI脚时载入。状态寄存器位在时钟信号下降沿按照MSB顺序取出,送到DO引脚。状态寄存器位参考图标3a和3b。

读状态寄存器指令可以在任何时间使用。这就允许通过检查BUSY状态位来判断循环指令是否完成、设备能否接受其他指令。状态寄存器可以持续读取。该指令在片选信号高电平时完成。

STM32F030 HAL库硬件SPI操作W25Q16存储芯片(一)_第6张图片 

写状态寄存器(01h)

         写状态指令允许状态寄存器可写。必须先执行写使能指令,从而使设备能够接收到写状态寄存器指令(状态寄存器WEL位必须为1)。一旦写使能,该指令通过使片选信号低电平,发送指令码”01h”,然后写状态寄存器数据字节时载入。

         仅非易失性状态寄存器位SRP0,SEC,TB,BP2,BP1,BP0(对应状态寄存器1的第7位,第5位,第4位,第3位,第2位) 以及QE,SRP1(状态寄存器2的第9,第8位)是可写的。其他只能的状态寄存器位不受写状态寄存器影响。

         在第8个或者第16个时钟后,必须拉高片选信号。如果不这样操作,将不执行写状态寄存器指令。如果第8个时钟后片选信号被拉高,则QE和SRP1位将清0。在片选信号被置为高电平时,自计时写寄存器循环将着手一个tw(参见AC特性)的时间间隔。写状态寄存器循环在执行时,然后可以检查寄存器BUSY位。BUSY为1,则表示正在写寄存器;为0,表示写循环完成或在准备接收其他指令。写寄存器指令完成后WEL位将被清0。

         写状态寄存器指令可以设置块保护位(SEC,TB,BP2,BP1以及BP0),用来保护擦除和编程写指令时的内存。被保护区变成只读。  它也可以设置状态寄存器保护位(SRP0,SRP1)。这些位与写保护引脚(/WP)连接,锁起或者一次性编程(OTP)特性来禁止写状态寄存器。所有状态寄存器位的出厂默认设置都为0。

读数据(03h)

         这个指令可以按顺序从内存中读出一个或多个数据字节。这个指令通过拉低片选信号,提取指令码”03h”加上一个24-bits地址(A23-A0) 放到DI引脚中来初始化。指令码和地址位在时钟信号的上升沿载入。当地址接受后,按照MSB原则在时钟信号下降沿将指定地址上的内存数据将被提取到DO引脚。当一个字节取出后,地址自增长,从而组成一个连续数据流。这意味着整个内存读可以通过单一的指令来访问,只要时钟一直继续。片选信号为高电平时该指令结束。

         当正在擦除指令、编程写、或者写循环(BUSY = 1)时,读数据指令将被忽略并且在当前循环中不起作用。读数据指令允许时钟速率从D.C. 到 fR的最大值(参见AC电子特性)。

下一篇文章主要分享程序编写部分

你可能感兴趣的:(stm32,c语言,单片机)