两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

一種壽命均衡的NandFlash存儲(chǔ)器讀寫方法與流程

文檔序號(hào):11294939閱讀:2617來源:國(guó)知局
一種壽命均衡的NandFlash存儲(chǔ)器讀寫方法與流程

本發(fā)明涉及一種大容量存儲(chǔ)控制技術(shù),具體地說是涉及一種壽命均衡的NandFlash存儲(chǔ)器讀寫方法。



背景技術(shù):

現(xiàn)有絕大部分的Nandflash讀寫驅(qū)動(dòng),是為了適應(yīng)通用的文件系統(tǒng)而設(shè)立的,如支持幾乎無限制數(shù)量的文件寫入到存儲(chǔ)器中,文件讀寫格式也是準(zhǔn)備格式,因此這類文件系統(tǒng)驅(qū)動(dòng)通常要求軟硬件資源較多,比如linux操作系統(tǒng)中的YAFFS文件系統(tǒng),是一種公認(rèn)優(yōu)秀的能完善支持Nandflash存儲(chǔ)器的文件系統(tǒng),移植該系統(tǒng)需要RAM通常為存儲(chǔ)器容量的百分之一,如Nandflash存儲(chǔ)器容量為1GB,則RAM容量需要10MB,此外對(duì)CPU運(yùn)算速度也有要求,否則無法適應(yīng)對(duì)文件讀寫的速度要求。

有一類嵌入式系統(tǒng)組成的應(yīng)用系統(tǒng),如長(zhǎng)時(shí)間數(shù)據(jù)數(shù)據(jù)采集記錄儀器,其每次開機(jī)運(yùn)行時(shí)間長(zhǎng),文件數(shù)量少,單個(gè)文件容量大。這類系統(tǒng)資源相對(duì)緊張,比如CPU運(yùn)行速度幾十MHz,RAM容量幾十乃至幾百KB,無法移植YAFFS這類標(biāo)準(zhǔn)文件驅(qū)動(dòng)系統(tǒng)。大容量數(shù)據(jù)記錄系統(tǒng)中通常將NandFlash作為的數(shù)據(jù)存儲(chǔ)器。這種存儲(chǔ)器寫入以塊(block)為基本單元,存在寫入次數(shù)有限的缺點(diǎn),如5000-10000次。在出廠時(shí),就可能存在已經(jīng)已做標(biāo)記的壞塊(有壞塊的存儲(chǔ)器的其他塊仍然可以正常寫入、讀出),在寫入過程中也會(huì)產(chǎn)生新的壞塊。因此,對(duì)這種存儲(chǔ)器進(jìn)行讀寫時(shí),需要識(shí)別壞塊、躲避壞塊、均衡寫入(盡可能保證所有的塊的寫入次數(shù)一致),以保證整個(gè)存儲(chǔ)器的壽命。

人們?cè)O(shè)計(jì)了多種文件系統(tǒng),以支持對(duì)NandFlash的讀寫,其基本思路是建立一張映射表和一個(gè)數(shù)據(jù)緩沖區(qū),定期更新寫入次數(shù)記錄和壞塊記錄,并依此調(diào)整數(shù)據(jù)寫入的塊位置。在數(shù)據(jù)寫入開始時(shí),先將數(shù)據(jù)緩存在緩沖區(qū)中,等前述判斷完成后再寫入NandFlash中。



技術(shù)實(shí)現(xiàn)要素:

為了解決上述技術(shù)問題,本發(fā)明的目的是提供一種對(duì)存儲(chǔ)器進(jìn)行讀寫時(shí),可識(shí)別壞塊、躲避壞塊、均衡寫入,保證所有的塊的寫入次數(shù)一致,以保證整個(gè)存儲(chǔ)器的壽命的壽命均衡的NandFlash存儲(chǔ)器讀寫方法。

本發(fā)明的技術(shù)方案是:一種壽命均衡的NandFlash存儲(chǔ)器讀寫方法,所述方法具體包括以下步驟:

