《電子技術應用》
您所在的位置:首頁 > 微波|射頻 > 設計應用 > NAND Flash嵌入式存儲系統結構分析
NAND Flash嵌入式存儲系統結構分析
摘要: 目前市場上閃存芯片主要有兩類,即NAND Flash(Not And Flash ROM)和NOR Flash(Not Or Flash ROM)。前者具有容量大、讀寫速度快、芯片面積小、單元密度高、擦除速度快、成本低等特點,更適合于大批量數據存儲的嵌入式系統。如今Windows仍是桌面系統的主流,對FAT文件系統提供了天然的支持。然而就技術而言,FAT文件系統并不適合Flash,因為Flash設備并不是塊設備[1],為了不破壞兼容性,并在NAND型閃存中應用FAT文件系統,國際上提出了閃存轉譯層FTL(Flash Translation Layer)的解決方案。
Abstract:
Key words :

  目前市場上閃存芯片主要有兩類,即NAND Flash(Not And Flash ROM)和NOR Flash(Not Or Flash ROM)。前者具有容量大、讀寫速度快、芯片面積小、單元密度高、擦除速度快、成本低等特點,更適合于大批量數據存儲的嵌入式" title="嵌入式">嵌入式系統。如今Windows仍是桌面系統的主流,對FAT文件系統" title="文件系統">文件系統提供了天然的支持。然而就技術而言,FAT文件系統并不適合Flash,因為Flash設備并不是塊設備[1],為了不破壞兼容性,并在NAND型閃存中應用FAT文件系統,國際上提出了閃存轉譯層FTL(Flash Translation Layer)的解決方案。

  1 NAND Flash嵌入式存儲系統結構

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

  一般的基于NAND Flash嵌入式存儲系統驅動結構分為三個層次:最底層是硬件操作接口,負責將主控芯片與Flash的控制管腳相連,這方面的固件" title="固件">固件主要實現對NAND Flash的物理操作;中間層是閃存轉譯層NFTL(NAND FTL),是封裝在Flash驅動中的軟件模塊,其作用是將Flash模擬成與磁盤相類似的塊設備,使對上層操作系統而言,NAND Flash就像普通磁盤一樣被訪問。這一層主要是封裝一些特殊的復雜管理控制功能;最上面的層就是文件管理層,功能類似于普通磁盤上的通用文件系統,向上層提供標準的文件操作接口。基于NAND Flash的嵌入式系統存儲結構原理圖如圖1所示。

  

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

  本文是以Samsung的NAND Flash K9F2808U0C作為存儲芯片,設計了一種在NFTL上實現壞塊管理并且實現連續數據讀取的方法。

  2 設計思想

  2.1 閃存空間劃分

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

  將K9F2808U0C的存儲空間劃分為四個區:壞塊映射表存放區、交換塊區、壞塊映射區和實際數據存放區。文件系統管理的空間就是實際的數據存放空間,如圖2所示。

  

  2.2 各分區宏定義

  #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//壞塊映射表存放塊數

  #define FLASH_SWAP_BLOCKS 5 //交換區的塊數

  #define FLASH_BAD_BLOCKS_REMAP 50

  //壞簇重映區的塊數

  #define FLASH_MAX_ADDR 0xFFFFFF

  //Flash最大字節地址

  各分區首地址計算公式:

  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);

  文件系統管理的最大字節地址。

  任意地址Addr:

  所在塊地址:Addr&(~(FLASH_BLOCK_SIZE-1));

  塊內偏移地址:Addr&(FLASH_BLOCK_SIZE-1);

  塊中的頁:(Addr&(FLASH_BLOCK_SIZE-1))/FLASH_

  PAGE_SIZE;

  2.3 分區功能設計

  壞塊映射區存放復制3份的壞塊信息BBI(Bad Block Information)表。復制3份是預防系統突然斷電,造成BBI表數據丟失。選擇最后3個塊,主要是出于固件設計。當Flash首次上電,固件程序通過讀取Flash ID,獲得設備的容量等信息,然后從Flash的最后一塊中尋找BBI表,如果最后一塊沒有發現BBI表,則認為此塊為壞塊,繼續前移尋找,依此類推,直到在預留的3個塊中找到,并將其數據讀入到在主控芯片為其開設的RAM中。如果還找不到,則固件認為該片Flash沒有BBI表。

  交換塊區是對NAND Flash進行擦除或寫操作時用來臨時存放數據,共分配5個塊。選取5塊是出于可靠性設計。用一個數組FlashSwapBlockStatus[FLASH_SWAP_BLOCKS]記錄交換塊狀態:有效還是已經損壞。初始化時,固件認為所有的交換塊都是有效塊,在隨后對其進行擦除或寫操作時,通過讀Flash狀態寄存器判斷該交換塊的真實狀態,并記錄在數組中。交換塊的管理圍繞固件請求返回當前可用交換塊地址或當前正在使用的交換塊地址,并判斷標記當前使用的交換塊狀態為壞。

  壞塊映射區是當主機向數據區寫數據時,檢測到當前塊(數據區)為壞塊時,將數據寫到壞塊映射區中的相應好塊中,并且將這兩個塊的塊地址記錄到BBI表中,以后主機若要對當前塊(數據區)訪問時,只需讀BBI表就可以找到相應映射塊,從而代替壞塊的訪問。這樣就使文件系統所見邏輯塊地址LBA(Logical Block Address)變成連續的,但實際上物理塊地址PBA(Physical Block Address)可能并不連續。上述方法就是壞塊管理的精髓。出于保守設計本文共選50塊作為重映塊。用數組FlashRemapBlockStatus[FLASH_BAD_BLOCKS_REMAP]標識壞塊映射區的狀態:未使用、已使用還是已經損壞。初始化時認為壞塊映射區中所有塊都是好塊。

 

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

  1 NAND Flash嵌入式存儲系統結構

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

  一般的基于NAND Flash嵌入式存儲系統驅動結構分為三個層次:最底層是硬件操作接口,負責將主控芯片與Flash的控制管腳相連,這方面的固件主要實現對NAND Flash的物理操作;中間層是閃存轉譯層NFTL(NAND FTL),是封裝在Flash驅動中的軟件模塊,其作用是將Flash模擬成與磁盤相類似的塊設備,使對上層操作系統而言,NAND Flash就像普通磁盤一樣被訪問。這一層主要是封裝一些特殊的復雜管理控制功能;最上面的層就是文件管理層,功能類似于普通磁盤上的通用文件系統,向上層提供標準的文件操作接口。基于NAND Flash的嵌入式系統存儲結構原理圖如圖1所示。

  

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

  本文是以Samsung的NAND Flash K9F2808U0C作為存儲芯片,設計了一種在NFTL上實現壞塊管理并且實現連續數據讀取的方法。

  2 設計思想

  2.1 閃存空間劃分

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

  將K9F2808U0C的存儲空間劃分為四個區:壞塊映射表存放區、交換塊區、壞塊映射區和實際數據存放區。文件系統管理的空間就是實際的數據存放空間,如圖2所示。

  

  2.2 各分區宏定義

  #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//壞塊映射表存放塊數

  #define FLASH_SWAP_BLOCKS 5 //交換區的塊數

  #define FLASH_BAD_BLOCKS_REMAP 50

  //壞簇重映區的塊數

  #define FLASH_MAX_ADDR 0xFFFFFF

  //Flash最大字節地址

  各分區首地址計算公式:

  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);

  文件系統管理的最大字節地址。

  任意地址Addr:

  所在塊地址:Addr&(~(FLASH_BLOCK_SIZE-1));

  塊內偏移地址:Addr&(FLASH_BLOCK_SIZE-1);

  塊中的頁:(Addr&(FLASH_BLOCK_SIZE-1))/FLASH_

  PAGE_SIZE;

  2.3 分區功能設計

  壞塊映射區存放復制3份的壞塊信息BBI(Bad Block Information)表。復制3份是預防系統突然斷電,造成BBI表數據丟失。選擇最后3個塊,主要是出于固件設計。當Flash首次上電,固件程序通過讀取Flash ID,獲得設備的容量等信息,然后從Flash的最后一塊中尋找BBI表,如果最后一塊沒有發現BBI表,則認為此塊為壞塊,繼續前移尋找,依此類推,直到在預留的3個塊中找到,并將其數據讀入到在主控芯片為其開設的RAM中。如果還找不到,則固件認為該片Flash沒有BBI表。

  交換塊區是對NAND Flash進行擦除或寫操作時用來臨時存放數據,共分配5個塊。選取5塊是出于可靠性設計。用一個數組FlashSwapBlockStatus[FLASH_SWAP_BLOCKS]記錄交換塊狀態:有效還是已經損壞。初始化時,固件認為所有的交換塊都是有效塊,在隨后對其進行擦除或寫操作時,通過讀Flash狀態寄存器判斷該交換塊的真實狀態,并記錄在數組中。交換塊的管理圍繞固件請求返回當前可用交換塊地址或當前正在使用的交換塊地址,并判斷標記當前使用的交換塊狀態為壞。

  壞塊映射區是當主機向數據區寫數據時,檢測到當前塊(數據區)為壞塊時,將數據寫到壞塊映射區中的相應好塊中,并且將這兩個塊的塊地址記錄到BBI表中,以后主機若要對當前塊(數據區)訪問時,只需讀BBI表就可以找到相應映射塊,從而代替壞塊的訪問。這樣就使文件系統所見邏輯塊地址LBA(Logical Block Address)變成連續的,但實際上物理塊地址PBA(Physical Block Address)可能并不連續。上述方法就是壞塊管理的精髓。出于保守設計本文共選50塊作為重映塊。用數組FlashRemapBlockStatus[FLASH_BAD_BLOCKS_REMAP]標識壞塊映射區的狀態:未使用、已使用還是已經損壞。初始化時認為壞塊映射區中所有塊都是好塊。

