Menu Close

NAND FLASH存储器的接口与应用

上节内容讲解了NOR Flash的原理与应用,NAND Flash存储器由于容量大、价格低等优点在非易事数据或程序存储等方面获得了广泛应用,因此本节内容就NAND Flash的原理、结构、接口及读写时序等方面的内容进行比较详细介绍。

1. NAND Flash存储器单元结构

NAND Flash存储器常见的有SLC(single level cell) 和MLC(multi level cell)两种,细分还有eSLC和eMLC等。因为闪存是一种电压控制元件,因此它是以不同的电压范围来代表不同的数据,现在看看两者之间的区别。

%title插图%num

图1 FLASH存储器单元结构

  • SLC(single-level cell):

单阶存储单元SLC,也就是闪存的每一个存储单元仅存储1bit的数据,存储的数据代表0还是1是基于V的电压阈值来判定。对于闪存写入,就是对其浮栅进行充电,使得它的电压值超过电压判定点A,存储单元就表示为0(已编程),如果没有充电或者电压阈值低于A点,就表示1(已擦除)。这里的单元核与掩膜中的2极管或MOS管的功能相似。

SLC NAND FLASH由于采用单一电压控制通断,因次性能稳定,容错性能好,但相比MLC的FLASH容量较低。SLC主要针是对军工,企业级的应用,有着高速写入,低出错率和耐用性等特点。SLC单元电压控制如图2所示。

%title插图%num

图2 SLC NAND FLASH 单元控电压制示意图

  • MLC(Multi-level cell)多阶存储单元结构

其实质是在每个存储单元存储2bit的数据,存储的数据是”00″,”01″,”10″,”11″也是基于电压的阈值的判定,其被分成4份。相对于SLC,MLC的每个单元是2bit,那么单片的容量较大,同等容量价格比较低。同时其存储单元中存放更多的数据,那么其结构也相对复杂,出错的机会也比较大。因次一般会有ECC算法,检查存储单元数据的有效性。MLC FLASH主要针对的是消费级应用,有着高容量,低成本等特点,广泛使用于USB闪存,SSD硬盘,手机,数码相机等存储卡。

SLC (1 bit per cell) – fastest, highest cost

MLC (2 bits per cell)

TLC (3 bits per cell)

QLC (4 bits per cell) – slowest, lowest cost

PLC (5 bits per cell) – currently in development, penta-level cell (PLC).

%title插图%num

图3  MLC NAND FLASH 单元控制示意图

2. NAND FLASH 的读写及时序

以下内容将以K9F1G08X0C这款芯片为例介绍其硬件组成和工作原理,其它的芯片工作原理与K9F1G08X0C基本相同,同学们可以自己阅读相关资料。NAND FLASH 与NOR FLASH相比,擦除和编程速度块,容量大,价格低廉。但读取速度较慢。

  • 总线复用

一般由于NAND的FLASH的容量较大,地址线多,一般外部的数据总线和地址总线都采用复用的方式。图4 是K9F1G08X0C内部功能框图,从图中可以看出:数据线,命令线,地址线(高地址、低地址)全部复用,一般在使用总线时需要严格的控制总线和逻辑,通常在RTL设计时由状态机实现。

%title插图%num

图4K9F1G08X0C内部功能框图

由于数据线,命令线,地址线(高地址、低地址)全部复用,因次外围的有用管脚较少,在TSSOP48脚的封装中,大多数是管脚为空脚NC(no connect),在硬件设计时,这些管脚可以和外部没有电气连接。如图5中有效的管脚只有I/O0 ~ I/O7,CLE,ALE,#CE,#RE,#WE,#WP,#R/B等管脚。

由于TSOP1的性能比较好,因次采用TSOP1的标准封装,目前大容量的NAND FLASH还有BGA封装。该芯片在嵌入式系统中应用非常广泛。其中NC 表示空脚(no connect )。

%title插图%num

图5  K9F1G08X0C芯片封装示意图