寫入步驟為:

第一步:在NandFlash地址空間內(nèi)建立一張新的文件信息表,讀取其他所有文件信息表,確定新的文件的寫入起始地址;

第二步:判斷文件寫入起始地址是否正好處于一個(gè)塊的起始地址,如果是則要對(duì)其擦除,判斷擦除操作返回狀態(tài),如果返回錯(cuò)誤,則表明該塊為壞塊,需要在交換區(qū)找出一個(gè)塊來替換,并更新壞塊登記表;

第三步:待寫入的數(shù)據(jù)存入內(nèi)存的數(shù)據(jù)緩沖區(qū),若已存夠一頁內(nèi)容,則寫入存儲(chǔ)器中(一次寫滿一頁),判斷寫操作返回狀態(tài),如果返回錯(cuò)誤,則表明該頁所處的塊為壞塊,需要在交換區(qū)找出一個(gè)塊來替換,更新壞塊登記表,并將壞塊當(dāng)前頁和它之前頁的內(nèi)容復(fù)制到新塊中;

第四步:頁寫入成功后,更新文件信息表,包含文件存儲(chǔ)起始和結(jié)束地址、文件大小、文件更新時(shí)間;

第五步,重復(fù)第三步,直到用戶結(jié)束寫操作,檢查數(shù)據(jù)緩沖區(qū)中是否還有剩余數(shù)據(jù),若有則將緩沖區(qū)中所有數(shù)據(jù)寫入到存儲(chǔ)器(緩沖區(qū)未填滿的內(nèi)容用特定字節(jié)填充);

第六步:更新文件信息表,結(jié)束文件寫入操作;

讀取步驟為:

第一步:讀取文件信息表,已確定文件存儲(chǔ)的起始地址和結(jié)束地址;

第二步:判斷起始地址是否為新的塊地址,若是則執(zhí)行第三步,否則執(zhí)行第四步;

第三步:判斷準(zhǔn)備讀入的塊是否為壞塊,若是,則查找其替換塊的地址;

第四步:以頁為單位讀出,根據(jù)文件信息表判斷文件是否讀入完畢,若完畢則結(jié)束,否則繼續(xù);

第五步:判斷塊內(nèi)容是否全部頁都讀出,若沒有則將頁地址加1,繼續(xù)執(zhí)行第四步,否則執(zhí)行第六步;

第六步:將塊地址加1,繼續(xù)執(zhí)行第三步。

進(jìn)一步,所述方法還包括文件刪除操作:文件刪除操作是刪除信息文件信息表,若被刪除文件在數(shù)據(jù)區(qū)的起始地址之前尚存有文件,則將起始地址之前的文件依次復(fù)制,并存儲(chǔ)到最后1個(gè)文件的末尾起始地址,即保證數(shù)據(jù)區(qū)中保存有文件內(nèi)容的區(qū)域地址連貫。

進(jìn)一步,所述方法還包括文件追加寫入操作,即在文件的尾部繼續(xù)寫入,若被追加寫入的文件后面沒有其他文件,則直接繼續(xù)寫入即可,而如果該文件后面有其他文件,則先執(zhí)行的文件移動(dòng)過程,將被追加寫入的文件移動(dòng)到一用存儲(chǔ)空間的最尾端,然后在文件尾部繼續(xù)寫入。

進(jìn)一步,所述NandFlash地址空間分為存儲(chǔ)信息區(qū)、文件信息區(qū)、數(shù)據(jù)區(qū)和交換區(qū);

存儲(chǔ)信息區(qū),用于存儲(chǔ)壞塊登記交換表,位于文件信息區(qū)之后;所述存儲(chǔ)信息區(qū)分成若干小塊,每塊可以存儲(chǔ)一份完整存儲(chǔ)信息,每個(gè)小塊輪流使用;

