[NAND Flash] 3.1 闪存的组成结构原理与使用挑战

依公知及经验整理,原创保护,禁止转载。

专栏 《深入理解NAND Flash》

<<<< 返回总目录 <<<<


前言
日本东芝最初发明半导体存储芯片时,认为它就像拍照时的闪光一样迅速,因此命名为闪存(Flash)。如今,我们使用的最常见的形式是NOR闪存和NAND闪存。根据不同的场景,我们使用不同的存储器。 NOR闪存通常用于嵌入式系统,而手机内部存储、PC硬盘和USB快闪等则使用NAND闪存。这些设备中存储的数据通常被读取的次数比写入的次数多,但写入的频率仍然相对较高,因此NAND闪存是更常见的选择。

1 Flash 物理结构

1.1 Flash 是什么?

Flash是一种非易失性存储设备。与易失性存储设备相对应,Flash Memory所存储的数据即使断电也不会丢失。除了Flash,其他常见的非易失性存储设备包括磁盘和光盘等。易失性存储设备就像其名字一样,一旦断电数据就会丢失。常见的易失性存储设备包括内存条,如DDR5等。

最小存储单元
闪存的最小存储单元是“晶体管-栅极-漏极”(Transistor-Gate-Drain,TGD)结构。在这种结构中,栅极上的电子可以控制漏极和源极之间的电荷通量,从而实现存储和读取数据。​​
在这里插入图片描述
Flash存储器的数据是以电荷的形式存储在内部单元中的。电荷的数量取决于控制栅极施加的电压,控制栅极决定是否充电或放电。数据的表示方式则是根据存储单元中电荷的电压是否超过阈值Vth而确定的。

1.2 NAND Flash的结构

在这里插入图片描述
如上图所示,这是一个8Gb 50nm的SLC颗粒存储单元物理结构。

位线和字线
闪存需要使用位线(Bitline)和字线 (Wordline) 组成的矩阵。位线用于选择存储单元的行,而字线用于选择存储单元的列。利用这种方式,我们可以在矩阵中选择特定的存储单元,并对其进行读写操作。

1.3 闪存芯片组成结构

下图是个8Gb 50nm的SLC闪存芯片组成结构。
在这里插入图片描述
每个page有33,792个单元,每个单元代表1bit(SLC),所以每个page就是4096Byte + 128Byte(SA)。
每个Block有64个page组成,所以每个Block容量为262,114Byte + 8192Byte (SA)

page是NAND Flash上最小的读/写单位(一个page上的单元共享一根字符线Word line),块是最小的擦除单位(不同厂牌不同型号颗粒有不同的page和block大小)。

4KB的页大小,256KB的块大小。图中4096字节用于存储数据,另外128字节用来做管理和ECC用。

2 NAND Flash 的使用挑战

挑战1:需要先擦除才能写入。
在这里插入图片描述
擦除操作就是让块中所有的bit变为1,从一个干净的“已擦除”状态的block重新开始。当里面的页变为0后,只有擦除整个块才能让这个页变为1。为了尽量减少擦除的次数,成熟的块管理技术必不可少。

挑战2:读/写干扰。

NAND Flash的电荷非常不稳定,在读/写中很容易对邻近的单元造成干扰,干扰后会让附近单元的电荷脱离实际的逻辑数值,造成bit出错,因为阀值接近的关系,MLC相对SLC来说更容易受到干扰。
在这里插入图片描述

读取干扰
在这里插入图片描述

写入干扰
在这里插入图片描述

读取干扰指的是在读取某个page时,邻近的bit会受到升高电压的干扰,造成bit出错。写入干扰指的是,某个page在写入时,邻近bit的电压也被升高了,造成bit出错。相对写入干扰来说,读取干扰明显小的多。在读/写干扰中,可能造成某些bit被改变,结果造成数据出错。所以需要在返回数据给主机前,用ECC/EDC算法来纠正这些bit的错误。随着闪存工艺的提升,同样大小的晶片上被封装入更多的单元,造成干扰越来越厉害,所以需要更强大的ECC/EDC来纠正bit。

挑战3:数据保存期限

数据保存期指的是当完全断电后,数据能在NAND Flash里保存多久。NAND单元必须保证一个稳定的电压水平,来保证数据是有效的。典型的SLC一般为10年。电荷从悬浮门里漏出,我们叫做电子迁移,当随着时间的流逝,电荷泄漏到一定程度,改变了NAND单元里悬浮门的电压对应的逻辑值,这样就造成bit出错。

数据保存期会随着擦写次数的增加而明显降低,而且从上面的原理中看出,MLC的数据保存期明显会比SLC少。(更容易被干扰)

挑战4:坏块

NAND Flash里有2种坏块类型:

1,出厂坏块:由于为了保证产量和控制成本,出厂的NAND Flash某些就会有坏块。厂商保证SLC出厂坏块低于2%,MLC出厂坏块低于5%。
2,积累坏块:在多次的写入/擦除循环中,某些NAND单元的电荷电压被永久性的改变了,那就意味着包含这个NAND单元不可用了。

所以固态硬盘需要有坏块管理才能使用,主控制器用坏块表来映射出厂坏块和积累坏块到坏块区内,出厂时,颗粒的第一个块Block 0厂商会保证是可用的(至少ECC后可用)。

挑战5:擦写次数限制

造成NAND Flash有擦写次数限制的主要有2个因素:

