nand

合集下载

NOR和NAND区别

NOR和NAND区别

1) 闪存芯片读写的基本单位不同应用程序对NOR芯片操作以“字”为基本单位。

为了方便对大容量NOR闪存的管理,通常将NO R闪存分成大小为128KB或者64KB的逻辑块,有时候块内还分成扇区。

读写时需要同时指定逻辑块号和块内偏移。

应用程序对NAND芯片操作是以“块”为基本单位。

NAND闪存的块比较小,一般是8KB,然后每块又分成页,页的大小一般是512字节。

要修改NAND芯片中一个字节,必须重写整个数据块。

2)NOR闪存是随机存储介质,用于数据量较小的场合;NAND闪存是连续存储介质,适合存放大的数据。

3) 由于NOR地址线和数据线分开,所以NOR芯片可以像SRAM一样连在数据线上。

NOR芯片的使用也类似于通常的内存芯片,它的传输效率很高,可执行程序可以在芯片内执行( XI P, eXe cute In Place),这样应用程序可以直接在flash闪存内运行,不必再把代码读到系统RAM中。

由于NOR的这个特点,嵌入式系统中经常将NOR芯片做启动芯片使用。

而NAND共用地址和数据总线,需要额外联结一些控制的输入输出,所以直接将NAND芯片做启动芯片比较难。

4) NAND闪存芯片因为共用地址和数据总线的原因,不允许对一个字节甚至一个块进行的数据清空,只能对一个固定大小的区域进行清零操作;而NOR芯片可以对字进行操作。

所以在处理小数据量的I/O操作的时候的速度要快与NAND的速度。

比如一块NOR芯片通常写一个字需要10微秒,那么在32位总线上写512字节需要1280毫秒;而NAND闪存写512字节需要的时间包括:512×每字节50纳秒+10微秒的寻页时间+200微秒的片擦写时间=234微秒。

5)NAND闪存的容量比较大,目前最大容量己经达到8G字节。

为了方便管理,NAND的存储空间使用了块和页两级存储体系,也就是说闪存的存储空间是二维的,比如K9F5608UOA闪存块的大小为16K,每页的大小是512字节,每页还16字节空闲区用来存放错误校验码空间(有时也称为out-of-band,OOB空间);在进行写操作的时候NAND闪存每次将一个字节的数据放入内部的缓存区,然后再发出“写指令”进行写操作。

NAND闪存颗粒结构及工作原理

NAND闪存颗粒结构及工作原理

NAND闪存颗粒结构及工作原理前一节谈SLC和MLC的区别时,我们说到NAND闪存是一种电压元件,靠其内存电压来存储数据,现在我们就来谈谈它的结构及工作原理。

闪存的内部存储结构是金属-氧化层-半导体-场效晶体管(MOSFET),里面有一个浮置栅极(Floating Gate),它便是真正存储数据的单元。

请看下图:数据在闪存的存储单元中是以电荷(electrical charge) 形式存储的。

存储电荷的多少,取决于图中的控制栅极(Control gate)所被施加的电压,其控制了是向存储单元中冲入电荷还是使其释放电荷。

而数据的表示,以所存储的电荷的电压是否超过一个特定的阈值Vth来表示。

1.对于NAND闪存的写入(编程),就是控制Control Gate去充电(对Control Gate施加电压),使得浮置栅极存储的电荷够多,超过阈值Vth,就表示0。

2.对于NAND Flash的擦除(Erase),就是对浮置栅极放电,低于阈值Vth,就表示1。

上图是一个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),Block是NAND Flash上最小的擦除单位。

不同厂牌不同型号颗粒有不同的Page和Block容量。

如上所述,大家应该发现了,写入时,是在字符线上加压以写入数据,擦除时则是在位线上加压,因为一个块共享一条位线,这也是擦除的单位是块而不是页的原因,同理写入的最小单位是页的原因大家想必也已明白。

下图是个8Gb 50nm的SLC芯片,4KB+128字节的页大小,256KB+8KB的块大小。

NOR和NAND的区别

NOR和NAND的区别

NOR和NAND的区别 --1NOR和NAND是现在市场上两种主要的非易失闪存技术。

NOR一般只用来存储少量的代码,主要应用在代码存储介质中;NAND则是高存储密度数据的理想解决方案,适合于数据存储。

器件特点:NOR的特点是应用简单、无需专门的接口电路、传输效率高,它是属于芯片内执行(XIP, eXecute In Place),这样应用程序可以直接在(NOR型)flash闪存内运行,不必再把代码读到系统RAM中。

