❶ nand flash 是什么意思
flash存储器是嵌入式硬件系统所使用的存储设备,相当于PC机的硬盘,断电后仍然能够保存数据。一般固件(或者说,嵌入式软件)就是保存在里面的。
包括Nor flash和Nand flash。各有优缺点。Nand flash容量较大。
❷ Nandflash之MLC和SLC的区别
一、优缺点不同
1、MLC:为了保证MLC的寿命,控制芯片都校验和智能磨损平衡技术算法,使得每个存储单元的写入次数可以平均分摊,达到100万小时故障间隔时间(MTBF)。
2、SLC:复写次数高达100000次,比MLC闪存高10倍。
二、特点不同
1、MLC:是容量大成本低,但是速度慢。
2、SLC:成本高、容量小、速度快。
三、架构不同
1、MLC:MLC的每个单元是2bit的,相对SLC来说整整多了一倍。不过,由于每个MLC存储单元中存放的资料较多,结构相对复杂,出错的几率会增加,必须进行错误修正,这个动作导致其性能大幅落后于结构简单的SLC闪存。
2、SLC:SLC架构可承受约10万次,是MLC的10倍。
❸ NandFlash是什么
这个应该是手机/相机/PDA上的说明。。。
NandFlash是一种存储介质。相当于电脑的硬盘。是用来存储东西的。电脑上可存储的东西,在这里也都能存储。
而1G\2G\4G\8G\16G是这种存储介质的大小容量。和电脑硬盘的多少G单位是一样的。
这里为什么会有多种选择呢?
因为同一款手机/相机/PDA在推出时,会考虑不同人的需求。而这种不同配置,相当与PC上硬盘大小的不同配置。有些人喜欢大容量的,有些人感觉小点就够用。
当然,容量越小,价格越便宜。
自己选择时,应考虑自己的实际情况和价格,来选取一个最优的。
❹ nandflash和norflash的区别
nand flash和nor flash的区别如下:
1、开发的公司不同:
NOR flash是intel公司1988年开发出了NOR flash技术。NOR的特点是芯片内执行(XIP, eXecute In Place)。
Nand flash内存是flash内存的一种,1989年,东芝公司发表了NAND flash结构。其内部采用非线性宏单元模式,为固态大容量内存的实现提供了廉价有效的解决方案。
2、存储单元关系的不同:
两种FLASH具有相同的存储单元,工作原理也一样,但NAND型FLASH各存储单元之间是串联的,而NOR型FLASH各单元之间是并联的。为了对全部的存储单元有效管理,必须对存储单元进行统一编址。
3、擦除操作的不同:
NAND FLASH执行擦除操作是十分简单的,而NOR FLASH则要求在进行擦除前先要将目标块内所有的位都写为0。
由于擦除NOR FLASH时是以64~128KB的块进行的,执行一个写入/擦除操作的时间为5s,与此相反,擦除NAND FLASH是以8~32KB的块进行的,执行相同的操作最多只需要4ms。
参考资料来源:网络-Nand flash
参考资料来源:网络-NOR Flash
❺ Nandflash和norflash的区别
NANDflash和NORflash的区别:
(1)、接口差别:
NOR型Flash采用的SRAM接口,提供足够的地址引脚来寻址,可以很容易的存取其片内的每一个字节;NAND型Flash使用复杂的I/O口来串行的存取数据,各个产品或厂商的方法可能各不相同,通常是采用8个I/O引脚来传送控制、地址、数据信息。
(2)、读写的基本单位:
NOR型Flash操作是以“字”为基本单位,而NAND型Flash以“页面”为基本单位,页的大小一般为512字节。
(3)、性能比较:
NOR型Flash的地址线和数据线是分开的,传输效率很高,程序可以在芯片内部执行,NOR型的读速度比NAND稍快一些;NAND型Flash写入速度比NOR型Flash快很多,因为NAND读写以页为基本操作单位。
(4)、容量和成本:
NAND型Flash具有较高的单元密度,容量可以做得比较大,加之其生产过程更为简单,价格较低;NOR型Flash占据了容量为1~16MB闪存市场的大部分,而NAND型Flash只是用在8~128MB的产品中,这也说明NOR主要用在代码存储介质中,NAND适合数据存储在CompactFlash、PC Cards、MMC存储卡市场上所占的份额最大。
(5)、软件支持:
NAND型和NOR型Flash在进行写入和擦除时都需要MTD(Memory Technology Drivers,MTD已集成在Flash芯片内部,它是对Flash进行操作的接口),这是它们的共同特点;但在NOR型Flash上运行代码不需要任何的软件支持,而在NAND型Flash上进行同样操作时,通常需要驱动程序,即内存技术驱动程序MTD。
❻ 三星的系列NandFlash有什么区别
您好
K9F系列的是SLC结构的NANDFLASH
2.K9G系列的是MCL结构的NANDFLASH
首先是存取次数。MLC架构理论上只能承受约1万次的数据写入,而SLC架构可承受约10万次,是MLC的10倍。这个1万次指的是数据写入次数,而非数据写入加读取的总次数。数据读取次数的多寡对闪存寿命有一定影响,但绝非像写入那样严重。
其次是读取和写入速度。这里仍存在认识上的误区,所有闪存芯片读取、写入或擦除数据都是在闪存控制芯片下完成的,闪存控制芯片的速度决定了闪存里数据的读取、擦除或是重新写入的速度。SLC技术被开发的年头远早于MLC技术,与之相匹配的控制芯片技术上已经非常成熟。
第三是功耗。SLC架构由于每Cell仅存放1bit数据,故只有高和低2种电平状态,使用1.8V的电压就可以驱动。而MLC架构每Cell需要存放多个bit,即电平至少要被分为4档(存放2bit),所以需要有3.3V及以上的电压才能驱动。
第四是出错率。在一次读写中SLC只有0或1两种状态,这种技术能提供快速的程序编程与读取,简单点说每Cell就像我们日常生活中使用的开关一样,只有开和关两种状态,非常稳定,就算其中一个Cell损坏,对整体的性能也不会有影响。在一次读写中MLC有四种状态(以每Cell存取2bit为例),这就意味着MLC存储时要更精确地控制每个存储单元的充电电压,读写时就需要更长的充电时间来保证数据的可靠性。它已经不再是简单的开关电路,而是要控制四种不同的状态,这在产品的出错率方面和稳定性方面有较大要求,而且一旦出现错误,就会导致2倍及以上的数据损坏,所以MLC对制造工艺和控制芯片有着更高的要求。
第五是制造成本。MLC技术原来每Cell仅存放1bit数据,而现在每Cell能存放2bit甚至更多数据,这些都是在存储体体积不增大的前提下实现的,所以相同容量大小的MLC
NAND Flash制造成本要远低于SLC NAND Flash。
❼ NAND flash和NOR flash的区别详解
NAND flash和NOR flash的区别
一、NAND flash和NOR flash的性能比较
flash闪存是非易失存储器,可以对称为块的存储器单元块进行擦写和再编程。任何flash器件的写入操作只能在空或已擦除的单元内进行,所以大多数情况下,在进行写入操作之前必须先执行擦除。NAND器件执行擦除操作是十分简单的,而NOR则要求在进行擦除前先要将目标块内所有的位都写为0。由于擦除NOR器件时是以64~128KB的块进行的,执行一个写入/擦除操作的时间为5s,与此相反,擦除NAND器件是以8~32KB的块进行的,执行相同的操作最多只需要4ms。执行擦除时块尺寸的不同进一步拉大了NOR和NADN之间的性能差距,统计表明,对于给定的一套写入操作(尤其是更新小文件时),更多的擦除操作必须在基于NOR的单元中进行。这样,当选择存储解决方案时,设计师必须权衡以下的各项因素。
1、NOR的读速度比NAND稍快一些。
2、NAND的写入速度比NOR快很多。
3、NAND的4ms擦除速度远比NOR的5s快。
4、大多数写入操作需要先进行擦除操作。
5、NAND的擦除单元更小,相应的擦除电路更少。
二、NAND flash和NOR flash的接口差别
NOR flash带有SRAM接口,有足够的地址引脚来寻址,可以很容易地存取其内部的每一个字节。
NAND器件使用复杂的I/O口来串行地存取数据,各个产品或厂商的方法可能各不相同。8个引脚用来传送控制、地址和数据信息。NAND读和写操作采用512字节的块,这一点有点像硬盘管理此类操作,很自然地,基于NAND的存储器就可以取代硬盘或其他块设备。
三、NAND flash和NOR flash的容量和成本
NAND flash的单元尺寸几乎是NOR器件的一半,由于生产过程更为简单,NAND结构可以在给定的模具尺寸内提供更高的容量,也就相应地降低了价格。
NOR flash占据了容量为1~16MB闪存市场的大部分,而NAND flash只是用在8~128MB的产品当中,这也说明NOR主要应用在代码存储介质中,NAND适合于数据存储,NAND在CompactFlash、Secure Digital、PC Cards和MMC存储卡市场上所占份额最大。
四、NAND flash和NOR flash的可靠性和耐用性
采用flahs介质时一个需要重点考虑的问题是可靠性。对于需要扩展MTBF的系统来说,Flash是非常合适的存储方案。可以从寿命(耐用性)、位交换和坏块处理三个方面来比较NOR和NAND的可靠性。
五、NAND flash和NOR flash的寿命(耐用性)
在NAND闪存中每个块的最大擦写次数是一百万次,而NOR的擦写次数是十万次。NAND存储器除了具有10比1的块擦除周期优势,典型的NAND块尺寸要比NOR器件小8倍,每个NAND存储器块在给定的时间内的删除次数要少一些。
六、位交换
所有flash器件都受位交换现象的困扰。在某些情况下(很少见,NAND发生的次数要比NOR多),一个比特位会发生反转或被报告反转了。一位的变化可能不很明显,但是如果发生在一个关键文件上,这个小小的故障可能导致系统停机。如果只是报告有问题,多读几次就可能解决了。当然,如果这个位真的改变了,就必须采用错误探测/错误更正(EDC/ECC)算法。位反转的问题更多见于NAND闪存,NAND的供应商建议使用NAND闪存的时候,同时使用
七、EDC/ECC算法
这个问题对于用NAND存储多媒体信息时倒不是致命的。当然,如果用本地存储设备来存储操作系统、配置文件或其他敏感信息时,必须使用EDC/ECC系统以确保可靠性。
八、坏块处理
NAND器件中的坏块是随机分布的。以前也曾有过消除坏块的努力,但发现成品率太低,代价太高,根本不划算。
NAND器件需要对介质进行初始化扫描以发现坏块,并将坏块标记为不可用。在已制成的器件中,如果通过可靠的方法不能进行这项处理,将导致高故障率。
九、易于使用
可以非常直接地使用基于NOR的闪存,可以像其他存储器那样连接,并可以在上面直接运行代码。
由于需要I/O接口,NAND要复杂得多。各种NAND器件的存取方法因厂家而异。在使用NAND器件时,必须先写入驱动程序,才能继续执行其他操作。向NAND器件写入信息需要相当的技巧,因为设计师绝不能向坏块写入,这就意味着在NAND器件上自始至终都必须进行虚拟映射。
十、软件支持
当讨论软件支持的时候,应该区别基本的读/写/擦操作和高一级的用于磁盘仿真和闪存管理算法的软件,包括性能优化。
在NOR器件上运行代码不需要任何的软件支持,在NAND器件上进行同样操作时,通常需要驱动程序,也就是内存技术驱动程序(MTD),NAND和NOR器件在进行写入和擦除操作时都需要MTD。
使用NOR器件时所需要的MTD要相对少一些,许多厂商都提供用于NOR器件的更高级软件,这其中包括M-System的TrueFFS驱动,该驱动被Wind River System、Microsoft、QNX Software System、Symbian和Intel等厂商所采用。
驱动还用于对DiskOnChip产品进行仿真和NAND闪存的管理,包括纠错、坏块处理和损耗平衡。
❽ NAND Flash和Nor Flash到底有什么区别
性能差别:对于Flash的写入速度,其实是写入和擦除的综合速度,Nand Flash擦除很简单,而Nor Flash需要将所有位全部写0(这里要说明一下,Flash器件写入只能把1写为0,而不能把0写为1,也就说,其写入的方式是按照逻辑与来进行的,譬如原来地址上的数据是0x01,写入0x98,地址存在的数据就是0x01&0x98 = 0x00), Nor Flash在64KB块进行写/擦除操作时,大概需要700ms的时间,而Nand Flash对32KB块进行操作,仅仅需要4ms。
容量差别:Nand Flash容量要比Nor Flash大得多,Nand:8M-4GB.Nor:1-32MB,因此对于嵌入式设备,Nand可以作为U盘或SD存储介质,Nor可以用来存储程序,如果不太考虑速度,代码可以在其中运行。
使用时间:Nand Flash是Nor Flash的十倍,Nand Flash是100万次擦写,Nor是10万次。
数据可靠性:Flash器件内部都是按照位操作,所以容易造成位交换,Nand Flash发生的次数比Nor要多,因此Nand Flash通过ECC算法来保证数据的可靠性。 下一篇预告: Nand Flash硬件接口与驱动实现
❾ NANDFLASH与eMMC的区别
NANDFLASH与eMMC的区别为:来源不同、用途不同、读取不同。
一、来源不同
1、NANDFLASH:NANDFLASH是东芝在1989年的国际固态电路研讨会(ISSCC)上发表的。
2、eMMC:eMMC为MMC协会所订立的。
二、用途不同
1、NANDFLASH:NANDFLASH适合用于储存卡之类的大量存储设备。
2、eMMC:eMMC主要是针对手机或平板电脑等产品的内嵌式存储器标准规格。
三、读取不同
1、NANDFLASH:NANDFLASHI/O接口并没有随机存取外部地址总线,它必须以区块性的方式进行读取。
2、eMMC:eMMC在封装中集成了一个控制器,提供标准接口进行读取并管理闪存。
❿ 如何测试nandflash可靠性
/*说明:测试nandflash的可靠性,有的时候nandflash写进去的内容会变位比如写进去1,可是存储的值变成了0,为了测试这种情况的频率写了下面的测试用例*/
/*nandflash挂载在/home/test目录下,通过不停的往test目录下写两个文件A,B(随便两个文件二进制文件都可以),写进去的文件名和顺序A0,B0,A1,B1,A2,B2....,每写进入一个文件读出来和A或者B比较*/
/*如果一旦发现写满了就删除文件重写继续写,一直持续下去,如果发现读出来的内容和写进入的内容就报错,然后再写一次,如果还错就退出程序*/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <fcntl.h>
#include <sys/statfs.h> //for statfs
#include <sys/vfs.h> //for statfs
#include <sys/types.h>
#include <sys/stat.h> //for stat
#include <sys/time.h>
#include "errno.h"
static int nandflash_wrong=0;
int check_remain_space(void)
{
int stat_flag=0;
int i;
struct statfs nandflash_stat;
long hdisk_remainder_space;
char path_name_check[32];
struct stat name_buf_check;
stat_flag = statfs("/home/test", &nandflash_stat);//获取nandflash的信息
if(stat_flag<0)
{
printf("get nandflash info error!\n");
return -1;
}
hdisk_remainder_space = (float)nandflash_stat.f_bsize * nandflash_stat.f_bfree / 1024;//检测磁盘空间
if(hdisk_remainder_space<8*1024) //至少保留8M的空间
{
for(i=0;i<200;i++)
{
sprintf(path_name_check,"/home/test/A%d",i);
stat(path_name_check,&name_buf_check);
if(errno!=ENOENT) //文件存在,则删除
{
unlink(path_name_check);//不能重名
}
sprintf(path_name_check,"/home/test/B%d",i);
stat(path_name_check,&name_buf_check);
if(errno!=ENOENT) //文件存在,则删除
{
unlink(path_name_check);//不能重名
}
}
sleep(20); //删除文件并不是立即删除,所以要等待文件删除之后再写,防止写的速度比删除速度快,导致磁盘被写满的情况而出错
return 1;
}
return 0;
}
int write_read_nandflash(int mark,unsigned int i,int file_size,char *write_buf,char *read_buf)
{
FILE *fp;
char path_name[32];
unsigned long buf_count=0;
struct stat name_buf;
if( mark == 0 )
{
sprintf(path_name,"/home/test/A%d",i);//生成不同的文件名A0,A1,A2,A3.......
}
else
{
sprintf(path_name,"/home/test/B%d",i);
}
stat(path_name,&name_buf);
if(errno!=ENOENT) //文件存在,则删除
{
unlink(path_name);//不能重名
sleep(3);
}
if((fp=fopen(path_name,"w"))==NULL)
{
printf("fopen failed!\n");
return -1;
}
fwrite(write_buf,file_size,1,fp);
fclose(fp);
// printf("write file name is:%s\n",path_name);
if((fp=fopen(path_name,"r"))==NULL)
{
printf("fopen failed!\n");
return -1;
}
fread(read_buf,file_size,1,fp);
for(buf_count=0;buf_count<(file_size-1);buf_count++)//将master/slave文件写到nandflash中的内容读出来比较
{
if(read_buf[buf_count]!=write_buf[buf_count])
{
system("date");//出错的时候打印的系统时间
printf("file name is %s:\n",path_name);
unlink(path_name);
sleep(3);
if((fp=fopen(path_name,"w"))==NULL)
{
printf("fopen failed!\n");
return -1;
}
nandflash_wrong++;
fwrite(write_buf,file_size,1,fp);//出错之后再写一次
fclose(fp);
if((fp=fopen(path_name,"r"))==NULL)
{
printf("fopen failed!\n");
return -1;
}
fread(read_buf,file_size,1,fp);
for(buf_count=0;buf_count<(file_size-1);buf_count++)
{
if(read_buf[buf_count]!=write_buf[buf_count])
{
printf("file name is %s:\n",path_name);
printf("write twice failed!\n");
fclose(fp);
return -1;
}
}
}
}
fclose(fp);
return 0;
}
int main(void)
{
int A_size,B_size;
A_size=B_size=0;
int A_fd,B_fd;
char *A_buf_read=NULL;
char *B_buf_read=NULL;
char *A_buf_write=NULL;
char *B_buf_write=NULL;
unsigned int iteation=0;
int ret;
A_fd=0;
A_fd=open("/home/A",O_RDONLY);
if(A_fd<0)
{
printf("open A faild!\n");
return -1;
}
A_size=lseek(A_fd,0,SEEK_END);
lseek(A_fd,0,SEEK_SET);
A_buf_write=(char *)malloc(A_size);
if(NULL == A_buf_write)
{
printf("A_buf_write malloc failed!\n");
close(A_fd);
return -1;
}
A_buf_read=(char *)malloc(A_size);
if(NULL == A_buf_read)
{
printf("A_buf_read malloc failed!\n");
close(A_fd);
return -1;
}
if(read(A_fd,A_buf_write,A_size)<0)
{
close(A_fd);
printf("read A file failed\n");
}
close(A_fd);
B_fd=0;
B_fd=open("/home/B",O_RDONLY);
if(B_fd<0)
{
printf("open B faild!\n");
return -1;
}
B_size=lseek(B_fd,0,SEEK_END);
lseek(B_fd,0,SEEK_SET);
B_buf_write=(char *)malloc(B_size);
if(NULL == B_buf_write)
{
printf("B_buf_write malloc failed!\n");
close(B_fd);
return -1;
}
B_buf_read=(char *)malloc(B_size);
if(NULL == B_buf_read)
{
printf("B_buf_read malloc failed!\n");
close(B_fd);
return -1;
}
if(read(B_fd,B_buf_write,B_size)<0)
{
printf("read B file failed\n");
close(B_fd);
}
close(B_fd);
system("date");//测试开始,开始读写nandflash
while(1)
{
if((ret=check_remain_space())<0)//检测磁盘空间,小于8M,要删除文件重新从A0,B0,A1,B1,A2,B2。。。。写
{
printf("check space wrong\n");
return -1;
}
else if(ret==1)
{
iteation=0;
}
if(write_read_nandflash(0,iteation,A_size,A_buf_write,A_buf_read)<0)//write A to nand and read it to compare
{
printf("write_read nand flash wrong\n");
return -1;
}
if(write_read_nandflash(1,iteation,B_size,B_buf_write,B_buf_read)<0)//write B
{
printf("write_read nand flash wrong\n");
return -1;
}
iteation++;
}
return 0;
}