專利名稱:一種在Windows CE環(huán)境下建立大頁面NAND Flash存儲(chǔ)系統(tǒng)的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種在Windows CE環(huán)境下建立大頁面Nand Flash存儲(chǔ)系統(tǒng)的方法, 屬于計(jì)算機(jī)操作系統(tǒng)與存儲(chǔ)系統(tǒng)領(lǐng)域。
背景技術(shù):
NAND Flash是一種新型的存儲(chǔ)器件,由于其具有存儲(chǔ)密度大、寫入擦除速度快、成 本低廉等突出優(yōu)點(diǎn),目前已經(jīng)成為市場上嵌入式系統(tǒng)的主流存儲(chǔ)器件。和另一種主流的閃 存技術(shù)NOR Flash相比,NAND Flash寫(編程)和擦除操作快,但隨機(jī)存取慢;NOR Flash 隨機(jī)存取快,能以字節(jié)為單位寫,但擦除慢。NAND相對于NOR存儲(chǔ)單元密度高、成本低、性價(jià) 比好,適合作為大容量存儲(chǔ)。Windows CE嵌入式操作系統(tǒng)是微軟公司在1996年推出的一種全新開發(fā)的操作系 統(tǒng),具備搶先式多任務(wù)功能以及強(qiáng)大的通信能力,專門應(yīng)用在信息設(shè)備、移動(dòng)應(yīng)用、消費(fèi)類 電子產(chǎn)品以及嵌入式應(yīng)用等非PC領(lǐng)域。NAND Flash由塊(block)構(gòu)成,塊由頁(page)構(gòu)成。擦寫以塊為單位,讀寫以頁為 單位。每個(gè)頁包含數(shù)據(jù)區(qū)和空閑(spare)區(qū),spare區(qū)用于糾錯(cuò)碼(ECC)等軟件開銷。NAND Flash復(fù)用指令、地址和數(shù)據(jù)總線,串行地存取數(shù)據(jù)和發(fā)指令,節(jié)省芯片引腳數(shù),不用改變硬 件設(shè)計(jì)就可支持更大容量的芯片。對NAND的操作主要有讀、寫、擦除三種頁寫入、塊擦除將塊全部字節(jié)編程為OxFF 來回收空間.工作時(shí)序都是先發(fā)操作指令,再發(fā)要操作單元的地址,待芯片就緒后進(jìn)行各 自的處理,如讀操作是讀數(shù)據(jù)并做ECC校驗(yàn)。早期的Nand Flash器件(如三星的K9K5608、K9F1208等型號(hào))頁面大小均為 512字節(jié),其最大容量一般不超過1Gbit,讀寫速度一般限制在12. 65MByte/s和2. 33MByte/ s以下。為了進(jìn)一步擴(kuò)大容量,提高性能,目前新一代的NAND Flash(如三星的K9F1G08、 K9K2G08,現(xiàn)代的HY27UF084G等型號(hào))普遍采用了 2048字節(jié)的大頁面結(jié)構(gòu),最大容量可達(dá) 32Gbit,理論讀寫速度分別可以達(dá)到16. 13MByte/s和5. 2M/s,使器件的容量和性能得到了 顯著的提高。在未來,采用4096乃至8192字節(jié)頁面的超大容量NAND Flash也即將問世。但與常規(guī)頁面器件相比,大頁面NAND Flash在命令碼、讀寫地址等方面的操作都 有所不同;目前在Windows CE操作系統(tǒng)環(huán)境下使用的主要是FAT文件系統(tǒng),目前僅能應(yīng)用 于512字節(jié)頁面的常規(guī)NAND Flash,無法應(yīng)用于大頁面NAND Flash器件;有其他專利提出 將大頁面NAND Flash器件虛擬成多個(gè)常規(guī)頁面器件的方法,但是操作效率低下,不能充分 利用器件本身的特點(diǎn)和性能優(yōu)勢,且占用了額外的系統(tǒng)資源。
發(fā)明內(nèi)容
本發(fā)明的目的在于克服上述Windows CE操作系統(tǒng)環(huán)境下FAT文件系統(tǒng)扇區(qū)與 實(shí)際大頁面NAND Flash器件頁面大小不一致而無法建立存儲(chǔ)系統(tǒng)的問題,提供一種在WindowCE操作系統(tǒng)環(huán)境下建立大頁面NAND Flash器件存儲(chǔ)系統(tǒng)的方法。本發(fā)明解決其技術(shù)問題采用的技術(shù)方案如下一種在Windows CE環(huán)境下建立大頁面Nand Flash存儲(chǔ)系統(tǒng)的方法,其特征在于 采用2048字節(jié)及其以上大頁面的NAND Flash器件,以及其與內(nèi)部自帶NAND Flash控制器 的嵌入式處理器之間的硬件接口方式;將Windows CE系統(tǒng)啟動(dòng)裝載程序EBoot代碼中設(shè)備塊尺寸定義等于NAND Flash 器件的塊尺寸,設(shè)備頁面的尺寸定義等于NAND Flash器件的頁面尺寸,頁地址和塊地址之 間互相轉(zhuǎn)換的宏定義符合實(shí)際器件結(jié)構(gòu)的定義;設(shè)定Windows CE設(shè)備驅(qū)動(dòng)程序代碼中FMD xxx系列函數(shù)的實(shí)現(xiàn)中的存取緩沖區(qū) 大小與大頁面NAND Flash存儲(chǔ)器件的頁尺寸相同,以及向FAL閃存抽象層返回的信息符合 器件內(nèi)部結(jié)構(gòu)信息;根據(jù)大頁面NAND Flash器件的實(shí)際頁面大小改造FAT文件系統(tǒng)扇區(qū)大小,包括對 核心文件fatfsd. dll和fatutil. dll的修改和重編譯方法使文件系統(tǒng)扇區(qū)大小與實(shí)際器 件頁面大小相一致。本發(fā)明通過修改FAT文件系統(tǒng)的扇區(qū)大小來匹配新型大頁面NAND Flash的頁面 大小的方法,有效的解決了 Windows CE操作系統(tǒng)環(huán)境下FAT文件系統(tǒng)扇區(qū)與實(shí)際大頁面 NAND Flash器件頁面大小不一致而無法建立存儲(chǔ)系統(tǒng)的問題,且最大程度地利用了器件本 身的結(jié)構(gòu)特點(diǎn),使存儲(chǔ)系統(tǒng)的存取效率達(dá)到了極大的優(yōu)化。適用于任意頁面尺寸和塊尺寸 的 NAND Flash。
圖1為大頁面NAND Flash與嵌入式處理器的連接關(guān)系圖;圖 2 為 S3C2440 與 K9F1G08U0A 接口 電路圖;圖3為S3C2440處理器NAND Flash操作信號(hào)時(shí)序圖;圖4為Windows CE環(huán)境下NAND Flash存儲(chǔ)系統(tǒng)軟件結(jié)構(gòu)。
具體實(shí)施例方式下面結(jié)合附圖對本發(fā)明作進(jìn)一步的說明。1、硬件接口電路設(shè)計(jì)圖1所示為三星公司S3C2440A嵌入式處理器。S3C2440A采用ARM920T內(nèi)核,主頻 為400MHz,并自帶NAND Flash控制器,能方便地與各種NAND Flash器件進(jìn)行接口,通過對 內(nèi)部寄存器的讀寫實(shí)現(xiàn)對NAND Flash器件的操作。Nand Flash器件采用三星的2048字節(jié) 大頁面K9F1G08芯片。其管腳作用見表1。表 1
Im-^__n#S3C2440AK9F1G08U0AFlash片選nFCEnCE寫使能nFWEnew
S3C2440通過內(nèi)部寄存器進(jìn)行對外部NAND Flash器件的控制,并通過管腳NC0N、 GPG13、GPG14、GPG15來設(shè)置外部NAND Flash的類型;根據(jù)K9F1G08U0A的特征,NCON設(shè)置 為高電平表示大頁面器件,GPG13設(shè)置為高電平表示頁面大小為2048字節(jié),GPG14設(shè)置為低 電平表示NAND Flash需要4次地址周期操作,GPG15設(shè)置為低電平表示器件數(shù)據(jù)總線寬度 為8位。電路設(shè)計(jì)如圖2所示。在操作前,首先需要先對S3C2440的NAND Flash配置寄存器NFCONF進(jìn)行正確的 設(shè)置,以確定外部連接的NAND Flash器件的頁面大小、地址周期以及數(shù)據(jù)總線寬度等信息。當(dāng)需要進(jìn)行一次寫數(shù)據(jù)操作時(shí),首先對寄存器NFCMMD寫入命令碼,處理器就會(huì)自 動(dòng)先將命令控制信號(hào)CLE置高,然后通過8位數(shù)據(jù)總線DATA[7. . 0]發(fā)出寫命令碼,并通過 發(fā)出低電平的寫使能信號(hào)nFWE將命令碼寫入NAND Flash器件,最后通過設(shè)備就緒信號(hào)RnB 確定操作是否成功。在命令發(fā)送成功后,對寄存器NFADDR寫入地址,處理器會(huì)將地址使能 信號(hào)ALE置高,并通過8位數(shù)據(jù)總線DATA[7. . 0]送出地址,待RnB信號(hào)反饋操作成功后,對 寄存器NFDATA寫入數(shù)據(jù)即可實(shí)現(xiàn)NAND Flash的數(shù)據(jù)寫入。讀數(shù)據(jù)以及擦除等其他操作也 與此過程類似。信號(hào)時(shí)序關(guān)系如圖3所示(圖中HCLK信號(hào)為處理器內(nèi)部總線時(shí)鐘信號(hào))。如果所用處理器不含NAND Flash控制器,則需要根據(jù)NAND Flash的信號(hào)時(shí)序要 求用通用輸入輸出引腳模擬出所需的命令使能、地址使能、數(shù)據(jù)總線等信號(hào)。2、軟件設(shè)計(jì)實(shí)現(xiàn)步驟Windows CE環(huán)境下與NAND Flash相關(guān)的軟件包括EBoot、塊設(shè)備驅(qū)動(dòng)程序和FAT 文件系統(tǒng)三個(gè)部分;其中,塊設(shè)備驅(qū)動(dòng)程序、文件系統(tǒng)和Windows CE的分區(qū)管理程序構(gòu)成 了操作系統(tǒng)的存儲(chǔ)子系統(tǒng)。各個(gè)功能模塊的結(jié)構(gòu)關(guān)系如圖4所示。步驟I^fSEBootEBoot是Windows CE自帶的一個(gè)Bootloader程序,其中包含了系統(tǒng)啟動(dòng)和初始化 的一系列代碼,完成系統(tǒng)參數(shù)初始化、創(chuàng)建分區(qū)及文件系統(tǒng)、提供USB接口及以太網(wǎng)通信、 燒寫、裝載和運(yùn)行操作系統(tǒng)鏡像等一系列功能,其中對分區(qū)及文件系統(tǒng)的操作就包含了對 NAND Flash進(jìn)行操作的代碼。EBoot的代碼中和NAND Flash有關(guān)的部分主要涉及對分區(qū)及文件系統(tǒng)進(jìn)行操作 的幾個(gè)函數(shù),其對NAND Flash的操作也是通過調(diào)用與塊設(shè)備驅(qū)動(dòng)程序共用的FMD_xxx系列 函數(shù)來完成的。除此之外還需要對EBoot的頭文件Loader, h中的幾個(gè)相關(guān)的宏定義進(jìn)行 修改#define SECT0R_SIZE 204811 //定義頁面大小#define PAGES_PER_BL0CK 64 //定義塊中的頁面數(shù)#define SECT0R_T0_BL0CK (sector)((sector) > > 6)//頁地址到塊地址 的轉(zhuǎn)換,頁地址右移6位即為塊地址#define BL0CK_T0_SECT0R(block) ((block) < < 6)//±夬地址到頁地址的轉(zhuǎn)換,塊地址左移6位即為頁地址步驟2 編寫塊設(shè)備驅(qū)動(dòng)程序Windows CE操作系統(tǒng)為包括NAND和Nor在內(nèi)的Flash器件建立了統(tǒng)一的塊設(shè) 備驅(qū)動(dòng)程序結(jié)構(gòu),由MDD層的FAL(閃存抽象層)和PDD層的FMD_xxx系列函數(shù)組成。FAL 包含存儲(chǔ)組織、損耗平衡、壞塊管理等代碼,通過調(diào)用FMD_XXX系列函數(shù)完成器件的底層操 作,向上層操作系統(tǒng)提供完備的塊設(shè)備驅(qū)動(dòng)程序接口,其成員和功能見表2所示。表2 EBoot和塊設(shè)備驅(qū)動(dòng)程序Flashdrv. dll都通過FMD_xxx系列函數(shù)對NAND Flash 進(jìn)行底層操作,下面是讀扇區(qū)函數(shù)FMD_ReadSect0r的部分代碼BOOL FMD_ReadSector(SECT0R_ADDR startSectorAddr, LPBYTE pSectorBuff,PSectorInfo pSectorlnfoBuff, DWORD dwNumSectors){......NF_CLEAR_RB () ;//釋放 Ready 信號(hào)NF_CMD (OxOO) ;//送第一次讀操作碼NF_ADDR (OxOO) ;//送列地址低位NF_ADDR (OxOO) ;//送列地址高位
NF_ADDR((startSectorAddr)&0xff)
送行地址低位
NF_ADDR((startSectorAddr >> 8)&0xff) ;// 送行地址高位 NF_CMD(0x30) ;//送第二次讀操作碼 NF_DETECT_RB() ;// 等待器件的 Ready 信號(hào) for(i = 0 ;i < 2048 ;i++) {
pSectorBuff[i] = (BYTE) NF_DATA_R () ;//讀取一個(gè)頁面的數(shù)據(jù)
到緩沖區(qū)其他函數(shù)的實(shí)現(xiàn)也與此類似。同時(shí),F(xiàn)MD_GetInfo函數(shù)還需要向FAL返回當(dāng)前器 件的各種信息BOOL FMD_GetInfo(PFlashInfo pFlashlnfo){pFlashlnfo- > f IashType = NAND ;//Flash 器件類型,NAND 或 NORpFlashlnfo- > dwNumBlock = 1024 ;// 塊數(shù)目pFlashlnfo- > dwBytesPerBlock = 64*2048 ;// 每塊包含的字節(jié)數(shù)pFlashlnfo- > wSectorsPerBlock = 64 ;// 每塊內(nèi)的頁面數(shù)目pFlashlnfo- > WDataBytesPerSector = 2048 ;// 頁面大小return TRUE ;}步驟3 改造FAT文件系統(tǒng)文件管理系統(tǒng)處于整個(gè)存儲(chǔ)系統(tǒng)的最上層,包括分區(qū)裝載程序和文件系統(tǒng)。操作 系統(tǒng)啟動(dòng)時(shí),由分區(qū)加載程序mspart. dll檢查塊設(shè)備的分區(qū)表,并根據(jù)每個(gè)分區(qū)的文件系 統(tǒng)標(biāo)識(shí)加載相應(yīng)的文件系統(tǒng)。系統(tǒng)一般設(shè)有二個(gè)分區(qū),第一個(gè)采用BinFS文件系統(tǒng),用于存 儲(chǔ)Windows CE操作系統(tǒng)的鏡像文件NK. bin ;另一個(gè)分區(qū)采用FAT文件系統(tǒng),用于存儲(chǔ)用戶 數(shù)據(jù)。FAT文件系統(tǒng)一般由fatfsd. dll和fatutil. dll兩個(gè)文件組成,前者負(fù)責(zé)文件系統(tǒng) 的掛載、卸載、讀取、寫入、搜索等操作,后者則包含了對FAT分區(qū)的掃描、格式化等功能代 碼;應(yīng)用層軟件通過FAT文件系統(tǒng)對存儲(chǔ)子系統(tǒng)及存儲(chǔ)器件進(jìn)行操作。常規(guī)頁面NAND Flash和Nor Flash的頁面大小與FAT文件系統(tǒng)所定義的扇區(qū)大小 恰好相同,均為512字節(jié),因此微軟公司在設(shè)計(jì)Windows CE操作系統(tǒng)的FAT文件系統(tǒng)時(shí)就 利用了這一特性,使文件系統(tǒng)的虛擬扇區(qū)大小與Flash器件的頁面大小相同。Windows CE 操作系統(tǒng)啟動(dòng)時(shí),會(huì)通過分區(qū)加載程序mspart. dll加載NAND Flash分區(qū);由于其加載時(shí)會(huì) 通過fatutil. dll判斷存儲(chǔ)設(shè)備的頁面大小是否為512字節(jié),如果不是就停止裝載,因此需 要解決NAND Flash器件的頁面大小與FAT文件系統(tǒng)虛擬扇區(qū)大小不一致的問題。假設(shè)Windows CE開發(fā)包安裝在D盤下,首先在目錄D: \WINCE420\PRIVATE\ WINCE0S\C0RE0S\FSD\FATFS\ 下找到文件 fatfmt. h,在目錄 D \WINCE420\PUBLIC\C0MM0N\ OAK\DRIVERS\FSD\FATUTIL\MAIN目錄下找到文件fatutilp. h,將兩個(gè)文件中的參數(shù)宏定 義DEFAULT_SECT0R_SIZE由512改為2048,并根據(jù)該參數(shù)修改FAT文件系統(tǒng)源代碼的相 關(guān)部分;然后在Windows CE 4. 2版本的開發(fā)工具Platform Builder (PB)環(huán)境下,點(diǎn)擊菜
7
打開編譯環(huán)境命令行窗口,在兩個(gè)目錄 下分別執(zhí)行 build 命令重新編譯,在目錄 D: \WINCE420\PUBLIC\C0MM0N\0AK\LIB\ARMV4I\ RETAIL下就會(huì)生成全新的靜態(tài)庫文件fatfsd. lib和fatutil_main. lib。最后在PB工程 中加入對FAT文件系統(tǒng)的支持,重新編譯生成鏡像文件NK. bin ;這樣,新生成的FAT文件系 統(tǒng)使用的虛擬扇區(qū)大小為2048,就能夠完善地支持大頁面NAND Flash器件。3、性能測試結(jié)果將K9F1208 (頁面大小512字節(jié))和K9F1G08 (頁面大小2048字節(jié))二種器件,在 同樣的條件下(Windows CE環(huán)境,采用400MHz S3C2440A處理器)采用不同的讀緩沖區(qū)大 小進(jìn)行了速度測試。從測試結(jié)果來看,利用本方法實(shí)現(xiàn)的大頁面NAND Flash存儲(chǔ)系統(tǒng)與常 規(guī)頁面NAND Flash器件實(shí)現(xiàn)的存儲(chǔ)系統(tǒng)相比有著顯著的性能優(yōu)勢;測試結(jié)果如表3所示表3
件型號(hào) 讀緩沖區(qū)^K9F1208K9F1G08IKByte2.573.86IOKByte4.106.8364KByte4.126.88100Kbyte4.186.94!MByte4.227.04 (單位MByte/s)
權(quán)利要求
一種在Windows CE環(huán)境下建立大頁面Nand Flash存儲(chǔ)系統(tǒng)的方法,其特征在于采用2048字節(jié)及其以上大頁面的NAND Flash器件,以及其與內(nèi)部自帶NAND Flash控制器的嵌入式處理器之間的硬件接口方式;將Windows CE系統(tǒng)啟動(dòng)裝載程序EBoot代碼中設(shè)備塊尺寸定義等于NAND Flash器件的塊尺寸,設(shè)備頁面的尺寸定義等于NAND Flash器件的頁面尺寸,頁地址和塊地址之間互相轉(zhuǎn)換的宏定義符合實(shí)際器件結(jié)構(gòu)的定義;設(shè)定Windows CE設(shè)備驅(qū)動(dòng)程序代碼中FMD_xxx系列函數(shù)的實(shí)現(xiàn)中的存取緩沖區(qū)大小與大頁面NAND Flash存儲(chǔ)器件的頁尺寸相同,以及向FAL閃存抽象層返回的信息符合器件內(nèi)部結(jié)構(gòu)信息;根據(jù)大頁面NAND Flash器件的實(shí)際頁面大小改造FAT文件系統(tǒng)扇區(qū)大小,包括對核心文件fatfsd.dll和fatutil.dll的修改和重編譯方法使文件系統(tǒng)扇區(qū)大小與實(shí)際器件頁面大小相一致。
全文摘要
本發(fā)明公開了一種在Windows CE操作系統(tǒng)環(huán)境下建立大頁面NAND Flash存儲(chǔ)系統(tǒng)的方法,其采用大頁面NAND Flash器件,以及其與內(nèi)部自帶NAND Flash控制器的嵌入式處理器之間的硬件接口方式;將Windows CE系統(tǒng)啟動(dòng)裝載程序EBoot代碼中設(shè)備塊尺寸定義等于NAND Flash器件的塊尺寸,設(shè)備頁面的尺寸定義等于NAND Flash器件的頁面尺寸,頁地址和塊地址之間互相轉(zhuǎn)換的宏定義符合實(shí)際器件定義;設(shè)備驅(qū)動(dòng)程序代碼中FMD xxx系列函數(shù)的實(shí)現(xiàn)中的存取緩沖區(qū)大小與大頁面NAND Flash存儲(chǔ)器件的頁尺寸相同;通過修改FAT文件系統(tǒng)的扇區(qū)大小來匹配大頁面NAND Flash的頁面大小。適用于任意頁面尺寸和塊尺寸的NAND Flash。
文檔編號(hào)G06F17/30GK101923570SQ20101023529
公開日2010年12月22日 申請日期2010年7月21日 優(yōu)先權(quán)日2010年7月21日
發(fā)明者廖穎, 汪瑋, 莫家貴, 陳一新 申請人:中國電子科技集團(tuán)公司第三十八研究所