新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > NAND Flash嵌入式存儲(chǔ)系統(tǒng)結(jié)構(gòu)分析

NAND Flash嵌入式存儲(chǔ)系統(tǒng)結(jié)構(gòu)分析

作者: 時(shí)間:2011-04-24 來源:網(wǎng)絡(luò) 收藏

 目前市場上閃存芯片主要有兩類,即 (Not And ROM)和NOR (Not Or Flash ROM)。前者具有容量大、讀寫速度快、芯片面積小、單元密度高、擦除速度快、成本低等特點(diǎn),更適合于大批量數(shù)據(jù)。如今Windows仍是桌面的主流,對(duì)FAT文件提供了天然的支持。然而就技術(shù)而言,F(xiàn)AT文件系統(tǒng)并不適合Flash,因?yàn)镕lash設(shè)備并不是塊設(shè)備[1],為了不破壞兼容性,并在型閃存中應(yīng)用FAT文件系統(tǒng),國際上提出了閃存轉(zhuǎn)譯層FTL(Flash Translation Layer)的解決方案。

本文引用地址:http://butianyuan.cn/article/150827.htm

  1 Flash系統(tǒng)

  基于NAND Flash的系統(tǒng)的設(shè)計(jì)首先要解決壞塊問題。由于NAND Flash自身存在固有壞塊并在擦除和編程中又隨機(jī)產(chǎn)生壞塊,因此為了提高設(shè)備的可靠性應(yīng)該將這兩種操作分散在閃存不同的塊中,以避免對(duì)某塊的過度操作。

  一般的基于NAND Flash存儲(chǔ)系統(tǒng)驅(qū)動(dòng)分為三個(gè)層次:最底層是硬件操作接口,負(fù)責(zé)將主控芯片與Flash的控制管腳相連,這方面的固件主要實(shí)現(xiàn)對(duì)NAND Flash的物理操作;中間層是閃存轉(zhuǎn)譯層NFTL(NAND FTL),是封裝在Flash驅(qū)動(dòng)中的軟件模塊,其作用是將Flash模擬成與磁盤相類似的塊設(shè)備,使對(duì)上層操作系統(tǒng)而言,NAND Flash就像普通磁盤一樣被訪問。這一層主要是封裝一些特殊的復(fù)雜管理控制功能;最上面的層就是文件管理層,功能類似于普通磁盤上的通用文件系統(tǒng),向上層提供標(biāo)準(zhǔn)的文件操作接口?;贜AND Flash的嵌入式系統(tǒng)存儲(chǔ)原理圖如圖1所示。

  

  根據(jù)以上兩個(gè)方面,既要在驅(qū)動(dòng)中實(shí)現(xiàn)壞塊管理,又要進(jìn)行塊模擬,所以可用的方法有兩種[2]:一是在上層文件系統(tǒng)中解決壞塊問題,驅(qū)動(dòng)層只實(shí)現(xiàn)本身的功能,文件系統(tǒng)為驅(qū)動(dòng)層提供不變的接口,為上層應(yīng)用程序提供可靠透明的服務(wù)。這種方法較簡單,開發(fā)周期比較短,但只對(duì)特定應(yīng)用的嵌入式系統(tǒng)有很強(qiáng)的適應(yīng)性;第二種方法是在驅(qū)動(dòng)層的NFTL中解決壞塊問題,將不可靠的NAND Flash虛擬成可靠的存儲(chǔ)設(shè)備,為上層文件系統(tǒng)提供可靠透明服務(wù),這種方法較第一種更復(fù)雜,但是此法具有較強(qiáng)的可移植性并能徹底斷絕與文件系統(tǒng)的聯(lián)系,其他文件系統(tǒng)也同樣適用。

  本文是以Samsung的NAND Flash K9F2808U0C作為存儲(chǔ)芯片,設(shè)計(jì)了一種在NFTL上實(shí)現(xiàn)壞塊管理并且實(shí)現(xiàn)連續(xù)數(shù)據(jù)讀取的方法。

  2 設(shè)計(jì)思想

  2.1 閃存空間劃分

  K9F2808U0C是16 MB×8 bit的NAND Flash,共有1 024個(gè)Block,1 Block=16 KB,32 Page/Block,1 Page=528 B=(512 B+16 B),其中16 B為備用區(qū),主要存放NAND Flash出廠壞塊標(biāo)記、ECC校驗(yàn)碼以及用戶自定義區(qū)。K9F2808U0C地址空間是24 bit,分三個(gè)周期依次送入NAND Flash的地址鎖存器。本文使用的地址均為字節(jié)地址,數(shù)據(jù)類型為DWORD(4 B)。

  將K9F2808U0C的存儲(chǔ)空間劃分為四個(gè)區(qū):壞塊映射表存放區(qū)、交換塊區(qū)、壞塊映射區(qū)和實(shí)際數(shù)據(jù)存放區(qū)。文件系統(tǒng)管理的空間就是實(shí)際的數(shù)據(jù)存放空間,如圖2所示。

  

  2.2 各分區(qū)宏定義

  #define FLASH_BLOCK_SIZE 0x40000 //16 KB/Block

  #define FLASH_PAGE_SIZE 0x200 //512 B/Page

  #define FLASH_SECTOR_SIZE 0x200

  //1Page=1Sector(only K9F2808U0C)

  #define FLASH_BLOCKS_TABLE 3//壞塊映射表存放塊數(shù)

  #define FLASH_SWAP_BLOCKS 5 //交換區(qū)的塊數(shù)

  #define FLASH_BAD_BLOCKS_REMAP 50

  //壞簇重映區(qū)的塊數(shù)

  #define FLASH_MAX_ADDR 0xFFFFFF

  //Flash最大字節(jié)地址

  各分區(qū)首地址計(jì)算公式:

  FLASH_BLOCK_TABLE_ADDR=FLASH_MAX_ADDR+

  1-3*FLASH_BLOCK_SIZE);

  FLASH_SWAP_BLOCK_ADDR=(FLASH_BLOCK_

  TABLE_ADDR-5*FLASH_BLOCK_SIZE);

  FLASH_BAD_BLOCK_REMAP_ADDR=(FLASH_SWAP_

  BLOCK_ADDR-50*FLASH_BLOCK_SIZE);

  FLASH_MAX_SECTOR_ADDR=(FLASH_MAX_ADDR-

  3*FLASH_BLOCK_TABLE_ADDR-5*FLASH_SWAP_

  BLOCK_ADDR-50*FLASH_BAD_BLOCK_REMAP_ADDR);

  文件系統(tǒng)管理的最大字節(jié)地址。

linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

上一頁 1 2 3 下一頁

評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