在1~4MB的小容量时具有很高的成本效益,但是很低的写入和擦除速度大大影响了它的性能。

NAND结构能提供极高的单元密度,可以达到高存储密度,并且写入和擦除的速度也很快。

应用NAND的困难在于flash的管理和需要特殊的系统接口。

性能比较:任何Flash器件的写入操作只能在空或已擦除的单元内进行,所以大多数情况下,在进行写入操作之前必须先执行擦除。

NAND器件执行擦除操作是十分简单的,而NOR则要求在进行擦除前先要将目标块内所有的位都写为0。

由于擦除NOR器件时是以64~128KB的块进行的,执行一个写入/擦除操作的时间为5S,与此相反,擦除NAND器件是以8~32KB的块进行的,执行相同的操作最多只需要4ms。

执行擦除时块尺寸的不同进一步拉大了NOR和NADN之间的性能差距,统计表明,对于给定的一套写入操作(尤其是更新小文件时),更多的擦除操作必须在基于NOR的单元中进行。

这样,当选择存储解决方案时,设计师必须权衡以下的各项因素。

● NOR的读速度比NAND稍快一些。

● NAND的写入速度比NOR快很多。

● NAND的4ms擦除速度远比NOR的5s快。

●大多数写入操作需要先进行擦除操作。

● NAND的擦除单元更小,相应的擦除电路更少。

接口差别:NOR flash带有SRAM接口,有足够的地址引脚来寻址,可以很容易地存取其内部的每一个字节。

NAND器件使用复杂的I/O口来串行地存取数据,各个产品或厂商的方法可能各不相同。

什么是NOR和NAND闪存

什么是NOR和NAND闪存

什么是NOR和NAND闪存?NOR和NAND是现在市场上两种主要的非易失闪存技术。

Intel于1988年首先开发出NORflash技术,紧接着,1989年,东芝公司 发表了NAND flash结构。

NAND flash的单元尺寸几乎是NOR器件的一半,由于生产过程更为简单,NAND结构可以在给定的模具尺寸内提供更高的容量,也就相应地降低了产品的价格。

而且,它的写入和擦除速度很快,因此,其主要功能是存储资料,例如在CompactFlash、Secure Digi-tal、PCCards和MMC存储卡市场上所占份额最大。

NOR的传输效率很高,在小容量时具有很高的成本效益,更加安全,不容易出现数据故障,因此,主要应用以代码存储为主,多与运算相关。

目前,NAND闪存主要用在数码相机闪存卡和MP3播放机中,这两个市场的增长非常迅速。

而NOR芯片主要用在手机和机顶盒中,这两个市场的增长速度相对较慢。

NOR和NAND Flash存储器的区别NOR和NAND是现在市场上两种主要的非易失闪存技术。

Intel于1988年首先开发出NOR flash技术,彻底改变了原先由EPROM和EEPROM一统天下的局面。

紧接着,1989年,东芝公司发表了NAND flash结构,强调降低每比特的成本,更高的性能,并且象磁盘一样可以通过接口轻松升级。

但是经过了十多年之后,仍然有相当多的硬件工程师分不清NOR和NAND闪存。

相“flash存储器”经常可以与相“NOR存储器”互换使用。

许多业内人士也搞不清楚NAND闪存技术相对于NOR 技术的优越之处,因为大多数情况下闪存只是用来存储少量的代码,这时NOR闪存更适合一些。

而NAND则是高数据存储密度的理想解决方案。

NOR的特点是芯片内执行(XIP, eXecute In Place),这样应用程序可以直接在flash闪存内运行,不必再把代码读到系统RAM中。

NOR的传输效率很高,在1~4MB的小容量时具有很高的成本效益,但是很低的写入和擦除速度大大影响了它的性能。

NAND闪存颗粒结构及工作原理

NAND闪存颗粒结构及工作原理

NAND闪存颗粒结构及工作原理一、NAND闪存颗粒结构1.热封罩层:位于最外层,主要起到保护作用,防止外部环境对内部电路的侵害,同时提供良好的外部电气接口。

2.控制逻辑层:位于中间层,包括控制器和错误纠正编码等关键电路。

控制器负责与主机之间的通信,管理数据的读取和写入等操作。

错误纠正编码则用于检测和纠正可能出现的数据错误。

3.储存单元层:位于最内层,是整个颗粒的核心部分,用于存储数据。

每个储存单元由多个存储单元电池组成,每个存储单元电池都可存储一个比特的数据。

二、NAND闪存工作原理1.数据读取当主机需要读取存储在NAND闪存中的数据时,首先通过控制器发送读命令和地址信息。

