資料介紹
??目前市場上主要有兩類,即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就像普通磁盤一樣被訪問。這一層主要是封裝一些特殊的復雜管理控制功能;最上面的層就是文件管理層,功能類似于普通磁盤上的通用文件系統,向上層提供標準的文件操作接口?;贜AND 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]標識壞塊映射區的狀態:未使用、已使用還是已經損壞。初始化時認為壞塊映射區中所有塊都是好塊。
下載該資料的人也在下載
下載該資料的人還在閱讀
更多 >
- 基于Flash的嵌入式交互系統的設計與實現
- Nand Flash文件系統解決方案
- 嵌入式監控系統硬件結構資料下載
- 嵌入式硬件系統教程之嵌入式存儲技術的詳細資料說明 14次下載
- 嵌入式Linux開發教程之嵌入式系統介紹資料免費下載
- 嵌入式教程之嵌入式系統基礎的詳細資料說明 30次下載
- NAND Flash在嵌入式Linux平臺下的驅動實現 2次下載
- NAND Flash存儲系統解決方案 0次下載
- FLASH的特點和結構與基于FLASH介質嵌入式存儲的設計 6次下載
- 嵌入式Linux下NAND存儲系統的設計 76次下載
- 嵌入式SATA存儲系統的研究
- 嵌入式平臺上NAND FLASH的驅動實現
- 嵌入式系統中的Flash設計與分析
- 嵌入式系統中的Flash 存儲管理
- 嵌入式Linux系統下NOR Flash的配置和使用
- 嵌入式片上系統采用的是馮諾依曼結構嗎 351次閱讀
- 嵌入式設備系統日志記錄方法 4993次閱讀
- 一文了解SPI NAND Flash和SPI NOR Flash的區別 6324次閱讀
- 嵌入式系統應用實例的詳細資料介紹 4604次閱讀
- 嵌入式系統的組成結構詳細說明 7146次閱讀
- 基于S3C4510B微處理器和uClinux實現存儲系統的設計 801次閱讀
- 基于μC/OS嵌入式操作系統的嵌入式數據管理設計 1179次閱讀
- NAND FLASH驅動程序實現的三個具體方面分析 2866次閱讀
- 多種嵌入式文件系統介紹:基于FLASH的文件系統 1.1w次閱讀
- 利用Micron可管理NAND 適用嵌入式大容量存儲 803次閱讀
- VDK與嵌入式文件系統的投入使用 1846次閱讀
- 基于Nand Flash 存儲技術的嵌入式linux 系統設計 1520次閱讀
- 基于存儲系統SILT基本結構的詳細解析 5490次閱讀
- 圖像采集存儲系統選擇應考慮的幾大要素 2253次閱讀
- 嵌入式系統結構與協同性探討 1349次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數據手冊
- 1.06 MB | 532次下載 | 免費
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費
- 3TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費
- 5元宇宙深度解析—未來的未來-風口還是泡沫
- 6.40 MB | 227次下載 | 免費
- 6迪文DGUS開發指南
- 31.67 MB | 194次下載 | 免費
- 7元宇宙底層硬件系列報告
- 13.42 MB | 182次下載 | 免費
- 8FP5207XR-G1中文應用手冊
- 1.09 MB | 178次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應用800例(新編版)
- 0.00 MB | 33566次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關電源設計實例指南
- 未知 | 21549次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數字電路基礎pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅動電路設計》 溫德爾著
- 0.00 MB | 6656次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉中文版)
- 78.1 MB | 537798次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191187次下載 | 免費
- 7十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183279次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論
查看更多