此內容為AET網站原創,未經授權禁止轉載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
欧美日韩国产免费| 狠狠色2019综合网| 久久精品日产第一区二区| 一个人看的www久久| 亚洲国产小视频| 欧美自拍偷拍| 欧美在线观看日本一区| 亚洲欧美日韩一区二区在线| 99热免费精品| 一本久久a久久免费精品不卡| 亚洲黄色天堂| 亚洲国产精品一区二区www| 一区二区视频免费完整版观看| 国产一区二区三区高清播放| 国产欧美日韩一级| 国产精品网曝门| 国产精品午夜在线观看| 国产精品乱人伦一区二区 | 亚洲婷婷国产精品电影人久久| 日韩午夜视频在线观看| 日韩午夜精品| 亚洲先锋成人| 午夜视频一区二区| 久久黄色小说| 亚洲人成在线观看网站高清| 亚洲精一区二区三区| 一区二区国产日产| 亚洲在线成人精品| 欧美亚洲一级| 久久久久久久久综合| 免费视频最近日韩| 欧美日本在线一区| 国产精品久久久久久久久婷婷| 国产美女精品在线| 国外成人免费视频| 亚洲国产精品久久人人爱蜜臀| 亚洲美女视频在线观看| 亚洲性夜色噜噜噜7777| 欧美在线亚洲一区| 日韩一级大片| 亚洲欧美综合网| 久色成人在线| 欧美视频精品一区| 国产日韩精品一区二区浪潮av| 国产一区二区三区高清在线观看 | 亚洲美女毛片| 亚洲欧美激情在线视频| 久久蜜桃香蕉精品一区二区三区| 欧美成人午夜激情| 国产精品久久久一区二区| 国产一区二区三区最好精华液| 亚洲大胆人体视频| 亚洲校园激情| 亚洲国产三级| 亚洲在线免费| 久久亚洲一区二区| 欧美日韩国产限制| 国产亚洲视频在线| 亚洲欧洲综合| 欧美一区国产在线| 一区二区高清视频| 久久精品日韩欧美| 欧美日韩一区精品| 狠狠久久综合婷婷不卡| 一本大道久久精品懂色aⅴ| 久久爱另类一区二区小说| 一区二区三区国产盗摄| 久久久www成人免费精品| 欧美三级电影精品| 狠狠爱www人成狠狠爱综合网| 99亚洲精品| 亚洲春色另类小说| 亚洲免费综合| 欧美高潮视频| 国产亚洲激情在线| 宅男精品视频| 亚洲精品五月天| 久久久亚洲国产美女国产盗摄| 欧美日韩一区二区三区在线观看免| 狠狠色2019综合网| 亚洲综合欧美| 亚洲美女中出| 看欧美日韩国产| 国产视频精品免费播放| 一二三四社区欧美黄| 亚洲欧洲综合另类| 久久久国产成人精品| 国产精品国产成人国产三级| 亚洲精品乱码久久久久久黑人| 亚洲成色999久久网站| 欧美一区在线视频| 欧美午夜精品电影| 亚洲人成在线播放| 亚洲国产成人在线播放| 久久不射网站| 国产精品欧美日韩一区| 亚洲免费成人| 亚洲精品久久久久久一区二区| 久久久亚洲国产天美传媒修理工| 国产伦精品一区二区| 99精品热视频| 一本一本a久久| 欧美国产日韩亚洲一区| 一色屋精品视频在线观看网站| 性欧美xxxx大乳国产app| 亚洲欧美自拍偷拍| 国产精品久久99| 夜夜爽99久久国产综合精品女不卡| 亚洲免费黄色| 欧美福利影院| 亚洲高清av在线| 亚洲人成人一区二区三区| 免费不卡中文字幕视频| 激情婷婷亚洲| 亚洲国产清纯| 欧美+日本+国产+在线a∨观看| 一区在线电影| 91久久在线| 欧美成人综合| 亚洲欧洲一区| 一本色道久久综合一区| 欧美日韩不卡视频| 日韩一级视频免费观看在线| 一区二区福利| 欧美性猛交一区二区三区精品| 日韩亚洲精品电影| 亚洲一区二区av电影| 国产精品久久久久免费a∨大胸| 亚洲图片在线| 欧美一区二区精品久久911| 国产日韩欧美不卡在线| 欧美一区二区三区四区在线观看| 久久精品亚洲精品| 黄色欧美日韩| 亚洲另类自拍| 欧美色一级片| 亚洲欧美日韩电影| 久久精品视频播放| 一色屋精品亚洲香蕉网站| 亚洲欧洲日产国码二区| 欧美韩日一区二区| 一二三区精品| 久久精品国产亚洲a| 在线观看亚洲| 一区二区电影免费观看| 国产精品美女午夜av| 欧美亚洲综合久久| 美女日韩在线中文字幕| 亚洲三级视频| 午夜国产精品影院在线观看| 国产欧美日韩精品专区| 亚洲国产精品毛片| 欧美日韩99| 亚洲欧美在线免费观看| 麻豆精品视频在线观看视频| 亚洲免费观看高清在线观看| 欧美在线不卡| 在线视频国产日韩| 亚洲午夜精品| 国产一区二区三区在线观看免费视频 | 日韩亚洲综合在线| 国产精品热久久久久夜色精品三区 | 亚洲一区二区av电影| 久久久久久久999精品视频| 亚洲国产精品va| 亚洲免费在线观看视频| 精品动漫3d一区二区三区| 亚洲视频在线二区| 国产欧美日韩亚洲| 日韩一级精品| 国产精品综合| 亚洲日韩视频| 国产精品网站在线观看| 亚洲精品少妇30p| 国产日产欧美一区| 亚洲美女黄色| 国产视频在线观看一区二区三区| 亚洲欧洲精品一区二区| 国产精品萝li| 亚洲精品一线二线三线无人区| 国产精品免费网站| 亚洲美女黄网| 国产主播精品| 亚洲一区在线看| …久久精品99久久香蕉国产| 香蕉久久夜色精品国产| 91久久嫩草影院一区二区| 欧美一区二区视频在线观看2020| 亚洲激情视频在线播放| 久久久www成人免费毛片麻豆| 一本色道婷婷久久欧美| 男人的天堂成人在线| 午夜精品久久99蜜桃的功能介绍| 欧美精品在线一区二区| 欧美在线观看一二区| 欧美日韩在线不卡一区| 91久久精品国产91久久性色tv | 欧美中文字幕不卡| 99热精品在线| 欧美国产日韩在线|