简介
FLASH即闪存,是和EEPROM一样可以使用电擦除的非易失性的存储器,FLASH属于广义的EEPROM(平常说的一般是狭义上的EEPROM)。
FLASH和EEPROM的区别:
- FLASH的容量往往比EEPROM大很多,FLASH在大容量上的性价比更高。(M和K)
- 擦写单位:
- EEPROM通常以字节为单位进行擦写,即可以单独擦除或编程每个字节。
- Flash存储器通常以扇区(Sector)或页(Page)为单位进行擦写,意味着需要擦除整个扇区或页,而无法单独擦除其中的一个字节。
FLASH的擦除速度更快。
基本特性
协议:高速SPI协议,50MHz Clock Rate (maximum),支持SPI模式0和模式3
容量:16Mbit(32 sector * 256 page * 256 byte)
写操作:范围1-256bytes,时间 1.4ms(typical)
擦除方式:Sector Erase (512 Kbit) 和 Bulk Erase (16Mbit)
信号描述
Serial Data Output (Q).所有数据从该条数据线串行输出,在时钟下降沿输出。
Serial Data Input (D).所有数据从该条数据线串行输入,在时钟上升沿锁存
Serial Clock (C).串行时钟线,提供时钟传入
Chip Select (S).片选信号,拉高时flash处于空闲状态,所有命令执行之前都需要先拉低片选信号。
Hold (HOLD).保持(HOLD)信号用于暂停与设备的任何串行通信,而不取消选择设备。
Write Protect (W).保持(HOLD)信号用于暂停与设备的任何串行通信,而不取消选择设备。
操作特点
Page Programming
要对一个数据字节进行编程,需要两个指令:写启用(WREN),即一个字节,和一个由四个字节加上数据组成的页面程序(PP)序列。接下来是内部程序周期(持续时间tPP)。为了分散这种开销,页面程序(PP)指令允许一次编程最多256个字节(从1位更改为0),
Sector Erase and Bulk Erase
页面程序(PP)指令允许将位从1重置为0。在应用这个程序之前,内存的字节需要被删除到所有1(FFh)。这既可以使用扇区擦除(SE)指令一次实现一个扇区,也可以使用批量擦除(BE)指令在整个内存中实现。这将启动一个内部擦除循环(持续时间为tSE或tBE)。擦除指令之前必须带有写入启用(WREN)指令
Status Register
状态寄存器包含许多可通过特定指令读取或设置(适当)的状态和控制位。
WIP bit.“Write In Progress”(WIP)位指示内存是忙于写入状态寄存器、程序还是擦除周期。(0表示没有)
WEL bit. Write Enable Latch(WEL)位表示内部写入启用锁存器的状态(0表示没有开启)
BP2, BP1, BP0 bits.块保护(BP2、BP1、BP0)位是非易失性的。它们定义了要被软件保护的区域的大小,以防止程序和擦除指令的使用。
SRWD bit.Status Register Write Disable(SRWD)位与写入保护(W)信号一起操作。状态寄存器写禁用(SRWD)位和写保护(W)信号允许将设备置于硬件保护模式。在此模式下,状态寄存器的非易失性(SRWD、BP2、BP1、BP0)位变成只读位。
Protection Modes
程序、擦除和写状态寄存器指令在被执行之前,会检查它们是否由8倍的时钟脉冲组成。
所有修改数据的指令之前都必须带有写入启用(WREN)指令,以设置写入启用锁存器(WEL)位。以下情况会重置该状态:
- Power Up(上电)
- Write Disable (WRDI) instruction completion (重置Write Enable Latch bit)
- Write Status Register (WRSR) instruction completion
- Page Program (PP) instruction completion
- Sector Erase (SE) instruction completion
- Bulk Erase (BE) instruction completion
MEMORY ORGANIZATION
2,097,152 bytes (8 bits each) 32 * 256 * 256
32 sectors (512 Kbits, 65536 bytes each) 256 * 256 = 65536
8192 pages (256 bytes each). 32 * 256
Each page can be individually programmed (bits are programmed from 1 to 0). The device is Sector or Bulk Erasable (bits are erased from 0 to 1) but not Page Erasable.(最小擦除单位——扇区)
memory address organization:sector address(00 - 1F) + page address (00 - FF)+ byte address(00 - FF)
INSTRUCTION
所有的指令,地址和数据都是最高位优先(MSB)进行输入输出。
每个指令序列都以一个单字节的指令代码开始。根据指令的不同,后面可能是地址字节或数据字节,或者两者都有或没有。
对于读取数据类的操作(READ,Fast_Read,RDSR,RDID,RES)后接数据输出序列,并且片选信号线可以在任意位输出后拉高。
对于写入数据类的操作(PP,SE,BE,WRSR,WREN,WRDI等)片选信号必须在字节的边界拉高,否则指令被拒绝,不执行。意味着这类指令在片选信号拉低8的倍数周期后就必须拉高。
在写状态寄存器周期,写周期,擦除周期时,所有的指令都会被忽略。
Write Enable (WREN)——0000_0110
启用写入功能(WREN)指令设置启用写入的锁存器(WEL)位。必须在每个页面程序(PP)、扇区擦除(SE)、批量擦除(BE)和写入状态寄存器(WRSR)指令之前设置写入启用锁存器(WEL)位。通过驱动芯片选择(S)低,发送指令代码,然后驱动芯片选择(S)高,输入写入启用(WREN)指令。
Read Status Register (RDSR)——0000_0101
读取状态寄存器(RDSR)指令允许读取状态寄存器。状态寄存器可以在任何时候被读取,即使在一个程序、擦除或写状态寄存器周期正在进行中。当其中一个循环正在进行时,建议在向设备发送新指令之前检查“正在写入”(WIP)位。也可以连续读取状态寄存器,如图所示
Read Data Bytes (READ)——0000_0011
该指令为数据读取操作,时序如下:
- 拉低片选信号,然后发送 READ 指令(0000_0011)。
- 在发送 READ (0000_0011)指令之后,发送三个字节的地址(地址由三个字节组成),在上升沿数据锁存。
- 然后该地址的内容会在时钟下降沿输出。
在每个字节数据移出后,地址自动增加到下一个更高的地址。因此,可以用一条读取数据字节(READ)指令来读取整个内存。当达到最高地址时,地址计数器会转到000000h,允许读取序列无限期地继续进行。
通过拉高片选停止 Read 指令。在写或者擦除操作时,读指令不会被识别。
Page Program (PP)——0000_0010
页面程序(PP)指令允许在内存中编程字节(将位从1改为0)
- 在执行该指令之前,必须先执行WREN指令。
页面程序(PP)指令允许在内存中编程字节(将位从1改为0)。
页面程序(PP)指令通过驱动芯片选择(S)拉低来输入,然后在串行数据输入(D).上输入指令码、三个地址字节和至少一个数据字节,如果8个最不重要的地址位(A7-A0)不是全部为零,则超出当前页面末端的所有传输数据都从同一页面的起始地址(从8个最不重要的位(A7-A0)全部为零的地址)进行编程。芯片选择(S)必须在整个序列期间驱动低。
如果写入数据超过256字节,那么前面的数据会被覆盖, 只有最后的256字节数据会被保留。如果少于256字节,则正常写入, 且不会对本页其他字节数据造成影响。
PP指令必须在最后一个字节的第8位锁存后拉高,不然不会执行PP指令。
Sector Erase (SE)——1101_1000
扇区擦除(SE)指令将选定扇区内的所有位设置为1(FFh)。
- 在执行该指令之前,必须先执行WREN指令。
同样是先拉低片选信号,然后传输Sector Erase指令,后接三个字节地址,扇区内的地址都是有效的擦除地址,在最后一个地址最后一位传输之后,必须拉高片选信号。然后自动启动擦除周期。
Bulk Erase (BE)——1100_0111
全擦除(BE)与扇区擦除相似(SE),全擦除是将所有的存储位设置为1.
- 在执行该指令之前,必须先执行WREN指令。
首先拉低片选信号,然后输入指令,最后一位立马拉高片选信号。