文件信息區(qū),用于存儲(chǔ)壞文件信息表,位于存儲(chǔ)器物理地址的前幾個(gè)塊;文件信息區(qū)內(nèi)部分成若干小塊,每塊可以存儲(chǔ)一份完整文件信息,每個(gè)小塊輪流使用;

數(shù)據(jù)區(qū),用于存儲(chǔ)數(shù)據(jù)內(nèi)容本身,位于存儲(chǔ)器物理地址的中間部分;

交換區(qū),用于對(duì)壞塊的交換,位于存儲(chǔ)器物理地址的最后若干個(gè)塊,若數(shù)據(jù)區(qū)中某塊無法寫入,則將其用交換區(qū)中的塊替換。

進(jìn)一步,所述存儲(chǔ)信息區(qū)和文件信息區(qū)均有若干相同大小的小塊存儲(chǔ)單元組成,每小塊存儲(chǔ)單元均存儲(chǔ)一份完整存儲(chǔ)信息,每小塊存儲(chǔ)單元輪流使用。

本發(fā)明的有益效果是:由于采用上述技術(shù)方案,本發(fā)明的方法具有計(jì)算量小、需要內(nèi)存小的特點(diǎn),適合適用于同一時(shí)間單一文件操作的應(yīng)用場(chǎng)合,對(duì)系統(tǒng)硬件、軟件需求低,能為這種低成本、低功耗的嵌入式系統(tǒng)的操作提供完整的文件系統(tǒng)方案。

附圖說明

圖1為本發(fā)明的文件寫入方法流程框圖。

圖2為本發(fā)明的文件讀取方法流程框圖。

圖3為本發(fā)明的存儲(chǔ)區(qū)結(jié)構(gòu)示意圖。

圖4為本發(fā)明的文件移動(dòng)邏輯框圖。

具體實(shí)施方式

下面結(jié)合附圖和具體實(shí)施例對(duì)本發(fā)明的技術(shù)方案做進(jìn)一步說明。

如圖1和圖2所示,本發(fā)明一種壽命均衡的NandFlash存儲(chǔ)器讀寫方法,所述方法具體包括以下步驟:

寫入步驟為:

第一步:在NandFlash地址空間內(nèi)建立一張新的文件信息表,讀取其他所有文件信息表,確定新的文件的寫入起始地址;

第二步:判斷文件寫入起始地址是否正好處于一個(gè)塊的起始地址,如果是則要對(duì)其擦除,判斷擦除操作返回狀態(tài),如果返回錯(cuò)誤,則表明該塊為壞塊,需要在交換區(qū)找出一個(gè)塊來替換,并更新壞塊登記表;

第三步:待寫入的數(shù)據(jù)存入內(nèi)存的數(shù)據(jù)緩沖區(qū),若已存夠一頁內(nèi)容,則寫入存儲(chǔ)器中(一次寫滿一頁),判斷寫操作返回狀態(tài),如果返回錯(cuò)誤,則表明該頁所處的塊為壞塊,需要在交換區(qū)找出一個(gè)塊來替換,更新壞塊登記表,并將壞塊當(dāng)前頁和它之前頁的內(nèi)容復(fù)制到新塊中;

第四步:頁寫入成功后,更新文件信息表,包含文件存儲(chǔ)起始和結(jié)束地址、文件大小、文件更新時(shí)間;

第五步,重復(fù)第三步,直到用戶結(jié)束寫操作,檢查數(shù)據(jù)緩沖區(qū)中是否還有剩余數(shù)據(jù),若有則將緩沖區(qū)中所有數(shù)據(jù)寫入到存儲(chǔ)器(緩沖區(qū)未填滿的內(nèi)容用字節(jié)填充,如十六進(jìn)制字節(jié)AA);

第六步:更新文件信息表,結(jié)束文件寫入操作;

讀取步驟為:

第一步:讀取文件信息表,已確定文件存儲(chǔ)的起始地址和結(jié)束地址;

