注意:只记录FPGA设计项目中使用到的部分内容
目录
1. 特征
-
16Mbit--2Mbyte空间
-
写入一页数据(256byte)需1.4ms
-
可单扇区(512Kbit)擦除或整块(16Mbit)擦除
-
SPI总线兼容的串行接口
-
最大50Mhz时钟
2. 概述描述
-
可同时编程1-256 byte
-
一共32个扇区(sector),256 page/sector,256 byte/page
图2.1 M25P16逻辑图
表2.1 信号名
3. 信号描述
Serial Data Output (Q)
在串行时钟的下降沿,输入的数据data被串行地输出。
Serial Data Input (D)
输入数据可以是命令、地址或数据,在串行时钟的上升沿被锁存。
Serial Clock (C)
串行时钟为接口提供时序,命令、地址或数据在时钟上升沿被锁存,在时钟下降沿之后,输出数据Q改变。
Chip Select (S)
片选信号S为高时,flash未被选中,数据输出端Q为高阻态,除非内部编程擦除或写状态寄存器时,其处于待机模式,片选信号S为低时,flash处于激活状态。
Hold (HOLD)
保持信号用于在片选信号S为低时,取消flash与其他任何设备之间的通信。
Write Protect (W)
写保护信号的主要目的是冻结受编程或删除命令保护的内存区域。
4. SPI模式(详见链接)
支持SPI两种通信模式:
模式0:CPOL = 0,CPHA = 0;
模式3:CPOL = 1,CPHA = 1;
图4.1 SPI模式0、模式3时序
即M25P16:上升沿接收数据,下降沿数据改变
注意:Mode0模式的前8个Sclk周期之内,从机只能接收主机发送的数据,不能向主机发送数据,之后的时钟周期之内,从机和主机之间可以进行全双工通信,可以用于主机先向从机发命令,然后从机接收到命令后再向主机返回数据。
5. 操作特征
-
Page Programming
要对一个数据字节进行编程,需要两个命令:一个写使能(WREN)字节,和一个由四个字节加上数据组成的页编辑(PP)序列。接下来是内部编程周期(持续时间tPP)。
为了分散这种开销,页编辑(PP)命令允许一次编程最多256个字节(从1更改为0),前提是它们位于同一页内存上的连续地址中。
-
Sector Erase and Bulk Erase
页编辑(PP)命令允许将位从1重置为0。在应用这个编程之前,内存的字节需要全被擦除位1(FFh)。这既可以使用扇区擦除(SE)命令一次实现一个扇区,也可以使用批量擦除(BE)命令在整个内存中实现。这将启动一个内部的擦除循环(持续时间为tSE或tBE)。
擦除命令之前必须带有写使能(WREN)命令。
注意:每个页面都可以单独编程(位从1到0编程)。设备为扇区或批量可擦除(位从0擦除到1),但不可单独擦除页面。
-
Polling During a Write, Program or Erase Cycle
写状态寄存器(WRSR)通过不等待最坏情况下的延迟来提升时间,状态寄存器中提供了正在进行的写入(WIP)位,以便应用编程可以监视其值,轮询它以确定何时前一个写入周期、编程周期或擦除周期完成。
-
Status Register
状态寄存器包含许多可通过特定命令读取或设置(适当时)的状态和控制位。
WIP bit :指示内存是否忙于写状态寄存器、编程或擦除周期。
WEL bit :指示内部写入使能锁存器的状态。
BP2, BP1, BP0 bits :定义要被软件保护的区域的大小,以防止被编程和擦除。
SRWD bit :状态寄存器写入禁用(SRWD)位与写入保护(W)信号一起操作。状态寄存器写禁用(SRWD)位和写保护(W)信号允许将设备置于硬件保护模式。在此模式下,状态寄存(SRWD、BP2、BP1、BP0)的非易失性位变成只读位。
-
Protection Modes
使用非易失性存储设备的环境可能噪声很大。没有SPI设备能在噪声过大的情况下正常工作。为了解决这个问题,M25P16拥有以下数据保护机制:
1:开机复位和内部定时器(tPUW)可以在电源超出操作规范时提供保护,防止意外变化;
2:编程、擦除和写状态寄存器命令在被接受执行之前,检查它们是否是由8的倍数的时钟脉冲组成;
3:所有修改数据的命令之前都必须有一个写使能命令来设置写使能锁存器位。这个比特通过以下事件返回到它的重置状态:
-
上电
-
写禁用命令(WRDI)完成
-
写状态寄存器(WRSR)、页编程(PP)、扇擦除(SE)、块擦除(BE)命令完成
SPM :块保护(BP2、BP1、BP0)位允许部分内存配置为只读。这是软件保护模式。
HPM :写保护(W)信号允许对块保护(BP2、BP1、BP0)位和状态寄存器写禁用(SRWD)位进行保护。这是硬件保护模式。
除了低功耗特性之外,深度电源关闭模式还提供了额外的软件保护,防止无意的写、编程和擦除命令,因此除了一条特定命令(从深度电源关闭命令释放)之外,其他所有命令都被忽略。
表5.1 保护区大小
6. 命令
所有 操作必须在片选信号(S)低电平下进行。
表6.1 命令
-
写使能(WREN)
写使能(WREN) 命令用于设置内部写使能锁存器位。在页编程、扇区擦除、整块擦除和写状态寄存器之前,必须先执行写使能。当片选信号拉低后,就开始执行写使能命令,接着传输命令。命令发送完后,片选信号置为高电平。
图6.2 写使能时序
-
读标识命令(RDID)
读取标识(RDID)命令允许读取8位的制造商标识,然后是两个字节的设备标识。制造商标识由JEDEC指定,意法半导体(公司名)的识别值为20h。设备标识由设备制造商指定,第一个字节表示内存类型(20h),第二个字节表示设备的内存容量(15h)。
在擦除或编程循环正在进行时,任何读取识别(RDID)命令都不会被解码,并且对正在进行的循环没有影响。
首先通过驱动芯片选择(S)低来选择设备。然后,该命令的8位命令代码被移位。接下来是存储在存储器中的24位设备标识,在串行数据输出(Q)上被移出,每个位在串行时钟(C)的下降沿期间被移出。
命令时序如图6.3所示在数据输出期间,通过随时进行芯片选择(S)高驱动,终止读取识别(RDID)命令。
当芯片选择(S)驱动高时,设备处于备用电源模式。一旦进入备用电源模式,设备等待被选择,以便它可以接收、解码和执行命令。
表6.2 读取标识(RDID)数据输出序列
图6.3 读取标识命令时序和数据输出时序
-
读状态寄存器(RDSR)
读取状态寄存器(RDSR)命令允许读取状态寄存器。状态寄存器可以在任何时候被读取,即使在一个编程、擦除或写状态寄存器周期正在进行中。当其中一个循环正在进行时,建议在向设备发送新命令之前检查ldquo;正在写入rdquo;(WIP)位。也可以连续读取状态寄存器,如图6.5。
图6.4 读取状态寄存器(RDSR)命令时序和数据输出时序
图6.4 状态寄存器格式
WIP bit :“正在写入”(WIP)位指示内存是忙于写入状态寄存器、编程或擦除周期。当设置为1时,这样的循环正在进行,当重置为0时,没有这样的循环正在进行。
WEL bit :写入使能锁存器(WEL)位表示内部写入使能锁存器的状态。当设置为1时,内部写使能锁存设置,当设置为0时,内部写使能锁存重置,不接受写状态寄存器、编程或擦除命令。
BP2, BP1, BP0 bits :块保护(BP2、BP1、BP0)位是非易失性的。它们定义了要被软件保护的区域的大小,以防止编程和擦除命令的使用。这些位是用写状态寄存器(WRSR)命令写入的。当块保护(BP2、BP1、BP0)位设置为1时,相关内存区域。不受页面编程(PP)和扇区擦除(SE)命令的保护。在没有设置硬件保护模式的情况下,可以写入块保护(BP2、BP1、BP0)位。当且仅当两个块保护(BP2、BP1、BP0)位均为0时,才执行批量擦除(BE)命令。
SRWD bit :状态寄存器写入禁用(SRWD)位与写入保护(W)信号一起操作。状态寄存器写禁用(SRWD)位和写保护(W)信号允许设备处于硬件保护模式(当状态寄存器写禁用(SRWD)位设置为1,并且写保护(W)被驱动为低)。在此模式下,状态寄存器(SRWD、BP2、BP1、BP0)的非易失性位变成只读位,而写状态寄存器(WRSR)命令不再被接受执行。
-
Write Status Register (WRSR)
写入状态寄存器(WRSR)命令允许将新的值写入状态寄存器。在接受它之前,必须先执行了写入启用(WREN)命令。在写入启用(WREN)命令被解码并执行后,设备将设置写入启用锁存器(WEL)。
写入状态寄存器(WRSR)命令通过驱动芯片选择(S)低来输入,在串行数据输入(D)上的命令码和数据字节之后。
命令时序如图6.5所示写入状态寄存器(WRSR)命令对状态寄存器的b6、b5、b1和b0没有影响。b6和b5总是被读取为0。
图6.5 写入状态寄存器(WRSR)命令时序
芯片选择(S)必须在锁存数据字节的第8位之后拉高。如果不是,则不执行写入状态寄存器(WRSR)命令。一旦芯片选择(S)被驱动得较高,就会启动自定时写状态寄存器周期(其持续时间为tW)。当写入状态寄存器循环正在进行时,仍然可以读取状态寄存器以检查正在写入(WIP)位的值。在自定时写入状态寄存器周期中,正在写入(WIP)位为1,完成时为0。当循环完成后,将重置写入启用锁存器(WEL)。
写状态寄存器(WRSR)命令允许用户更改块保护(BP2、BP1、BP0)位的值,以定义将被视为只读区域的大小,如表5.1所示。写状态寄存器(WRSR)命令还允许用户根据写保护(W)信号来设置或重置状态寄存器写禁用(SRWD)位。状态寄存器写禁用(SRWD)位和写保护(W)信号允许将设备置于硬件保护模式(HPM)。输入硬件保护模式(HPM)后,将不会执行写入状态寄存器(WRSR)命令。
-
Read Data Bytes (READ)
首先通过驱动芯片选择(S)低来选择设备。读取数据字节(READ)命令的命令代码后面是一个3字节地址(A23-A0),每个位在串行时钟(C)的上升沿期间被锁定,该地址的内存内容在串行时钟(C)的下降沿期间串行数据输出(Q)上移出,每个位以最大频率fR移出。
被寻址的第一个字节可以在任何位置。在每个字节数据移出后,地址自动增加到下一个更高的地址。因此,可以用单个的读取数据字节(READ)命令来读取整个内存。当达到最高地址时,地址计数器会转到000000h,允许读取序列无限期地继续。
读取数据字节(READ)命令通过驱动芯片选择(S)高而终止。芯片选择(S)可以在数据输出期间的任何时候驱动高。当正在进行读取数据字节、编程或写入循环时,任何读取(READ)命令都会被拒绝,而不会对正在进行的循环产生任何影响。
图6.6 读取数据字节(READ)命令时序和数据输出时序
-
Page Program (PP)
页面编程(PP)命令允许在内存中编程字节(将位从1改为0)。在接受它之前,必须先执行了写入启用(WREN)命令。在写入启用(WREN)命令被解码后,设备将设置写入启用锁存器(WEL)。
驱动芯片选择(S)低,然后是命令码,三个地址字节和至少一个数据字节在串行数据输入(D)。如果8个最不重要的地址位(A7-A0)不是全部为零,则超出当前页面末端的所有传输数据都从同一页面的起始地址(从8个最不重要的地址位(A7-A0)全部为零的地址)进行编程。芯片选择(S)必须在整个序列期间驱动低。
如果向设备发送了超过256个字节,则丢弃以前锁存的数据,并保证最后256个数据字节在同一页面内被正确编程。如果发送到设备的数据字节少于256,则在请求的地址正确编程,而不会对同一页面的其他字节产生任何影响。
芯片选择(S)必须在第8位数据字节锁定后高驱动,否则不会执行页面编程(PP)命令。
一旦芯片选择(S)驱动得较高,则将启动自定时页面编程周期(其持续时间为tPP)。当页面编程周期正在进行时,可以读取状态寄存器以检查正在写入(WIP)位的值。正在写入(WIP)位为1,完成时为0。在周期完成之前的某个未指定时间,重新启用锁(WEL)位。
应用于受块保护(BP2、BP1、BP0)位保护的页面编程(PP)命令不会执行。
图6.7 页编程(PP)命令时序
-
Sector Erase (SE)
扇区擦除(SE)命令将选定扇区内的所有位设置为1(FFh)。在接受它之前,必须先执行了写入启用(WREN)命令。在写入启用(WREN)命令被解码后,设备将设置写入启用锁存器(WEL)。扇区擦除(SE)命令通过驱动芯片选择(S)低输入,然后是命令代码和串行数据输入(D)上的三个地址字节输入扇区内的任何地址都是是扇区擦除(SE)命令的有效地址。芯片选择(S)必须在整个序列期间驱动低。
芯片选择(S)必须在最后一个地址字节的第8位之后被高驱动,否则将不会执行扇区擦除(SE)命令。一旦芯片选择(S)驱动得较高,则将启动自定时扇区擦除周期(其持续时间为tSE)。当扇区擦除周期正在进行时,可以读取状态寄存器以检查正在写入(WIP)位的值。在自定时的扇区擦除周期中,正在进行的写入(WIP)位为1,在完成时为0。在周期完成之前的某个未指定时间,重新启用锁(WEL)位。
应用于受块保护(BP2、BP1、BP0)位保护的页面的扇区擦除(SE)命令不会执行。
图6.8 扇去擦除命令时序
-
Bulk Erase (BE)
块擦除(BE)命令将所有位设置为1(FFh)。在接受它之前,必须先执行了写入启用(WREN)命令。在写入启用(WREN)命令被解码后,设备将设置写入启用锁存器(WEL)。
与Sector Erase (SE)命令不同的是,不需要写入地址。
只有当所有块保护(BP2、BP1、BP0)位均为0时,才会执行批量擦除(BE)命令。如果有一个或多个扇区受到保护,则会忽略批量擦除(BE)命令。
图6.9 块擦除命令时序