表1 K9F1G08X0C管脚功能描述

信号名称 管脚名称 类型 描述
输入/输出(

数据线,

地址线,

命令线

I/O0 ~ I/O7 INPUTS

/OUTPUTS

地址/命令/数据,在读操作的时候用来输入/输出数据,在地址操作时输入地址,在命令操作时输入命令
命令锁存使能 CLE Input CLE为高时,在WE#上升沿,命令通过I/O[7:0]锁存到命令寄存器,当不传输命令时,CLE应该为低
地址锁存

使能

ALE Input ALE为高时,在WE#下降沿,地址出现在I/O端口上,在WE#上升沿时刻,地址信息通过I/O[7:0]锁存到片内的地址寄存器上。如果传输的不是地址信息,ALE应该为低
片选 #CE Input 片选信号,低电平有效。一旦器件进入PROGRAM或ERASE操作,CE#可以变成无效状态。
读使能 #RE Input 读数据阶段,在#RE上升沿将数据读回。
写使能 #WE Input 在#WE上升沿命令/地址/数据锁存
写保护 #WP Input 当为低时候,所有的PROGRAM和ERASE都被禁止
准备/忙状态 R/B#  OD 集电极开路输出。外部需要接上拉电阻,这个脚表示芯片正在进行PROGRAM或ERASE操作。在读操作期间,表示数据正从阵列中传输到串行数据寄存器中,一旦这些操作完成,R/B#回到High-Z状态。
  • Nand Flash的读写寻址方式

    • Nand Flash寻址及ECC

从图6可以看出,NAND Flash是按照页(pages),  块(blocks)的方式进行组织的。每个页(2K+64)Bytes,其中64Bytes是ECC(error correcting code)是纠错码,如汉明码(Hamming code)可以检查出2位错吗,可以纠正一位错码。因次在读操作时都会做ECC检查,如果发现有一位错误并进行纠正。在擦除失败或编程失败时,一般采用坏块替代的方式。列地址(Column Adress) 决定页内寻址(2K+64),Row Address决定页面寻址, 可以寻址64K 页。

%title插图%num

图6 K9F1G08X0C 块单元寻址地址顺序

  • Nand flash 控制信号编码

Nand flash 控制信号在实际操作中编码顺序是不同的,具体见表2。以写模式(write mode)为例,先写命令(表示以后的操作将是编程),此时CLE应为高电平,ALE为低电平,#WE由低到高在上升沿写入,#RE为高电平。后面紧跟写地址,此时CLE为低,ALE应为高电平。在读数据时,#WE为高,#RE下降沿触发数据输出,在上升沿将数据锁存。

表2  K9F1G08X0C NAND FLASH 控制信号编码

%title插图%num

    • 时序关系

Nand flash 控制信号在实际操作中个信号的时序不同的器件不同,具体见表3,

    • Setup Time 建立时间,表示在数据线(或相对应的控制信号)有效之前已经建立并维持的时间。
    • Hold time 保持时间,就是在数据(或控制信号)已经完成操作后仍需保留的时间。
    • Cycle Time 周期信号,即前后两次操作需要的时间。

在FPGA编程前要仔细阅读该表,确定各信号的时序关系,才能正确编程并能有效操作各个信号。

表3 K9F1G08X0C NAND FLASH 控制信号时间参数表

%title插图%num

表4描述了各个控制信号之间的时序关系,如CLE to RE# Delay 指的是当CLE结束后RE#信号需等待的时间.

表4 命令时序参数表(信号间相对时间关系)

%title插图%num

  • NAND FLASH的操作命令

操作命令见表5,这里的操作命令的原理与NOR FLASH非常类似。但是最大区别是NAND Flash 存储器读数据也需要先从命令开始。因次NAND FLASH 存储器不能作为直接运行的程序存储器(XIP)使用。

    • 读命令: 00h,30h

在嵌入式系统中,可以把程序存到NAND FLASH 存储器中,在系统配置完成后,将程序搬移到内存中(DDR3,4)中在运行。此时NAND FLASH相当于硬盘。

表5   NAND FLASH  操作命令表

%title插图%num

    • 初始无效块检查

初始无效块(Invalid Block)的检查,在计算机或控制系统中首先对初始无效块(Invalid Block)进行检查,如果有坏块(Invalid Block)存在,主控制程序将对坏块进行记录,并形成坏块记录表。坏块标记前禁止擦除。在以后的数据交换时避免使用已标记的坏块。由于在擦除操着时,将会把坏块信息擦除,因次首次使用NAND Flash存储器时严格禁止对在没有坏块标记时对芯片进行擦除或编程。

%title插图%num

图7 无效块检查流程图

    • 编程操作

      • 编程操作流程

编程操作应有如下步骤,流程图如图8所示。

i.     写命令80H,

ii.    写地址,

iii.   写数据,可以批量写入,

iv.   写命令10H,

v.    读状态寄存器,

vi.   空闲检查(判断I/O6 或是否为0),

vii.  编程出错检查;如果I/O0=0,正确编程,

viii. 如果I/O0=1,编程错误,出错处理;

 

      • 坏块处理

如果编程出错,同样要进行坏块标记与处理,具体的处理方式可能不同。一般复制程序到另一个有效的块中。

    • ECC检查:

如果仅是一个bit错误,可以通过ECC纠正,不需要块拷贝和坏块标记。这只是针对读数据检查。

%title插图%num

图8 NAND Flash 存储器编程流程图

    • 按照页码顺序编程

在块编程中,必须按照块中页码的顺序编程,页码顺序从小到大,NAND Flash 不支持页码的乱序编程。编程从最低页(LSB PAGE)开始,LSB PAGE不一定是Page0 ,只是在要编程的页码中最低页码。

%title插图%num

图9    块内按页码编程流程图

  • 块擦除及读操作流程

a)块擦除: 写命令60H, 写要擦除块的块地址,写命令D0H.