根据地址信息,控制逻辑层确定所需数据位于哪个储存单元。

然后,控制器通过一系列的电路操作,将存储单元电池中储存的电荷转换为电压信号,再通过转换电路将电压信号转换为数字信号,最终将数据传输给主机。

2.数据写入当主机需要向NAND闪存写入数据时,首先通过控制器发送写命令和地址信息,确定数据写入的位置。

然后,控制器将数据转换为电荷,并存储到相应的存储单元电池中。

存储单元电池中的电荷表示一个比特的数据。

为了防止相邻存储单元之间的干扰,储存单元之间会有一定的间隔。

3.数据擦除当需要擦除NAND闪存中的数据时,需要将整个存储块(通常为64KB或128KB)都擦除。

擦除操作是将存储单元电池中的电荷全部清零的过程。

控制器发送擦除命令和地址信息,确定需要擦除的存储块。

然后,控制器将电荷转换为0,将整个存储块的数据清零。

擦除操作是一个相对耗时的过程,需要大约几毫秒的时间。

总结起来,NAND闪存的工作原理是通过控制逻辑层管理和控制储存单元层中的数据读取、写入和擦除等操作,根据主机的命令和地址信息将数据转换为电荷或电压,并将其存储到相应的存储单元电池中。

借助控制器和错误纠正编码等电路的辅助,可以保证数据的可靠存储和读取。

需要注意的是,NAND闪存的存储单元电池中的电荷随着使用时间的增加会逐渐减少,这可能导致数据的失效或错误。

nand工作原理

nand工作原理

nand工作原理
NAND闪存是一种非易失性存储器,由于其高速读写、大容量特性,广泛应用于存储器件、闪存卡、固态硬盘等领域。

NAND闪存的工作原理是基于电子隧穿效应,将电子注入储存单元中的浮动栅极,从而改变其电荷量,实现信息存储和读取。

NAND闪存的存储单元按照平面结构排列,由浮动栅极、控制栅极和底部源/漏极组成。

控制栅极通过输入信号控制浮动栅极的电荷状态,从而实现数据的存储和读取。

NAND闪存的读写速度取决于输入/输出接口的速率、储存单元的密度和控制器的性能等因素,同时也受到数据擦除和寿命损耗等制约。

随着技术的不断升级,NAND闪存已经成为了存储器件市场的主流产品之一,未来有望进一步发展。

- 1 -。

nand芯片

nand芯片

nand芯片NAND芯片是一种非易失性存储器芯片,被广泛应用于闪存和固态硬盘等产品中。

它具有高度集成度、快速读写速度和较低的功耗等优点,使得它成为了现代电子产品中的重要组成部分。

本文将对NAND芯片进行详细介绍,并分析其特点、应用和发展趋势。

首先,NAND芯片的特点是高度集成度。

它采用了非易失性存储单元的排列组合方式,能够在一个小小的芯片上集成大量的存储单元。

这种高度集成度使得NAND芯片能够在很小的空间内存储大量的数据,满足现代电子产品对存储容量的需求。

其次,NAND芯片具有快速的读写速度。

相比于传统的硬盘驱动器,NAND芯片的读写速度更快,能够更快地访问数据。

这使得使用NAND芯片的电子产品能够提供更快的响应速度和更高的系统性能。

另外,NAND芯片具有较低的功耗。

它采用了非易失性存储单元,不需要额外的电源来维持数据的存储,能够大大降低功耗。

这使得采用NAND芯片的电子产品能够延长电池寿命,并提供更好的能源效率。

NAND芯片广泛应用于闪存和固态硬盘等产品中。

在手机、平板电脑和相机等便携式设备中,NAND芯片被用作存储设备,提供高容量的存储空间。

在高级计算机和服务器中,NAND芯片被用作固态硬盘,提供高速的数据读写能力。

此外,NAND芯片还被用于物联网设备、汽车电子和人工智能等领域,为这些领域的发展提供了重要支持。

随着科技的不断进步,NAND芯片也在不断发展。

首先,NAND芯片的存储密度将进一步提高。

随着技术的发展,更多的存储单元将能够集成到一个芯片上,提供更大的存储容量。

其次,NAND芯片的读写速度将进一步提高。

新的技术和算法将被应用于NAND芯片,以提供更快的数据传输速率。

另外,NAND芯片的功耗将进一步降低,从而提供更高的能源效率。

总的来说,NAND芯片是一种重要的非易失性存储器芯片,具有高度集成度、快速读写速度和较低的功耗等特点。

它在现代电子产品中被广泛应用,并且随着科技的发展,将继续提供更高的存储密度、更快的读写速度和更低的功耗。