第二步:判斷起始地址是否為新的塊地址,若是則執(zhí)行第三步,否則執(zhí)行第四步;

第三步:判斷準(zhǔn)備讀入的塊是否為壞塊,若是,則查找其替換塊的地址;

第四步:以頁為單位讀出,根據(jù)文件信息表判斷文件是否讀入完畢,若完畢則結(jié)束,否則繼續(xù);

第五步:判斷塊內(nèi)容是否全部頁都讀出,若沒有則將頁地址加1,繼續(xù)執(zhí)行第四步,否則執(zhí)行第六步;

第六步:將塊地址加1,繼續(xù)執(zhí)行第三步。

如圖3所示,本發(fā)明所述NandFlash地址空間分為存儲(chǔ)信息區(qū)、文件信息區(qū)、數(shù)據(jù)區(qū)和交換區(qū);

存儲(chǔ)信息區(qū),用于存儲(chǔ)壞塊登記交換表,位于文件信息區(qū)之后;所述存儲(chǔ)信息區(qū)分成若干小塊,每塊可以存儲(chǔ)一份完整存儲(chǔ)信息,每個(gè)小塊輪流使用;

文件信息區(qū),用于存儲(chǔ)壞文件信息表,位于存儲(chǔ)器物理地址的前幾個(gè)塊;文件信息區(qū)內(nèi)部分成若干小塊,每塊可以存儲(chǔ)一份完整文件信息,每個(gè)小塊輪流使用;

數(shù)據(jù)區(qū),用于存儲(chǔ)數(shù)據(jù)內(nèi)容本身,位于存儲(chǔ)器物理地址的中間部分;

交換區(qū),用于對(duì)壞塊的交換,位于存儲(chǔ)器物理地址的最后若干個(gè)塊,若數(shù)據(jù)區(qū)中某塊無法寫入,則將其用交換區(qū)中的塊替換。

如圖4(a)所示,所述方法還包括文件刪除操作:文件刪除操作是刪除信息文件信息表,若被刪除文件在數(shù)據(jù)區(qū)的起始地址之前尚存有文件,則將起始地址之前的文件依次復(fù)制,并存儲(chǔ)到最后1個(gè)文件的末尾起始地址,即保證數(shù)據(jù)區(qū)中保存有文件內(nèi)容的區(qū)域地址連貫。

如圖4(b)所示,所述方法還包括文件追加寫入操作,即在文件的尾部繼續(xù)寫入,若被追加寫入的文件后面沒有其他文件,則直接繼續(xù)寫入即可,而如果該文件后面有其他文件,則先執(zhí)行的文件移動(dòng)過程,將被追加寫入的文件移動(dòng)到一用存儲(chǔ)空間的最尾端,然后在文件尾部繼續(xù)寫入。

以上對(duì)本發(fā)明的一個(gè)實(shí)施例進(jìn)行了詳細(xì)說明,但所述內(nèi)容僅為本發(fā)明的較佳實(shí)施例,不能被認(rèn)為用于限定本發(fā)明的實(shí)施范圍。凡依本發(fā)明申請(qǐng)范圍所作的均等變化與改進(jìn)等,均應(yīng)仍歸屬于本發(fā)明的專利涵蓋范圍之內(nèi)。

當(dāng)前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
巴青县| 周口市| 南漳县| 西安市| 凉山| 潞城市| 通道| 门头沟区| 巴楚县| 内丘县| 大兴区| 河津市| 和硕县| 南京市| 宁乡县| 平果县| 来凤县| 肃北| 驻马店市| 米林县| 武隆县| 张家口市| 新平| 青龙| 阿克陶县| 含山县| 湖州市| 赤城县| 邹平县| 安庆市| 胶南市| 横峰县| 盘山县| 湾仔区| 天全县| 吉木乃县| 博罗县| 鹿邑县| 凌云县| 合作市| 婺源县|