Nand Flash基础笔记(1)

本文详细介绍了NAND闪存的技术原理,包括其物理结构、阵列架构、单元操作及可靠性问题等内容。深入探讨了NAND闪存的读、写、擦除过程,并分析了随着工艺缩小带来的耦合效应及其对数据保留的影响。

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

1. About Nand Flash 

        1988年intel公司开发出了Nor Flash技术,1989年东芝公司发表了Nand Flash结构。Flash memory density increasing by 1.5X/year, contributed by scaling and multi-bit per cell technology.下图来源: ISSCC 2016

2. Flash Physical Structure

FG上下被绝缘层包围,存储在里面的电子不会因为掉电而消失,所以闪存是非易失性储器。

3. Array architecture

3.1. NAND Flash Array architecture

        

WordLine(WL):Physical gate connected serially on the same page。对SLC来说,一个Wordline 对应一个Page; MLC则对应2个Page,这两个Page是一对(Lower Page和Upper Page);TLC 对应3个Page ( Lower Page、Upper Page和Extra Page,不同闪存厂家叫法不一样;Lower Page:LSB / Upper Page:CSB / Extra Page:MSB)。

Bit Line(BL): Data line

String:serial connection of memory cell between 2 select transistors。指从Bitline进来,在一个blk范围里面的这串。

Group:可以理解为WL,AFGA block在一层有A B C D四个WL。

3.2. NAND Flash Array organization

Die/LUN:晶圆切割出来的单颗芯片,是接收和执行FLASH命令的基本单元。一个芯片有若干Die。不同的LUN可以同时接收和执行不同的命令,但在一个LUN当中,一次只能执行一个命令,不能对其中的某个Page写的同时,对另一个page进行读操作。

die可以理解为一个小区。

Plane:每个Plane有独立的Cache register和page register,其大小与page大小一致。

一个die上分为了多个plane,通常数目为1/2/4,2的指数次方,这些plane的内部结构都一样的,plane可以理解为几栋。

Block:erase的最小单位,每个Block由若干page组成,page数目一般是16的倍数。

一个plane里面分为了多个block,block可以理解为一个单元。

Page:program和read的最小单位,由main area和spare area组成,main area存放数据,spare area存储ECC等。

一个block里面分为了多个page,page可以理解为层楼。一个page里有多个cell,cell可以理解为一个房子/住户。房子根据能住的人数可以分为单人间,双人间,三人间,四人间。cell也可以根据能存储多少个数据来分类。一个cell只存一个bit的数据,就叫做SLC,存两个bit数据就叫MLC,三个bit数据就叫TLC, 四个bit数据就叫QLC。一个cell存的数据越多容量就越大,相反读写速度和使用寿命就更短:一个存储单元电子划分得越多,那么在写入的时候,控制进入浮栅极的电子个数就要越精细,所以写耗费的时间就越长;同样的,读的时候,需要尝试用不同的参考电压去读取,一定程度上加长了读取时间。所以在性能上,TLC不如MLC,MLC不如SLC。

Device:封装了的nand unit。1个device包含一个或多个target;

Target:an independent nand flash component with its own CE signal,一个CE控制的一个对象,一个target由一个或多个LUN组成,一个Target的两个LUN可以独立操作,可以读LUN 0的同时编程LUN 1;

Package:一个或多个Target封装成一个或多个通道的flash的封装片。 

Chip:一个封装好的芯片就是一个chip,一个chip(CE)包含N个die。

        

4. Cell operation

每个Cell的漏极对应BL(Bitline),栅极对应WL(Wordline),源极都连在一起。通过Wordline、Bitline施加不同电压和不同时间长度进行各种操作。一个Block 中的所有存储单元都是共用一个衬底的。

4.1. Read

读操作是在控制极加读电压,需要尝试用不同的电压去读取。

不需要读取的WL要加约5v左右的电压,使漏极和源极保持导通。

4.2. Program

写操作是在控制极加正电压,使电子通过绝缘层进入浮栅极。

Vcc的电压流到Vpgm的BL时,会流经Vpass的BL,为了抑制program的干扰,Vpass的WL也会加9v左右的电压。

4.3. Erase

 擦除操作是在衬底加正电压,控制极接地,把电子从浮栅极中吸出来。

5. Coupling effect

由于存储电子的浮栅极是导体,任何两个彼此绝缘且相隔很近的导体间都构成一个电容器。因此,任何两个存储单元的浮栅极就构成一个电容器,一个浮栅极里面电荷的变化,都会引起别的存储单元浮栅极电荷的变化。

一个浮栅极与其附近的浮栅极之间,都存在耦合电容,距离越短,电容越大,彼此影响越大。因此,随着闪存制程减小,存储单元之间影响越来越大。

Three components of Cell to cell Coupling:diagonal、WL、BL

预先编程的cell将被后编程的相邻cell干扰;

6.Reliability issue

6.1. Endurance

随着闪存块擦写PE次数增多,氧化层逐渐老化,电子进出存储单元越来越容易,因此存储在单元间的电荷容易发生异常,导致数据读错误。

6.2. Retention

随着时间的推移,存储在存储单元的电子会流失,整个阈值电压分布向左移动,导致读数据的时候发生误判。

 Factor for data loss:

(1)温度:电子能量较高,温度越高,电子越容易从浮栅中逸出;

(2)Vt status:处于高阈值态的电子有较高的逸出倾向;

(3)擦写次数增加:随着擦写次数的增加,电子更容易从浮栅中溢出。

6.3. Read Disturb

