❶ 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;
}