【FLASH存储器系列十一】Nand Flash芯片使用指导之一

本文详细介绍镁光MT29F8G08AJADAWP型号8Gb SLC NAND Flash芯片的各项特性与操作方法,包括芯片结构、功能模块、信号定义及错误管理等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

👉个人主页: highman110
👉作者简介:一名硬件工程师,持续学习,不断记录,保持思考,输出干货内容

目录

1.1 芯片简介

1.2 功能框图

1.3 存储结构

1.4 信号定义

1.5 双平面(plane)操作

1.6 Die间交错操作

1.7 错误管理


      

        今天以MT29F8G08AJADAWP芯片为例,说明nand flash的操作方法。

1.1 芯片简介

        这是一款镁光的容量8Gb,总线位宽8位的SLC NAND Flash,兼容ONFI 1.0标准。芯片内包含两个die,每个die为4Gb,每个die有两个plane,每个plane为2Gb,每个plane有2048个block,每个block为128K,每个block有64个page,每个page为2K,以上容量不包含每页用来存储坏块信息和ECC信息的spare area。

1.2 功能框图

1、I/O control:数据、命令、地址的输入输出口;

2、Status Register:片内的状态寄存器;

3、Command Register:命令锁存寄存器;

4、Address Register:地址由地址寄存器锁存并发送到行解码器以选择行地址,或发送到列解码器以选择列地址;

5、Control Logic:解码总线状态,判断当前属于地址输入、命令输入、或是数据输入输出周期;

6、存储阵列:两个plane,上图仅为芯片其中一个die;

7、Row decode:行地址解码;

8、column decode:列地址解码;

9、Data register:数据寄存器;

10、Cache register:缓存寄存器;

11、ECC:进行数据校验。

        注意:数据寄存器和缓存寄存器可以单独操作,在缓存操作命令下,如页缓存读、页缓存编程,可以提升数据吞吐量。这个和CPU的cahe原理是一样的。

1.3 存储结构

        Die、plane、Block、page前文已经说明,大家对照下图可以清晰地明白,不再赘述。这里说明一下每个plane上的数据寄存器和缓存寄存器,普通的页编程、页读取不需要经过数据寄存器,外部结构通过缓存寄存器直接和存储阵列交互。但是外部接口速率和存储阵列的读写速率相对较慢,以编程操作为例,如果要等外部数据全部输入进缓存寄存器,再由缓存寄存器往存储阵列里写,耗时较长,这时增加一个数据寄存器,在外部数据全部输入进缓存寄存器后,将数据拷贝到数据寄存器,然后在数据寄存器往存储阵列写数据期间,外部接口可以开启下一页数据往缓存寄存器里写,如此反复,则可以提升数据吞吐量。

1.4 信号定义

        信号定义如下表,其中CE#和R/B#分别有两个引脚,分别对应两个die:

1.5 双平面(plane)操作

        每个NAND闪存逻辑单元(LUN)被划分为多个物理平面。每个平面包含独立于其他平面的高速缓存寄存器和数据寄存器。这些平面通过低位的块地址位寻址。如存储结构图中的Note所示。

        双平面操作通过在多个平面上执行并发的读取、编程或擦除操作,更好地利用了这些物理平面上的NAND闪存阵列,显著提高了系统性能。两个平面之间的操作必须是相同类型的;例如,不能在一个平面上执行PROGRAM操作而在另一平面上执行ERASE操作。

        当发出双平面编程或擦除操作时,使用READ STATUS(70h)命令并检查先前的操作是否失败。如果READ STATUS(70h)命令指示发生错误(FAIL=1和/或FAILC=1),则使用READ STAUTS ENHANCED(78h)命令确定哪个平面操作失败。

1.6 Die间交错操作

        在有多个die的芯片中,可以通过die间交错操作提升性能。交错操作是在一个die繁忙(RDY=0)时向空闲die(RDY=1)发出的操作。但在RESET(FFh)、读标识(90h、ECh、EDh)和特性配置(EEh、EFh)操作之后,直到目标上所有die的ARDY=1之前,禁止多die交错操作。

        在交错操作期间,有两种方法可以确定操作是否完成。R/B#信号指示对应die何时完成其操作。当任何die忙时,R/B#保持为低。当R/B#变高时,对应die处于空闲状态,操作完成。或者,也可以通过READ STATUS ENHANCED(78h)命令单独报告每个die的状态。

        如果裸片(LUN)正在执行高速缓存操作,如页高速缓存编程(80h-15h),则当状态寄存器位6为1时(RDY=1),裸片(LUN)能够接受另一高速缓存操作的数据。所有操作(包括高速缓存操作)在状态寄存器位5为1时(ARDY=1)在裸片上完成。

1.7 错误管理

        通常Nand Flash出厂时就有可能存在缺陷,同时这种缺陷会影响块擦除,这样的缺陷被称为坏块。所以这时就需要坏块管理和纠错算法来保证数据的完整性。

        每个block的第一个(规范规定可以是第一个也可以是最后一个)page中有64字节的spare area,可用来标记坏块。如果一个块是有缺陷的,并且使用 8-bit 数据访问方式,则制造商应该通过设置有缺陷的块的第一个(或者最后一个)page 中,缺陷区域(这个缺陷区域规范中没有明确是什么地址)的第一个Byte 为00h,来标记有缺陷的块。如果一个块是有缺陷的并且使用16-bit数据访问方式,则通过设置缺陷块的第一个(或最后一个)page 中,缺陷区域的第一个word 为 0000h,来标记有缺陷的块。

        主机软件在对nand flash进行编程或擦除前,应先到每个block的第一个page First spare area location进行检查,判断哪些block是坏块,然后生成一张坏块表。

        为了保证数据的完整性,建议做如下操作:

        1、在编程和擦除操作后检查状态;

        2、在典型场景下,使用最小ECC要求;

        3、使用坏块管理机制和磨损均衡算法;

Description

Requirement

Minimum number of valid blocks (NVB) per LUN

4016(出厂时好块不能低于4016)

Total available blocks per LUN

4096

First spare area location

x8: byte 2048
x16: word 1024

Bad-block mark

x8: 00h
x16: 0000h

Minimum required ECC

4-bit ECC per 528 bytes

Minimum ECC with internal ECC enabled

4-bit ECC per 516 bytes (user data) + 8 bytes (parity data)

Minimum required ECC for block 0 if PROGRAM/ERASE cycles are less than 1000

1-bit ECC per 528 bytes

        芯片的大致功能介绍到这里,下一讲分享部分重要的操作指令,敬请期待!

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

highman110

你的鼓励将是我最大的创作动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值