1,电荷被困在氧化层,不能进入悬浮门。
2,氧化层结构被破坏。
在这里插入图片描述
如图,一旦氧化层损坏到达一定程度,造成电荷越来越难在P-substrate和悬浮门之间交流。电荷被困在氧化层造成悬浮门中的电压到不了阀值,所以说这个NAND单元就要被放入坏块区了。

当前主流SLC的P/E为10万次,50nm MLC为1万次,3xnm的MLC为5000次。到了这个数字并不意味着就不能用了,这个只是代表平均寿命,也就是说到了这个次数后,坏块就会开始大量增加了。

转载

https://blog.csdn.net/qq_41371349/article/details/104927524

NANDFlash原理_gongjiwei的博客-CSDN博客

参考

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/264165.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数值计算方法(黄明游)】函数插值与曲线拟合(二):三次 Hermite 插值【理论到程序】

​ 文章目录 一、近似表达方式1. 插值&#xff08;Interpolation&#xff09;2. 拟合&#xff08;Fitting&#xff09;3. 投影&#xff08;Projection&#xff09; 二、Lagrange插值1. 拉格朗日插值方法2. Lagrange插值公式a. 线性插值&#xff08;n1&#xff09;b. 抛物插值&…

电工--基本放大电路

电压放大倍数、输入电阻和输出电阻是放大电路的三个主要性能指标 共发射极基本交流放大电路 晶体管&#xff1a;电流放大作用。能量较小的输入信号通过晶体管的控制作用&#xff0c;去控制电源所共给的能量&#xff0c;以在输出端获得一个能量较大的信号 集电极电源电压&#…

Vue3:修改下拉框el-select的样式

问题 在Vue3项目中&#xff0c;使用了elemen-plus的下拉框&#xff0c;但是使用深度修改下拉框的样式&#xff08;比如下拉框的背景颜色&#xff09;一直不生效 解决 给下拉框框添加 popper-class属性&#xff0c;属性名根据需求取&#xff0c;比如这里取的是"selectSt…

Elasticsearch:向量数据库的真相

通过工作示例了解什么是向量数据库、它们如何实现 “相似性” 搜索以及它们可以在明显的 LLM 空间之外的哪些地方使用。除非你一直生活在岩石下&#xff0c;否则你可能听说过诸如生成式人工智能和大型语言模型&#xff08;LLM&#xff09;之类的术语。 除此之外&#xff0c;你很…

在IDEA中创建Maven项目时没有src文件、不自动配置文件

错误示例&#xff1a; 没有src文件&#xff0c;并且没有自动下载相关的配置文件 对我这中情况无效的解决办法&#xff1a; ①配置好下列图中圈出来的文件 ②在VM选项中输入&#xff1a;“-DarchetypeInternal” ③点击应用&#xff0c;再点击确定 ④还是不行 解决办法&#x…

Kafka Streams:深度探索实时流处理应用程序

Apache Kafka Streams 是一款强大的实时流处理库&#xff0c;为构建实时数据处理应用提供了灵活且高性能的解决方案。本文将深入探讨 Kafka Streams 的核心概念、详细原理&#xff0c;并提供更加丰富的示例代码&#xff0c;以帮助读者深入理解和应用这一流处理框架。 1. Kafka…

HarmonyOS鸿蒙应用开发——HTTP网络访问与封装

文章目录 基本使用封装参考 基本使用 鸿蒙应用发起HTTP请求的基本使用&#xff0c;如下&#xff1a; 导入http模块创建httpRequest对象发起http请求&#xff0c;并处理响应结果 第一、导入http模块&#xff1a; import http from ohos.net.http第二、创建httpRequest对象&a…

【C++ 程序设计入门基础】- 第3节-循环结构02

目录 while 语句 案例 while 循环 输入一个整数 n &#xff0c;输出 1~n 的所有整数。 查看运行结果&#xff1a; while 语句结构解析 do while 语句 案例 do while 循环 输入一个整数n&#xff0c;输出1&#xff5e;n的所有整数。 查看运行结果 while、do while的区别 …

C语言 内联函数 + 递归函数

函数分类 内联函数 1&#xff09;内联函数在编译时将函数的代码直接插入到调用它的地方&#xff0c;而不是通过函数调用的方式执行&#xff0c;从而减少了函数调用的开销&#xff0c;提高了代码的执行速度 2&#xff09;使用 inline 关键字来声明 3&#xff09;将函数声明为内联…

前端:让一个div悬浮在另一个div之上

使用 CSS 的 position 属性和 z-index 属性 首先&#xff0c;将第二个 div 元素的 position 属性设为 relative 或 absolute。这样可以让该元素成为一个定位元素&#xff0c;使得后代元素可以相对于它进行定位。 然后&#xff0c;将要悬浮的 div 元素的 position 属性设为 ab…

列表标签的介绍与使用

列表的作用&#xff1a; 整齐、整洁、有序&#xff0c;它作为布局会更加自由和方便。 根据使用情景不同&#xff0c;列表可以分为三大类&#xff1a;无序列表、有序列表和自定义列表 无序列表 <ul> 标签表示 HTML 页面中项目的无序列表&#xff0c;一般会以项目符号呈…

SSD基础架构与NAND IO并发问题探讨

在我们的日常生活中&#xff0c;我们经常会遇到一些“快如闪电”的事物&#xff1a;比如那场突如其来的雨、那个突然出现在你眼前的前任、还有就是今天我们要聊的——固态硬盘&#xff08;SSD&#xff09;。 如果你是一个技术宅&#xff0c;或者对速度有着近乎偏执的追求&…