读一个Wordline时,需要施加Vpass电压在其他Wordline上,导致其他闪存页发生轻微写。如果读的次数过多,轻微写累积起来就会使阈值电压分布发生右移,导致读数时候发生误判,即读数据错误。

<think>嗯,用户想了解关于ZYNQ从NAND Flash启动的应用笔记。首先,我需要回忆一下ZYNQ的启动流程。ZYNQ是Xilinx的SoC,结合了ARM处理器和FPGA。启动过程涉及多个阶段,包括BootROM、FSBL,可能还有U-Boot和应用程序。 用户的问题是关于从NAND启动,所以需要明确启动配置。首先,ZYNQ的启动模式由引脚设置,比如MIO[5:0]的状态。需要确认用户是否了解如何设置这些引脚为NAND启动模式,比如设置为001010。 接下来,系统需要正确的启动文件。首先是FSBL(First Stage Boot Loader),它负责初始化硬件和加载后续镜像。FSBL需要配置成支持NAND接口,可能需要在Vivado中设置硬件参数,比如NAND的时序、总线宽度等。 然后是镜像的生成。ZYNQ的启动镜像通常包括FSBL、FPGA比特流和应用程序(如U-Boot或裸机应用)。这些需要打包成BOOT.BIN文件。用户可能需要使用Xilinx的工具,如BootGen,来正确配置分区和加载顺序。 另外,NAND Flash的驱动支持也很重要。FSBL需要能够与NAND Flash通信,这涉及到控制器初始化和坏块管理。可能需要检查FSBL的代码是否包含NAND的驱动,并正确配置相关参数,比如页大小、块大小、ECC等。 硬件连接方面,用户需要确保ZYNQ的NAND接口与实际的NAND Flash芯片正确连接,包括数据线、控制信号和电源。电气特性的匹配也很关键,比如电压和信号完整性。 还有可能遇到的问题是坏块处理。NAND Flash通常有坏块,启动过程中需要跳过这些坏块。FSBL或后续的引导程序需要实现坏块管理策略,例如在写入镜像时预留备用块,或者在读取时检测并跳过坏块。 最后,调试阶段可能会用到JTAG或串口输出,以查看启动过程中的错误信息。例如,如果FSBL无法加载镜像,可能需要检查NAND的初始化是否正确,或者镜像文件是否正确烧录。 总结来说,用户可能需要逐步设置启动模式、配置硬件、生成正确的启动镜像、处理NAND的驱动和坏块管理,并进行调试。需要确保每个步骤的细节正确,比如Vivado中的配置和BootGen的设置,才能成功从NAND启动。</think>以下是ZYNQ从NAND Flash启动的关键步骤说明,按系统级启动流程分步呈现: $$ \text{启动流程} = \text{BootROM} \rightarrow \text{FSBL} \rightarrow \text{用户应用} $$ ### 一、硬件配置要求 1. **NAND接口配置** - 在Vivado中设置Quad-SPI控制器为NAND模式 - 验证MIO引脚分配符合硬件原理图,例如: $$ \text{数据总线宽度} = 8 \text{位} \quad \text{或} \quad 16 \text{位} $$ - 配置时序参数: $$ t_{RC}/t_{WC} \leq 30ns \quad \text{(典型值)} $$ 2. **启动模式设置** - 设置MIO[5:0]=001010(NAND 8位模式) - 或MIO[5:0]=001011NAND 16位模式) ### 二、软件镜像生成 1. **镜像组成结构** $$ \text{BOOT.BIN} = \text{FSBL} + \text{比特流} + \text{应用程序} $$ 2. **FSBL特殊配置** ```c // 在xparameters.h中启用NAND支持 #define XPAR_PS7_NAND_0_DEVICE_ID 0 #define XPAR_PS7_QSPI_0_DEVICE_ID 1 ``` ### 三、烧录操作流程 1. **Flash编程器配置** - 使用Vivado Hardware Manager - 选择NAND参数: $$ \text{Page Size} = 2048 \text{字节}, \quad \text{Block Size} = 128 \text{KB} $$ 2. **地址映射规范 | 镜像部件 | 起始地址 | 长度 | |------------|----------|------------| | Boot Header| 0x000000 | 0x800 | | FSBL | 0x000800 | 0x10000 | | 比特流 | 0x010800 | 可变长度 | | 应用程序 | 后续地址 | 可变长度 | ### 四、坏块处理机制 1. **坏块检测算法** $$ \text{坏块标志} = \begin{cases} 0xFF & \text{正常块} \\ \neq 0xFF & \text{坏块} \end{cases} \quad \text{(位于每个块的第1/2页备用区)} $$ 2. **跳过策略** ```c while(current_block < total_blocks){ if(is_bad_block(current_block)){ current_block++; continue; } // 执行正常操作 } ``` ### 五、启动时序分析 $$ T_{boot} = T_{BootROM} + T_{FSBL} + T_{PL} + T_{App} $$ - 典型值参考: - BootROM阶段:约200ms - FSBL加载:取决于镜像大小,每MB约50ms ### 调试建议 1. **Xilinx SDK调试技巧** - 在FSBL中启用调试打印: ```c #define FSBL_DEBUG_INFO ``` - 通过UART查看启动日志 2. **常见故障代码** - **0x0000000C**: NAND控制器初始化失败 - **0x0000001A**: ECC校验错误 实际开发时建议结合Xilinx官方文档《UG821》和《UG585》进行参数校准,建议预留至少2%的备用块空间用于坏块替换。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值