NANDFlash頁面自適應的方法及裝置製造方法
2023-08-04 17:52:31
NAND Flash頁面自適應的方法及裝置製造方法
【專利摘要】本發明適用於存儲【技術領域】,提供了一種NAND?Flash頁面自適應的方法及裝置,所述方法包括如下步驟:當進行NAND?Flash頁面讀寫操作,且所述NAND?Flash的頁面大小為第一數值和第二數值時,對所述NAND?Flash頁面起始位置的第三數值的空間進行讀寫操作;所述第三數值小於第一數值和第二數值;當進行NAND?Flash頁面讀寫操作,且所述NAND?Flash的頁面大小為第三數值時,對所述NAND?Flash的全部空間進行讀寫操作。本發明提出的方法及裝置可適應不同頁面大小的NAND?Flash的讀寫操作。
【專利說明】NAND Flash頁面自適應的方法及裝置
【技術領域】
[0001]本發明屬於存儲【技術領域】,尤其涉及一種NAND Flash頁面自適應的方法及裝置。【背景技術】
[0002]隨著嵌入式技術的飛速發展,各種應用對存儲設備的要求也隨之提高。嵌入式設備由於受成本、體積等因素的影響通常需要使用較大容量的非易失性的存儲設備。NANDFlash存儲器由於其具有存儲容量大、價格便宜、掉電數據不丟失等優點,目前被廣泛用於行動電話、數位相機、電視機頂盒等電子產品中。
[0003]NAND Flash設備的結構分為多個存儲塊(Block),每個Block由多個頁(Page)組成。Block是NAND Flash的最小可擦除的單位,Block的基本組成單位Page是NANDFlash的最小可編程單位。Page進一步劃分為主數據區(main data)和剩餘數據區(sparedata)ο NAND Flash常見的頁面大小有512B、2KB和4KB這3種類型。512B的頁實際大小是528位元組,它的主數據區大小是512B,其他數據區佔16B (其中Spare User Data_5bytes,ECC-lObytes, Reserved-1byte)0而2KB和4KB頁分別由4個和8個528位元組的數據區組成,每個528位元組的數據區的主數據區大小都是512位元組。512B與2KB頁面結構的對比如圖1、圖2所示。
[0004]EFS是高通設計的基於NAND Flash的文件系統,文件系統與Flash頁的結構密切相關,EFS文件系統分為5層,最底層是硬體層,NAND Flash硬體處於硬體層;第二層是NAND Controller層,該層的作用的提供訪問NAND Flash設備的接口給上層;第三層是NAND Flash驅動層,該層的功能是提供基本的Flash讀寫擦出等操作接口給上層;第四層是文件系統層,提供文件操作API給應用層;最上層是應用層。
[0005]由於不同大小頁面的結構不同,因此NAND Flash的讀寫訪問時需要針對不同的頁面做不同的處理。傳統的做法是對於不同的頁面編寫不同的驅動代碼,然後生成各自的bin文件燒寫到對應的NAND Flash中,這種做法的缺點是會帶來軟體維護方面的麻煩。另一種常見的做法是編寫2套不同的文件系統代碼來適應小頁面(512B)和大頁面(2KB和4KB),例如Linux系統下流行的yaffs文件系統用於小頁面,而yaffs2文件系統用於大頁面。這種做法的好處是能夠自適應不同的頁面,缺點是需要使用2套不同的文件系統代碼接口,在軟體的設計上比較麻煩。
【發明內容】
[0006]本發明實施例的目的在於提供一種NAND Flash頁面自適應的方法及裝置,旨在解決現有的NAND Flash在訪問時因不同頁面大小需要不同的代碼造成維護困難的問題。
[0007]本發明實施例是這樣實現的,一種NAND Flash頁面自適應的方法,所述方法包括如下步驟:
[0008]當進行NAND Flash頁面讀寫操作,且所述NAND Flash的頁面大小為第一數值和第二數值時,對所述NAND Flash頁面起始位置的第三數值的空間進行讀寫操作;所述第三數值小於第一數值和第二數值;
[0009]當進行NAND Flash頁面讀寫操作,且所述NAND Flash的頁面大小為第三數值時,對所述NAND Flash的全部空間進行讀寫操作。
[0010]進一步地,所述對NAND Flash頁面起始位置的第三數值的空間進行讀寫操作進一步為:
[0011]通過寫頁面函數寫入所述NAND Flash頁面起始位置的第三數值的空間;
[0012]通過讀頁面函數讀取所述NAND Flash頁面起始位置的第三數值的空間。
[0013]進一步地,所述通過寫頁面函數寫入NAND Flash頁面起始位置的第三數值的空間包括:
[0014]申請一個大小為第三數值的第一 Buffer ;
[0015]將待寫入的數據拷貝至所述申請的第一 Buffer ;
[0016]調用write_page函數將所述第一 Buffer中的數據寫入所述NAND Flash的某一頁面起始位置的第三數值的空間。
[0017]進一步地,在執行所述調用write_page函數將第一 Buffer中的數據寫入NANDFlash的某一頁面起始位置的第三數值的空間之後,還包括:
[0018]調用read_page函數讀取所述NAND Flash頁面起始位置的第三數值的數據至Verify_buffer ;
[0019]比較所述Verify_buffer前第三數值的數據與第一 Buffer的數據,相同則寫成功,否則失敗。
[0020]進一步地,所述通過讀頁面函數讀取NAND Flash頁面起始位置的第三數值的空間包括:
[0021]申請一個大小為第三數值的第二 Buffer ;
[0022]通過read_page函數讀取所述NAND Flash頁面起始位置的第三數值的數據至所述第二 Buffer ;
[0023]將所述第二 Buffer的數據拷貝至指定的存儲空間。
[0024]本發明還提出一種NAND Flash頁面自適應的裝置,所述裝置包括:
[0025]大頁面讀寫模塊,用於當進行NAND Flash頁面讀寫操作,且所述NAND Flash的頁面大小為第一數值和第二數值時,對所述NAND Flash頁面起始位置的第三數值的空間進行讀寫操作;所述第三數值小於第一數值和第二數值;
[0026]小頁面讀寫模塊,用於當進行NAND Flash頁面讀寫操作,且所述NAND Flash的頁面大小為第三數值時,對所述NAND Flash的全部空間進行讀寫操作。
[0027]進一步地,所述大頁面讀寫模塊包括:
[0028]寫單元,用於通過寫頁面函數寫入所述NAND Flash頁面起始位置的第三數值的空間;
[0029]讀單元,用於通過讀頁面函數讀取所述NAND Flash頁面起始位置的第三數值的空間。
[0030]進一步地,所述寫單元包括:
[0031]申請第一子單元,用於申請一個大小為第三數值的第一 Buffer ;
[0032]緩衝子單元,用於將待寫入的數據拷貝至所述申請的第一 Buffer ;[0033]調用子單元,用於調用Write_page函數將所述第一 Buffer中的數據寫入所述NAND Flash的某一頁面起始位置的第三數值的空間。
[0034]進一步地,所述寫單元還包括:
[0035]檢驗子單元,用於調用通過read_page函數讀取所述NAND Flash頁面起始位置的第三數值的數據至Verify_buffer ;以及比較所述Verify_buffer前第三數值的數據與第-Buffer的數據,相同則寫成功,否則失敗。
[0036]進一步地,所述讀單元包括:
[0037]申請第二子單元,用於申請一個大小為第三數值的第二 Buffer ;
[0038]讀取子單元,用於通過read_page函數讀取所述NAND Flash頁面的起始位置的第三數值的數據至所述第二 Buffer ;
[0039]拷貝子單元,用於將所述第二 Buffer的數據拷貝至指定的存儲空間。
[0040]本發明實施例考慮到NAND Flash中,2KB頁面、4KB頁面與512B頁面的相似性,通過僅使用2KB和4KB頁面起始位置的512B區域進行NAND Flash頁的讀寫擦除等操作,從而達到只用一份代碼便可以兼容上述幾種大小頁面的NAND Flash,使系統能正常啟動。無需針對不同的NAND Flash頁面編寫不同的文件系統接口,簡化了軟體代碼設計。
【專利附圖】
【附圖說明】
[0041]圖1是NAND Flash頁面大小為512B時的頁面結構圖;
[0042]圖2是NAND Flash頁面大小為2K時的頁面結構圖;
[0043]圖3是本發明實施例一提供的NAND Flash頁面自適應的方法的流程圖;
[0044]圖4是本發明實施例一提供的NAND Flash頁面自適應的方法中寫操作的流程圖;
[0045]圖5是本發明實施例二提供的NAND Flash頁面自適應的裝置的結構圖;
[0046]圖6是本發明實施例二提供的NAND Flash頁面自適應的裝置中大頁面讀寫模塊的結構圖;
[0047]圖7是本發明實施例二提供的NAND Flash頁面自適應的裝置中寫單元的結構圖;
[0048]圖8是本發明實施例二提供的NAND Flash頁面自適應的裝置中讀單元的結構圖。
【具體實施方式】
[0049]為了使本發明的目的、技術方案及優點更加清楚明白,以下結合附圖及實施例,對本發明進行進一步詳細說明。應當理解,此處所描述的具體實施例僅僅用以解釋本發明,並不用於限定本發明。
[0050]實施例一
[0051]本發明實施例一提出一種NAND Flash頁面自適應的方法。如圖3所示,本發明實施例一的方法包括如下步驟:
[0052]S1、當進行NAND Flash頁面讀寫操作,且所述NAND Flash的頁面大小為第一數值和第二數值時,對所述NAND Flash頁面起始位置的第三數值的空間進行讀寫操作;所述第
三數值小於第一數值和第二數值;
[0053]S2、當進行NAND Flash頁面讀寫操作,且所述NAND Flash的頁面大小為第三數值時,對所述NAND Flash的全部空間進行讀寫操作。[0054]本發明實施例一以EFS文件系統、第一數值為2KB,第二數值為4KB,第三數值為512KB為例進行說明,實際應用當中,不僅限於EFS文件系統和上述數值限定。對NANDFlash進行讀寫操作前,通常需要先進行NAND Flash復位。在EFS文件系統這一層,需要對NAND Flash進行讀寫操作。如果NAND Flash的頁面大小是512B,則使用NAND Flash的全部存儲空間,如果NAND Flash的頁面大小是2KB或者4KB,那麼僅僅使用某一頁面起始位置的528位元組(包括512位元組的主數據區加上16位元組的剩餘數據區)。這樣,以犧牲2KB或者4KB大頁面的部分存儲空間為代價,換來不同頁面的NAND Flash自適應。
[0055]具體地,在EFS2文件系統層,通過調用寫函數fs_device_write_page O完成寫NAND Flash頁面的功能,對於NAND Flash頁面大小為2KB或4KB時,寫入頁面的數據的實際長度為512B,從2KB或4KB頁面的某一頁面的起始位置起算。如圖4所示,步驟SI包括:
[0056]步驟S11、首先需要申請一個512B大小的第一 Buffer ;
[0057]步驟S12、將待寫入數據拷貝到第一 Buffer中;
[0058]步驟S13、通過write_page O回調函數將第一 Buffer中的數據寫入NAND Flash的某一個頁面。write_page回調函數實際是NAND Controller層的函數flash_nand_ctrl_c_write_page;
[0059]步驟S14、調用底層的read_page函數讀取該頁面中的數據到verify_buffer ;
[0060]步驟S15、比較第一 Buffer與verify_buffer的前512B內的數據,如果相同表示寫操作0K,否者寫操作錯誤,返回失敗。
[0061]類似地,fs_device_read_page用於完成讀某個NAND Flash頁面的功能。先申請一個521B的第二 Buffer,然後通過read_page函數讀取NAND Flash頁面起始位置的512B至第二 Buffer,通過data指針將第二 Buffer的數據拷貝至data指針指定的存儲空間。
[0062]本發明實施例一考慮到NAND Flash中,2KB頁面、4KB頁面與512B頁面的相似性,通過僅使用2KB和4KB頁面起始位置的512B區域進行NAND Flash頁的讀寫擦除等操作,從而達到只用一份代碼便可以兼容上述幾種大小頁面的NAND Flash,無需針對不同的NANDFlash頁面編寫不同的文件系統接口,簡化了軟體代碼設計。
[0063]實施例二
[0064]本發明實施例二提供了一種NAND Flash頁面自適應的裝置。如圖5所示,本發明實施例二的裝置包括大頁面讀寫模塊10和小頁面讀寫模塊20,其中,大頁面讀寫模塊10當進行NAND Flash頁面讀寫操作,且NAND Flash的頁面大小為第一數值和第二數值時,對NAND Flash頁面起始位置的第三數值的空間進行讀寫操作,第三數值小於第一數值和第二數值;小頁面讀寫模塊20當進行NAND Flash頁面讀寫操作,且NAND Flash的頁面大小為第三數值時,對NAND Flash的全部空間進行讀寫操作。
[0065]本發明實施例二的裝置以應用於EFS文件系統、第一數值為2KB,第二數值為4KB,第三數值為512KB為例進行說明,實際應用當中,不僅限於EFS文件系統。對NAND Flash進行讀寫操作前,通常需要先進行NAND Flash復位。在EFS文件系統這一層,需要對NANDFlash進行讀寫操作。如果NAND Flash的頁面大小是512B,則小頁面讀寫模塊20使用NANDFlash的全部存儲空間,如果NAND Flash的頁面大小是2KB或者4KB,那麼大頁面讀寫模塊10僅僅使用某一頁面起始位置的528位元組(包括512位元組的主數據區加上16位元組的剩餘數據區)。這樣,以犧牲2KB或者4KB大頁面的部分存儲空間為代價,換來不同頁面的NANDFlash自適應。
[0066]參照圖6,大頁面讀寫模塊10包括寫單元11和讀單元12。其中,寫單元11用於通過寫頁面函數寫入NAND Flash頁面起始位置的第三數值的空間;讀單元12用於通過讀頁面函數讀取NAND Flash頁面起始位置的第三數值的空間。
[0067]參照圖7,寫單元11包括申請第一子單元111、緩衝子單元112、調用子單元113和檢驗子單元114。其中,申請第一子單元111用於申請一個大小為第三數值的第一 Buffer ;緩衝子單元112用於將待寫入的數據拷貝至申請的第一 Buffer ;調用子單元113用於調用write_page函數將第一 Buffer中的數據寫入NAND Flash的某一頁面起始位置的第三數值的空間;檢驗子單元114用於調用通過read_page函數讀取NAND Flash頁面起始位置的第三數值的數據至Verify_buffer ;以及比較Verify_buffer前512B的數據與第一 Buffer的數據,相同則寫成功,否則失敗。
[0068]參照圖8,讀單元12包括申請第二子單元121、讀取子單元122和拷貝子單元123。其中,申請第二子單元121用於申請一個大小為第三數值的第二 Buffer ;讀取子單元122用於通過read_page函數讀取NAND Flash頁面的起始位置的第三數值的數據至第二Buffer ;拷貝子單元123用於將第二 Buffer的數據拷貝至指定的存儲空間。
[0069]本發明實施例二考慮到NAND Flash中,2KB頁面、4KB頁面與512B頁面的相似性,通過僅使用2KB和4KB頁面起始位置的512B區域進行NAND Flash頁的讀寫擦除等操作,從而達到只用一份代碼便可以兼容上述幾種大小頁面的NAND Flash,無需針對不同的NANDFlash頁面編寫不同的文件系統接口,簡化了軟體代碼設計。
[0070]以上所述僅為本發明的較佳實施例而已,並不用以限制本發明,凡在本發明的精神和原則之內所作的任何修改、等同替換和改進等,均應包含在本發明的保護範圍之內。
【權利要求】
1.一種NAND Flash頁面自適應的方法,其特徵在於,所述方法包括如下步驟: 當進行NAND Flash頁面讀寫操作,且所述NAND Flash的頁面大小為第一數值和第二數值時,對所述NAND Flash頁面起始位置的第三數值的空間進行讀寫操作;所述第三數值小於第一數值和第二數值; 當進行NAND Flash頁面讀寫操作,且所述NAND Flash的頁面大小為第三數值時,對所述NAND Flash的全部空間進行讀寫操作。
2.如權利要求1所述的方法,其特徵在於,所述對NANDFlash頁面起始位置的第三數值的空間進行讀寫操作進一步為: 通過寫頁面函數寫入所述NAND Flash頁面起始位置的第三數值的空間; 通過讀頁面函數讀取所述NAND Flash頁面起始位置的第三數值的空間。
3.如權利要求2所述的方法,其特徵在於,所述通過寫頁面函數寫入NANDFlash頁面起始位置的第三數值的空間包括: 申請一個大小為第三數值的第一 Buffer ; 將待寫入的數據拷貝至所述申請的第一 Buffer ; 調用write_page函數將所述第一 Buffer中的數據寫入所述NAND Flash的某一頁面起始位置的第三數值的空間。
4.如權利要求3所述的方法,其特徵在於,在執行所述調用Write_page函數將第一Buffer中的數據寫入NAND Flash的某一頁面起始位置的第三數值的空間之後,還包括: 調用read_page函數讀取所述NAND Flash頁面起始位置的第三數值的數據至Verify_buffer ; 比較所述Verify_buffer前第三數值的數據與第一 Buffer的數據,相同則寫成功,否則失敗。
5.如權利要求2所述的方法,其特徵在於,所述通過讀頁面函數讀取NANDFlash頁面起始位置的第三數值的空間包括: 申請一個大小為第三數值的第二 Buffer ; 通過read_page函數讀取所述NAND Flash頁面起始位置的第三數值的數據至所述第二 Buffer ; 將所述第二 Buffer的數據拷貝至指定的存儲空間。
6.一種NAND Flash頁面自適應的裝置,其特徵在於,所述裝置包括: 大頁面讀寫模塊,用於當進行NAND Flash頁面讀寫操作,且所述NAND Flash的頁面大小為第一數值和第二數值時,對所述NAND Flash頁面起始位置的第三數值的空間進行讀寫操作;所述第三數值小於第一數值和第二數值; 小頁面讀寫模塊,用於當進行NAND Flash頁面讀寫操作,且所述NAND Flash的頁面大小為第三數值時,對所述NAND Flash的全部空間進行讀寫操作。
7.如權利要求6所述的裝置,其特徵在於,所述大頁面讀寫模塊包括: 寫單元,用於通過寫頁面函數寫入所述NAND Flash頁面起始位置的第三數值的空間; 讀單元,用於通過讀頁面函數讀取所述NAND Flash頁面起始位置的第三數值的空間。
8.如權利要求7所述的裝置,其特徵在於,所述寫單元包括: 申請第一子單元,用於申請一個大小為第三數值的第一 Buffer ;緩衝子單元,用於將待寫入的數據拷貝至所述申請的第一 Buffer ; 調用子單元,用於調用write_page函數將所述第一 Buffer中的數據寫入所述NANDFlash的某一頁面起始位置的第三數值的空間。
9.如權利要求8所述的裝置,其特徵在於,所述寫單元還包括: 檢驗子單元,用於調用通過read_page函數讀取所述NAND Flash頁面起始位置的第三數值的數據至Verify_buffer ;以及比較所述Verify_buffer前第三數值的數據與第一Buffer的數據,相同則寫成功,否則失敗。
10.如權利要求7所述的裝置,其特徵在於,所述讀單元包括: 申請第二子單元,用於申請一個大小為第三數值的第二 Buffer ; 讀取子單元,用於通過read_page函數讀取所述NAND Flash頁面的起始位置的第三數值的數據至所述第二 Buffer ; 拷貝子單元,用於將所述第二 Buffer的數據拷貝至指定的存儲空間。
【文檔編號】G06F9/445GK103838608SQ201410078999
【公開日】2014年6月4日 申請日期:2014年3月5日 優先權日:2014年3月5日
【發明者】徐凱 申請人:深圳市中興物聯科技有限公司