本發(fā)明涉及的是一種用于多層單元閃存的nandflash的嵌入式系統(tǒng)代碼存儲及啟動方法。
背景技術(shù):
在現(xiàn)有技術(shù)中,公知的技術(shù)是ecc是“errorcorrectingcode”的簡寫,中文名稱是“錯誤檢查和糾正”。ecc是一種能夠?qū)崿F(xiàn)“錯誤檢查和糾正”的技術(shù),ecc內(nèi)存就是應(yīng)用了這種技術(shù)的內(nèi)存,一般多應(yīng)用在服務(wù)器及圖形工作站上,這將使整個電腦系統(tǒng)在工作時更趨于安全穩(wěn)定。
嵌入式系統(tǒng)是指面向特定應(yīng)用設(shè)計、執(zhí)行專用功能并被內(nèi)部計算機控制的設(shè)備或者系統(tǒng)。一般而言,嵌入式系統(tǒng)的構(gòu)架可以分成四個部分:處理器、存儲器、輸入輸出(i/o)和軟件。隨著芯片技術(shù)的發(fā)展和應(yīng)用范圍更加廣泛,目前嵌入式系統(tǒng)中的系統(tǒng)文件和應(yīng)用數(shù)據(jù)存儲,普遍使用單一的存儲介質(zhì),以往單獨用于存儲系統(tǒng)啟動代碼的norflash存儲器已被價格更加低廉,容量更大的nandflash存儲器所取代。系統(tǒng)的啟動代碼與操作系統(tǒng)文件,應(yīng)用文件都使用統(tǒng)一的nandflash存儲芯片。
目前在嵌入式系統(tǒng)中廣泛使用的是mlcnandflash存儲介質(zhì)。mlc全稱為multi-levelcell,多層單元閃存,mlc通過使用大量的電壓等級,數(shù)據(jù)密度比較高。但同是也帶來了擦除次數(shù)更少,以及更高的數(shù)據(jù)出錯率等問題。隨著mlcnandflash存儲器在嵌入式系統(tǒng)中的廣泛使用,迫切需要一種基于mlcnandflash存儲器的嵌入式系統(tǒng)代碼存儲和啟動的設(shè)計方案。
技術(shù)實現(xiàn)要素:
本發(fā)明的目的就是針對現(xiàn)有技術(shù)所存在的不足,而提供一種基于nandflash的嵌入式系統(tǒng)代碼存儲及啟動方法,該方案使得在平均頁編程次數(shù)和數(shù)據(jù)穩(wěn)定性均比較差的mlcnandflash可以適應(yīng)啟動代碼存儲和引導的應(yīng)用性。該方法通過使用在特定的默認位置存儲啟動代碼,在代碼附加的文件頭中存儲額外的代碼存儲位置信息以加速啟動過程中的代碼搜索和查詢,使用最小固定頁長來存儲啟動代碼,使用增強的ecc糾錯能力來保護存儲代碼,啟動時掃描默認序列位置讀取存儲器中的數(shù)據(jù),一旦讀取到一個完整和正確的頭文件即可使用頭文件中存儲的位置信息來確定啟動代碼的存儲位置,使用基于eccframe的拼湊機制來保證系統(tǒng)啟動的可靠性和完整性。
本方案是通過如下技術(shù)措施來實現(xiàn)的:一種基于nandflash的嵌入式系統(tǒng)代碼存儲方法,包括如下步驟:
1)在默認的代碼存儲位置存儲啟動代碼;
2)在啟動代碼附加的文件頭中存儲額外的代碼存儲位置信息,以加速啟動過程中的代碼搜索和查詢;
3)使用小于nandflash物理頁大小的存儲空間來存儲的代碼;
4)使用ecc檢查和糾正存儲代碼,增強代碼存儲的可靠性;
所述的步驟1)中默認的代碼存儲位置包括4個ce#,每個ce#上面8個特定位置;每一份拷貝應(yīng)保存在這32個默認起始位置中的一個,使引導代碼可以在這些位置找到系統(tǒng)的啟動代碼。
每一份拷貝都帶有相同的文件頭,文件頭存儲了拷貝的數(shù)量,及每一份拷貝的存儲位置。
一種基于nandflash的嵌入式系統(tǒng)代碼啟動方法,包括如下步驟:
1)系統(tǒng)啟動后,首先初始化cpu工作狀態(tài),然后進行內(nèi)存初始化,并完成nandflash初始化;
2)按照默認的位置,逐個掃描是否有有效的文件頭存在,如果有有效的文件頭,則進入步驟3),否則結(jié)束掃掃描并退出;
3)根據(jù)文件頭中記錄的信息,開始加載固件;
4)先從當前拷貝開始,如果在加載某頁代碼的過程中,出現(xiàn)不可糾正的eccframe錯誤,則從鄰近的拷貝的對應(yīng)位置,讀取相應(yīng)的frame來嘗試進行拼湊,如果繼續(xù)錯誤則遍歷其他拷貝,直到讀取正確,轉(zhuǎn)入下一頁,如果全部錯誤則退出,并標記出錯的eccframe,并將標記表傳遞給系統(tǒng)。
本方案的有益效果可根據(jù)對上述方案的敘述得知,由于在該方案中。
由此可見,本發(fā)明與現(xiàn)有技術(shù)相比,具有突出的實質(zhì)性特點和顯著的進步,其實施的有益效果也是顯而易見的。
附圖說明
圖1為本發(fā)明具體實施方式的啟動流程圖。
圖2為默認的位置圖。
具體實施方式
為能清楚說明本方案的技術(shù)特點,下面通過一個具體實施方式,并結(jié)合其附圖,對本方案進行闡述。
通過附圖可以看出,本方案的一種基于nandflash的嵌入式系統(tǒng)代碼存儲方法,包括如下步驟:
1)在默認的代碼存儲位置存儲啟動代碼;默認的代碼存儲位置包括4個ce#,每個ce#上面8個特定位置;每一份拷貝應(yīng)保存在這32個默認起始位置中的一個,使以保證bootrom或其他的引導代碼可以幫助在這些位置找到系統(tǒng)的啟動代碼。
2)在啟動代碼附加的文件頭中存儲額外的代碼存儲位置信息,以加速啟動過程中的代碼搜索和查詢;文件頭具有如下特性:使用第一個page來保存,固定長度512bytes,使用80bitsecc糾錯,每一份拷貝(copy)都帶有相同的文件頭(header)。header存儲了copy的數(shù)量,及每一份拷貝的存儲位置。當某一份拷貝讀取過程中,某一個eccframe出現(xiàn)不可糾正的錯誤時,無需再掃描其他copy的位置,可以直接使用header中的copy位置信息,去指定的位置上嘗試讀取其他copy。
3)使用小于nandflash物理頁大小的存儲空間來存儲的代碼;保證可以適應(yīng)大多數(shù)的nandflash,使用遠小于物理頁size的存儲空間來存儲的代碼,從而可以使用更多的ecc糾錯碼。
4)使用ecc檢查和糾正存儲代碼,增強代碼存儲的可靠性;文件頭使用512bytes+80bitsecc糾錯能力進行保護;codepage在空間允許的情況下,使用盡可能多的ecc糾錯能力,比如可以利用減少每頁存儲的eccframecount,增加存儲頁數(shù)量的方法來保證每個eccframe可以使用更多的糾錯位,頁內(nèi)有更多的空間可以用來存儲循環(huán)冗余校驗位,增強代碼存儲的可靠性。以此來消除由于使用mlcnandflash所帶來的數(shù)據(jù)保持能力降低和位比特出錯幾率增加的消極影響。
一種對于上述存儲方法嵌入式系統(tǒng)代碼啟動方法,包括如下步驟:
1)系統(tǒng)啟動后,首先初始化cpu工作狀態(tài),然后進行內(nèi)存初始化,并完成nandflash初始化;
2)按照默認的位置,逐個掃描是否有有效的文件頭存在,如果有有效的文件頭,則進入步驟3),否則結(jié)束掃掃描并退出;
3)根據(jù)文件頭中記錄的信息,開始加載固件;
4)先從當前拷貝開始,如果在加載某頁代碼的過程中,出現(xiàn)不可糾正的eccframe錯誤,則從鄰近的拷貝的對應(yīng)位置,讀取相應(yīng)的frame來嘗試進行拼湊,如果繼續(xù)錯誤則遍歷其他拷貝,直到讀取正確,轉(zhuǎn)入下一頁,如果全部錯誤則退出,并標記出錯的eccframe,并將標記表傳遞給系統(tǒng)。降低啟動代碼的完整性粒度,由通常的copy級,page級調(diào)低到eccframe級。這樣的設(shè)計保證只要所有copy中的相同page的相同frame沒有同時損壞,就可以在frame級拼湊出一份完整的
本發(fā)明并不僅限于上述具體實施方式,本領(lǐng)域普通技術(shù)人員在本發(fā)明的實質(zhì)范圍內(nèi)做出的變化、改型、添加或替換,也應(yīng)屬于本發(fā)明的保護范圍。