NAND独家解释解读

NAND独家解释解读

【编写驱动之前要了解的知识】Flash的擦除操作是以block块为单位的,与此相对应的是其他很多存储设备,是以bit位为最小读取/写入的单位,Flash是一次性地擦除整个块:在发送一个擦除命令后,一次性地将一个block,常见的块的大小是128KB/256KB。

,全部擦除为11. 硬件特性:【Flash的硬件实现机制】Flash全名叫做Flash Memory,属于非易失性存储设备(Non-volatile Memory Device),与此相对应的是易失性存储设备(Volatile Memory Device)。

关于什么是非易失性/易失性,从名字中就可以看出,非易失性就是不容易丢失,数据存储在这类设备中,即使断电了,也不会丢失,这类设备,除了Flash,还有其他比较常见的入硬盘,ROM等,与此相对的,易失性就是断电了,数据就丢失了,比如大家常用的内存,不论是以前的SDRAM,DDR SDRAM,还是现在的DDR2,DDR3等,都是断电后,数据就没了。

Flash的内部存储是MOSFET,里面有个悬浮门(Floating Gate),是真正存储数据的单元。

在Flash之前,紫外线可擦除(uv-erasable)的EPROM,就已经采用用Floating Gate存储数据这一技术了。

图1.典型的Flash内存单元的物理结构数据在Flash内存单元中是以电荷(electrical charge) 形式存储的。

存储电荷的多少,取决于图中的外部门(external gate)所被施加的电压,其控制了是向存储单元中冲入电荷还是使其释放电荷。

而数据的表示,以所存储的电荷的电压是否超过一个特定的阈值Vth来表示。

【SLC和MLC的实现机制】Nand Flash按照内部存储数据单元的电压的不同层次,也就是单个内存单元中,是存储1位数据,还是多位数据,可以分为SLC和MLC:1.SLC,Single Level Cell:单个存储单元,只存储一位数据,表示成1或0.就是上面介绍的,对于数据的表示,单个存储单元中内部所存储电荷的电压,和某个特定的阈值电压Vth,相比,如果大于此Vth值,就是表示1,反之,小于Vth,就表示0.对于nand Flash的数据的写入1,就是控制External Gate去充电,使得存储的电荷够多,超过阈值Vth,就表示1了。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

注册 用户名: 密码: 登录 查看文章 nand flash 读取函数的理解2010-07-08 20:18S3C2410处理器集成了8位NandFlash 控制器。

目前市场上常见的8位NandFlash 有三星公司的k9f1208、k9f1g08、k9f2g08等。

k9f1208、k9f1g08、k9f2g08的数据页大小分别为512Byte 、2kByte 、2kByte 。

它们在寻址方式上有一定差异,所以程序代码并不通用。

本文以S3C2410处理器和k9f1208系统为例,讲述NandFlash 的读写方法。

NandFlash 的数据是以bit 的方式保存在memory cell 里的,一般来说,一个cell 中只能存储一个bit ,这些cell 以8 个或者16 个为单位,连成bit line ,形成所谓的byte(x8)/word(x16),这就是NAND Device 的位宽。

这些Line 组成Page , page 再组织形成一个Block 。

k9f1208的相关数据如下:1block=32page ;1page=528byte=512byte(Main Area)+16byte(Spare Area)。

总容量为=4096(block 数量)*32(page/block )*512(byte/page)=64MbyteNandFlash 以页为单位读写数据,而以块为单位擦除数据。

按照k9f1208的组织方式可以分四类地址: Column Address 、halfpage pointer 、Page Address 、Block Address 。

A[0:25]表示数据在64M 空间中的地址。

Column Address 表示数据在半页中的地址,大小范围0~255,用A[0:7]表示;halfpage pointer 表示半页在整页中的位置,即在0~255空间还是在256~511空间,用A[8]表示;Page Address 表示页在块中的地址,大小范围0~31,用A[13:9]表示;Block Address 表示块在flash 中的位置,大小范围0~4095,A[25:14] 表示;把nand_flash 想象成一本书,每一页纸就是一页数据(每一页书的宽就是flash 的位宽,长就是flash 的列地址),没几十页组成一个块,所有的块又组成一本书,就这样直观多了。

而页寄存器用来缓存一页数据。