i. 检查操作状态:写“读状态”命令, 检查I/O6或是否为0,如果为1,等待

ii. I/O6或为0,检查I/O 0是否为零;如果I/O为0,则擦除正确,否则擦写错误。

iii.擦写正确,可以为对应的块进行编程。

iv.如果擦写出错,重复上面的步骤,如果仍然出错,则标记坏块。

b)读操作:

i.  写命令60H,

ii. 写读地址,

iii.写命令30H,

iv.读数据,检查ECC,并纠错

v.如果无法纠正,坏块标记

%title插图%num

图10    块擦除及读操作流程图

作业题:用Verilog或C语言实现块擦除

  • 无效块替换

A)如果发现在擦除或编程中块‘A’中第n个页有错误,

B)复制第1—N-1页的内容到另一个自由的块(块B)中相同位置

C)将缓存中第n 页的内容复制的块B的第n页,

D)将块A添加的坏块的记录表中

E)在坏块中做标记(类似出厂时厂家标记的位置)

F)不要擦除该块。因次在擦除或编程前要将块中的内容读到缓冲区中。

%title插图%num

图 11 无效块替换示意图

作业题:用C(或Verilog)语言实现无效块替代程序

  • 编程写时序

按照控制信号命令的逻辑,CLE控制命令写入,ALE在高电平时写入地址,在 与 为低电平时按照字节串行的方式写入。在非写入期间#CE 的值可以为高电平,可以降低功耗。其它的操作时序类似,可以参照NAND FLASH 存储器的文档描述, 这里不在累述。

如图12在写地址之后,数据可以批量写入,直到下一个命令10H

%title插图%num

图12 编程写时序

由于数据编程可以批量写入,因此NAND Flash的编程操作比Nor Flash 快很多,这也是NAND Flash在SSD硬盘获得广泛应用的一个重要原因。

ECC检查算法

Posted in FPGA, FPGA, 元器件, 存储器, 教材与教案, 文章, 资料区

发表评论

相关链接