#include <common.h>#include <linux/tmd/nand.h>#define __REGb(x) (*(volatile unsigned char *)(x))#define __REGw(x) (*(volatile unsigned short *)(x))#define __REGi(x) (*(volatile unsigned int *)(x))#define NF_BASE 0x4e000000#if defined(CONFIG_S3C2440)#define NFCONF __REGi(NF_BASE + 0x0)#define NFCONT __REGi(NF_BASE + 0x4)#define NFCMD __REGb(NF_BASE + 0x8)#define NFADDR __REGb(NF_BASE + 0xc) #define NFDATA __REGb(NF_BASE + 0x10)#define NFDATA16 __REGw(NF_BASE + 0x10)#define NFSTAT __REGb(NF_BASE + 0x20)#define NFSTAT_BUSY 1 #define nand_select() (NFCONT &= ~(1 << 1)) //cs 低电平选中大脚板The journey is the reward.O(∩_∩)O 哈哈~主页博客相册|个人档案|好友#define nand_deselect() (NFCONT |= (1 << 1))#define nand_clear_RnB() (NFSTAT |= (1 << 2))#endifstatic inline void nand_wait(void){int i;while(!(NFSTAT & NFSTAT_BUSY))for(i=0; i<10; i++);}struct boot_nand_t {int page_size;int block_size;int bad_block_offset;};static int is_bad_block(struct boot_nand_t *nand, unsigned long i){unsigned char data;unsigned long page_num;nand_clear_RnB();if(nand->page_size == 512){NFCMD = NAND_CMD_READOOB;NFADDR = nand->bad_block_offset & 0xf;NFADDR = (i >> 9) & 0xff;NFADDR = (i >> 17) & 0xff;NFADDR = (i >> 25) & 0xff;}else if(nand->page_size == 2048){page_num = i >> 11; /* addr / 2048 */NFCMD = NAND_CMD_READ0;NFADDR = (nand->bad_block_offset ) & 0xff; // Check "FFh" at the column address 2048 NFADDR = (nand->bad_block_offset >> 8) & 0xff; // of the 1st and 2nd page in the block NFADDR = (page_num ) & 0xff; // address of blockNFADDR = (page_num >> 8) & 0xff;NFADDR = (page_num >> 16) & 0xff;NFCMD = NAND_CMD_READSTART;}else{return -1;}nand_wait();data = (NFDATA & 0xff);if(data != 0xff)return 1;return 0;}static int nand_read_page_ll(struct boot_nand_t *nand, unsigned char *buf, unsigned long addr) {unsigned short *ptr16 = (unsigned short *)buf;unsigned int i, page_num;nand_clear_RnB();NFCMD = NAND_CMD_READ0;if(nand->page_size == 512){NFADDR = addr & 0xff;NFADDR = (addr >> 9)&0xff;NFADDR = (addr >> 17)&0xff;NFADDR = (addr >> 25)&0xff;}else if (nand->page_size == 2048){page_num = addr >> 11;NFADDR = 0; //页内地址 ,为0时读取整页NFADDR = 0;NFADDR = page_num & 0Xff; //确定页地址NFADDR = (page_num >> 8) & 0xff;NFADDR = (page_num >> 16) & 0xff;NFCMD = NAND_CMD_READSTART;}else {return -1;}nand_wait(); //发送命令和地址后,flash ready#if defined(CONFIG_S3C2410)for(i = 0; i < nand->page_size; i++){*buf = (NFDATA & 0xff);buf++;}#elif defined(CONFIG_S3C2440) //循环读出数据for(i = 0; i < (nand->page_size >> 1); i++){*ptr16 = NFDATA16;ptr16++;}#endifreturn nand->page_size;}static unsigned short nand_read_id(){unsigned short ret = 0;NFCMD = NAND_CMD_READID;NFADDR = 0;res = NFDATA;res = (res << 8) | NFDATA;return res;}extern unsigned int dynpart_size[];int nand_read_ll(unsigned char *buf, unsigned long start_addr, int size){int i, j;unsigned short nand_id;struct boot_nand_t nand;nand_select();nand_clear_RnB();for(i = 0; i < 10; i++);nand_id = nand_read_id();if(nand_id == 0xec76 || /* Samsung K91208 */nand_id == 0xad76) { /*Hynix HY27US08121A*/nand.page_size = 512;nand.block_size = 16 * 1024;} else if(nand_id == 0xecf1 ||/* Samsung K9F1G08U0B */nand_id == 0xecda ||/* Samsung K9F2G08U0B */nand_id == 0xecd3 ){/* Samsung K9K8G08 */nand.page_size = 2048;nand.block_size = 128 * 1024;nand.bad_block_offset = nand.page_size;}else{return -1 ; //hang}if((start_addr & (nand.block_size - 1)) || (size & (nand.block_size - 1)))//检查块地址对齐,即地址的低17为只能为0。

相关文档
最新文档