基于nand flash的啟動加載方法和裝置制造方法
【專利摘要】本發(fā)明公開了一種基于NAND?FLASH的啟動加載方法和裝置。在本發(fā)明中,引導程序的可執(zhí)行代碼被分段存儲在由Block0之后的多個連續(xù)Block構成的存儲空間中,因而消除了單個Block的物理空間對可執(zhí)行代碼的限制;而且,存儲空間的起始Block及Block數量均以配置信息的形式存放在可靠性最高的Block0中,因而能夠確保分段存儲的可執(zhí)行代碼的高可靠性尋址。而且,存儲空間中的連續(xù)多個Block的物理空間之和可以大于可執(zhí)行代碼首次寫入NAND?FLASH時的代碼數據量大小,因而,存儲空間也能夠滿足可執(zhí)行代碼由于升級更新而增加的代碼數據量,從而不會因為可執(zhí)行代碼的代碼數據量增加而重新進行存儲空間的Block劃分,相應地,也就無需更新Block0中記錄的配置信息,進而實現了Block0在出廠后免更新。
【專利說明】基于NAND FLASH的啟動加載方法和裝置
【技術領域】
[0001]本發(fā)明涉及啟動加載技術,特別涉及一種基于NAND FLASH(與非閃存)的啟動加載方法和裝置。
【背景技術】
[0002]Bootloader (啟動加載)引導程序是CPU復位后首先需要被執(zhí)行的一段代碼,用以初始化CPU和周邊外設,從而正確地啟動操作系統(tǒng)。其中,Bootloader引導程序一般分為Stagel (第一階段)和Stage2 (第二階段)兩部分;Stagel負責小系統(tǒng)初始化,主要包括CPU、Boot啟動介質和內存初始化,以便于為Stage2的執(zhí)行準備正確的環(huán)境;Stage2則負責基礎硬件的初始化、為內核執(zhí)行準備基本的軟硬件壞境、提供符合規(guī)范的擴展菜單、實現增強的用戶交互能力、并從文件系統(tǒng)的存儲介質中加載并啟動操作系統(tǒng)。
[0003]Bootloader引導程序的可執(zhí)行代碼都是保存在非易失存儲介質中,如NORFLASH(或非閃存)、NAND FLASH、SPI (Serial Peripheral Interface,串行外設接口)FLASH等,這些可用于保存Bootloader引導程序的FLASH可稱為Boot FLASH(啟動閃存)。相應地,當CPU啟動后,由集成在CPU內部、或獨立于CPU之外的啟動加載裝置從Boot FLASH中讀取Stage 1、以供CPU執(zhí)行并引導CPU啟動。
[0004]目前,NAND FLASH越來越頻繁地被用為Boot FLASH。其中,NAND FLASH的物理空間是由多個Block(塊)組成,其中的BlockO具有高可靠性、且不會出現壞塊,因而Bootloader引導程序的Stagel可執(zhí)行代碼會保存在BlockO中,而從Blockl開始的至少一個Block中會保存Stagel的可執(zhí)行代碼的備份。
[0005]然而,在上述方案中,Stagel的可執(zhí)行代碼被限制在一個Block的物理空間內、通常為128KB,但隨著硬件系統(tǒng)的不斷升級,初始化的配置過程越來越復雜,Stagel的可執(zhí)行代碼的大小也會隨之增加,這就導致一個Block的物理空間不足以保存Stagel的可執(zhí)行代碼。
【發(fā)明內容】
[0006]有鑒于此,本發(fā)明提供了一種基于NAND FLASH的啟動加載方法和裝置。
[0007]本發(fā)明提供的一種基于NAND FLASH的啟動加載方法,
[0008]NAND FLASH中為引導程序的可執(zhí)行代碼分配有對應的存儲空間,引導程序可執(zhí)行代碼在NAND FLASH中對應的存儲空間的起始Block及包含的Block數量以配置信息的形式存放在NAND FLASH的BlockO中,該存儲空間包括BlockO之后的多個連續(xù)Block ;以及,該啟動加載方法包括:
[0009]在CPU 開始從 NAND FLASH 啟動時,讀取 NAND FLASH 的 BlockO ;
[0010]在從BlockO中讀取到配置信息后,從配置信息中解析得到引導程序可執(zhí)行代碼對應的存儲空間的起始Block及Block數量Z,其中Z大于等于I ;
[0011]在完成對配置信息的解析后,從解析得到的起始Block開始連續(xù)讀取Z個Block、且讀取到的引導程序可執(zhí)行代碼用于引導CPU啟動。
[0012]優(yōu)選地,引導程序可執(zhí)行代碼對應的存儲空間的所有Block的物理空間之和,大于該引導程序可執(zhí)行代碼的數據大小。
[0013]優(yōu)選地,該啟動加載方法進一步包括:對讀取的引導程序可執(zhí)行代碼進行ECC糾錯。
[0014]優(yōu)選地,讀取到的引導程序可執(zhí)行代碼以頁為單位被緩存、然后被匯總至與CPU連接的RAM中,其中,引導程序可執(zhí)行代碼在緩存中以頁為單位被執(zhí)行ECC糾錯。
[0015]優(yōu)選地,引導程序可執(zhí)行代碼被復制為多份存儲在NAND FLASH中,以及,從配置信息中解析得到的存儲空間的起始Block及Block數量Z包括每份引導程序可執(zhí)行代碼對應的存儲空間的起始Block及Block數量Z。
[0016]優(yōu)選地,多份引導程序可執(zhí)行代碼分別對應的存儲空間連續(xù)排列。
[0017]優(yōu)選地,在完成對配置信息的解析后,先從解析得到位置最靠前的起始Block開始連續(xù)讀取Z個Block。
[0018]優(yōu)選地,該啟動加載方法進一步包括:每當從當前的起始Block開始連續(xù)讀取Z個Block后,對引導程序可執(zhí)行代碼進行壞塊檢測和數據校驗;當檢測到壞塊或或數據校驗失敗時,跳轉至解析得到的下一個起始Block開始連續(xù)讀取Z個Block。
[0019]優(yōu)選地,讀取到的引導程序可執(zhí)行代碼以頁為單位被緩存、然后被匯總至與CPU連接的RAM中,其中,引導程序可執(zhí)行代碼在匯總至RAM之后被執(zhí)行壞塊校驗和數據校驗。
[0020]本發(fā)明提供的一種基于NAND FLASH的啟動加載裝置,
[0021]引導程序可執(zhí)行代碼在NAND FLASH中對應的存儲空間的起始Block及包含的Block數量以配置信息的形式存放在NAND FLASH的BlockO中,該存儲空間包括BlockO之后的多個連續(xù)Block ;以及,該啟動加載裝置包括NAND FLASH控制模塊和配置信息解析模塊,其中:
[0022]當CPU開始從NAND FLASH啟動時,NAND FLASH控制模塊讀取NAND FLASH的BlockO ;
[0023]當從BlockO中讀取到配置信息后,NAND FLASH控制模塊通知配置信息解析模塊,使配置信息解析模塊從配置信息中解析得到引導程序可執(zhí)行代碼對應的存儲空間的起始Block及Block數量Z,其中Z大于等于I ;
[0024]在完成對配置信息的解析后,NAND FLASH控制模塊從解析得到的起始Block開始連續(xù)讀取Z個Block、且讀取到的引導程序可執(zhí)行代碼用于引導CPU啟動。
[0025]優(yōu)選地,引導程序可執(zhí)行代碼對應的存儲空間的所有Block的物理空間之和,大于該引導程序可執(zhí)行代碼的數據大小。
[0026]優(yōu)選地,該啟動加載裝置進一步包括:ECC糾錯模塊,對讀取的引導程序可執(zhí)行代碼進行ECC糾錯。
[0027]優(yōu)選地,讀取到的引導程序可執(zhí)行代碼以頁為單位被緩存、然后被匯總至與CPU連接的RAM中,其中,引導程序可執(zhí)行代碼在緩存中以頁為單位被執(zhí)行ECC糾錯。
[0028]優(yōu)選地,引導程序可執(zhí)行代碼被復制為多份存儲在NAND FLASH中,以及,從配置信息中解析得到的存儲空間的起始Block及Block數量Z包括每份引導程序可執(zhí)行代碼對應的存儲空間的起始Block及Block數量Z。
[0029]優(yōu)選地,多份引導程序可執(zhí)行代碼分別對應的存儲空間連續(xù)排列。
[0030]優(yōu)選地,在完成對配置信息的解析后,配置信息解析模塊先從解析得到位置最靠前的起始Block開始連續(xù)讀取Z個Block。
[0031]優(yōu)選地,該啟動加載裝置進一步包括:壞塊檢測模塊和數據校驗模塊;每當從當前的起始Block開始連續(xù)讀取Z個Block后,壞塊檢測模塊和數據校驗模塊分別對引導程序可執(zhí)行代碼進行壞塊檢測和數據校驗;當檢測到壞塊或或數據校驗失敗時,NAND FLASH控制模塊跳轉至解析得到的下一個起始Block開始連續(xù)讀取Z個Block。
[0032]優(yōu)選地,讀取到的引導程序可執(zhí)行代碼以頁為單位被緩存、然后被匯總至與CPU連接的RAM中,其中,引導程序可執(zhí)行代碼在匯總至RAM之后被執(zhí)行壞塊校驗和數據校驗。
[0033]由此可見,在本發(fā)明中,引導程序可執(zhí)行代碼被分段存儲在由BlockO之后的多個連續(xù)Block構成的存儲空間中,因而消除了單個Block的物理空間對可執(zhí)行代碼的限制;而且,存儲空間的起始Block及Block數量均以配置信息的形式存放在可靠性最高的BlockO中,因而能夠確保分段存儲的可執(zhí)行代碼的高可靠性尋址。
[0034]而且,存儲空間中的連續(xù)多個Block的物理空間之和可以大于引導程序可執(zhí)行代碼首次寫入NAND FLASH時的代碼數據量大小,此時,就相當于為引導程序可執(zhí)行代碼的后續(xù)升級更新預留了空閑Block,因而,即便引導程序可執(zhí)行代碼的代碼數據量由于升級更新而增加,預留的空閑Block也能夠滿足可執(zhí)行代碼的代碼數據量增加,從而不會因為引導程序可執(zhí)行代碼的代碼數據量增加而重新進行存儲空間的Block劃分,相應地,也就無需更新BlockO中記錄的配置信息,進而實現了 BlockO在出廠后免更新。
[0035]另外,在本發(fā)明中,還可以對讀取到的引導程序可執(zhí)行代碼進行ECC糾錯,以提高啟動加載的可靠性。
[0036]以及,在本發(fā)明中,NAND FLASH中所存放的引導程序可執(zhí)行代碼可以包括多份、且存儲空間的Block排序最靠前的一份被優(yōu)先讀取,相應地,在讀取Block時,還可以進一步引入壞塊檢測以及數據校驗,當壞塊檢測以及數據校驗中的任一環(huán)節(jié)失敗時,可以直接跳轉至下一個份引導程序可執(zhí)行代碼對應的連續(xù)多個Block,以實現對引導程序可執(zhí)行代碼的加載備份。
【專利附圖】
【附圖說明】
[0037]圖1為本發(fā)明實施例中實現的啟動加載的基本原理的不意圖;
[0038]圖2為本發(fā)明實施例中實現的啟動加載的擴展原理的示意圖;
[0039]圖3為本發(fā)明實施例中基于NAND FLASH的啟動加載方法的示例性流程示意圖;
[0040]圖4為本發(fā)明實施例中基于NAND FLASH的啟動加載方法的擴展流程示意圖;
[0041]圖5為本發(fā)明實施例中基于NAND FLASH的啟動加載裝置的示例性結構示意圖;
[0042]圖6為本發(fā)明實施例中基于NAND FLASH的啟動加載裝置的優(yōu)選結構示意圖。
【具體實施方式】
[0043]為使本發(fā)明的目的、技術方案及優(yōu)點更加清楚明白,以下參照附圖并舉實施例,對本發(fā)明進一步詳細說明。
[0044]在本實施例中,Bootloader引導程序的Stagel可執(zhí)行代碼可以被分段存儲在由BlockO之后的多個連續(xù)Block構成的存儲空間中,即,利用在多個Block中的分段存儲來消除單個Block的物理空間對Stagel可執(zhí)行代碼的限制;而且,存儲空間的起始Block及Block數量均可以以配置信息的形式存放在可靠性最高的BlockO中,以確保對分段存儲的Stagel可執(zhí)行代碼的高可靠性尋址。
[0045]請參見圖1,在NAND FLASH中,Block m至Block η構成Stagel可執(zhí)行代碼對應的存儲空間,m為大于等于I的正整數、η為大于m的正整數,其中:
[0046]對于Block m至Block η構成的存儲空間,其起始的Block m以及Block數量n_m+l均以配置信息的形式存放在BlockO ;
[0047]當CPU啟動時,啟動加載裝置可以從BlockO中讀取到配置信息,并解析得到上述存儲空間的起始Block和Block數量,然后再從Block m開始讀取Block m至Block η,此后,被讀取到的Stagel可執(zhí)行代碼可以供CPU加載運行。
[0048]另外,為了提高CPU啟動加載的可靠性,Stagel可執(zhí)行代碼可以被復制為多份存儲在 NAND FLASH 中。
[0049]請參見圖2,以Stagel可執(zhí)行代碼被復制為兩份保存在NAND FLASH為例,在NANDFLASH中,Block m至Block η構成一份Stage I可執(zhí)行代碼對應的存儲空間,Block p至Blockq構成另一份Stagel可執(zhí)行代碼對應的存儲空間,m為大于等于I的正整數、η為大于m的正整數、P為大于η的正整數、q為大于P的正整數,其中:
[0050]對于Block m至Block η構成的存儲空間,其起始的Block m以及Block數量n_m+l均以配置信息的形式存放在BlockO,同理,對于Block p至Block q構成的存儲空間,其起始的Block p、以及Block數量q-ρ+Ι同樣以配置信息的形式存放在BlockO ;其中,上述的Block數量n-m+1和q-ρ+Ι均可以統(tǒng)一地被表示為大于I的正整數Z。
[0051]當CPU啟動時,啟動加載裝置可以從BlockO中讀取到配置信息,并解析得到上述兩個存儲空間的起始Block和Block數量;
[0052]由于Block m至Block η位于Block p至Block q之前,因而,當CPU啟動時,啟動加載裝置會優(yōu)先讀取Block m至Block η,即,在Block m至Block η構成的存儲空間中保存的該份Stagel可執(zhí)行代碼會被作為主用的可執(zhí)行代碼而被啟動加載裝置優(yōu)先讀取、供CPU加載運行;
[0053]而對于在Block P至Block q構成的存儲空間中保存的另一份Stagel可執(zhí)行代碼則可以作為備用的可執(zhí)行代碼,待讀取主用的可執(zhí)行代碼出錯時,例如壞塊檢測、數據校驗失敗,在Block P至Blockq構成的存儲空間中保存的備用可執(zhí)行代碼再被啟動加載裝置讀取。本實施例中,Block m至Block η構成的存儲空間可以與Block P至Block q構成的存儲空間連續(xù)排列,即,P可以等于n+1 ;并且,Stagel可執(zhí)行代碼可以僅在NAND FLASH中保存一份、或者在NAND FLASH中保存多于兩份,但其實現原理不變。
[0054]并且,為了提高啟動加載的可靠性,本實施例可以對讀取到的代碼數據進行ECC(Error Correcting Code,錯誤檢查糾正)糾錯。
[0055]另外,不論Block m至Block η構成的存儲空間還是Block p至Block q構成的存儲空間,其所有Block的物理空間之和可以大于Stagel可執(zhí)行代碼首次寫入NAND FLASH時的代碼數據量大小,此時,就相當于為Bootloader引導程序的Stagel可執(zhí)行代碼的后續(xù)升級更新預留了空閑Block,因而,即便Bootloader引導程序的Stagel可執(zhí)行代碼的代碼數據量由于后續(xù)的升級更新而增加,存儲空間中預留的空閑Block也能夠滿足Bootloader引導程序的Stagel可執(zhí)行代碼的代碼數據量增加,從而不會因為Stagel可執(zhí)行代碼的代碼數據量增加而重新進行存儲空間的Block劃分,相應地,也就無需更新BlockO中記錄的配置信息,進而實現了 BlockO在出廠后免更新。
[0056]基于上述原理,本實施例提供了一種基于NAND FLASH的啟動加載方法。
[0057]請參見圖3,以Bootloader引導程序的Stagel可執(zhí)行代碼被復制為多份存儲在NAND FLASH中為例,該啟動加載方法包括由啟動加載裝置執(zhí)行的如下步驟:
[0058]步驟301,在 CPU 開始從 NAND FLASH 啟動時,讀取 NAND FLASH 的 BlockO。
[0059]本實施例中,本步驟可以通過向NAND FLASH發(fā)送對應的讀命令來實現。
[0060]步驟302,在從BlockO中讀取到配置信息后,從配置信息中解析得到Stagel可執(zhí)行代碼對應的存儲空間的起始Block及Block數量,即,解析得到每份Stagel可執(zhí)行代碼對應的存儲空間的起始Block及Block數量。
[0061]步驟303,在完成對配置信息的解析后,從解析得到的起始Block開始連續(xù)讀取相應數量的Block。
[0062]本實施例中,本步驟與步驟301的實現方式相同,同樣是可以通過向NAND FLASH發(fā)送對應的讀命令來實現。
[0063]步驟304,當開始連續(xù)讀取相應數量的Block后,對讀取到的Stagel可執(zhí)行代碼的代碼數據進行ECC糾錯。
[0064]本實施例中,從每個Block以頁為單位讀取Stagel可執(zhí)行代碼的代碼數據,讀取到的Stagel可執(zhí)行代碼的代碼數據以頁為單位被緩存匯總至與CPU連接的RAM中。相應地,Stagel可執(zhí)行代碼的代碼數據可以在緩存中以頁為單位執(zhí)行ECC糾錯。
[0065]至此,本流程結束,相應地,利用本流程成功讀取到的Bootloader引導程序的Stagel可執(zhí)行代碼引導CPU啟動。
[0066]如前文所述,為了提高CPU啟動加載的可靠性,Stagel可執(zhí)行代碼可以被復制為多份存儲在NAND FLASH中。針對Stagel可執(zhí)行代碼被復制為多份存儲的情況,本實施例中的啟動加載方法需要進行相應的擴展。
[0067]請參見圖4,以Bootloader引導程序的Stagel可執(zhí)行代碼被復制為多份存儲在NAND FLASH中為例,該啟動加載方法包括由啟動加載裝置執(zhí)行的如下步驟:
[0068]步驟401,在 CPU 開始從 NAND FLASH 啟動時,讀取 NAND FLASH 的 BlockO。
[0069]本實施例中,本步驟可以通過向NAND FLASH發(fā)送對應的讀命令來實現。
[0070]步驟402,在從BlockO中讀取到配置信息后,從配置信息中解析得到Stagel可執(zhí)行代碼對應的存儲空間的起始Block及Block數量,即,解析得到每份Stagel可執(zhí)行代碼對應的存儲空間的起始Block及Block數量。
[0071]步驟403,在完成對配置信息的解析后,從解析得到的起始Block開始連續(xù)讀取相應數量的Block。
[0072]其中,當首次執(zhí)行本步驟時,從解析得到位置最靠前的起始Block開始連續(xù)讀取相應數量的Block,當再次執(zhí)行本步驟時,則跳轉至解析得到的下一個起始Block開始連續(xù)讀取相應數量的Block。
[0073]本實施例中,本步驟與步驟401的實現方式相同,同樣是可以通過向NAND FLASH發(fā)送對應的讀命令來實現。
[0074]步驟404,當開始連續(xù)讀取相應數量的Block后,對讀取到的Stage I可執(zhí)行代碼的代碼數據進行ECC糾錯。
[0075]本實施例中,從每個Block以頁為單位讀取Stagel可執(zhí)行代碼的代碼數據,讀取到的Stagel可執(zhí)行代碼的代碼數據以頁為單位被緩存匯總至與CPU連接的RAM中。相應地,Stagel可執(zhí)行代碼的代碼數據可以在緩存中以頁為單位執(zhí)行ECC糾錯。
[0076]步驟405,對讀取的代碼數據進行壞塊檢測,若未檢測到壞塊則執(zhí)行步驟406,否則返回步驟203。
[0077]步驟406,對讀取的代碼數據進行數據校驗,若校驗成功則結束本流程,否則返回步驟403。
[0078]本實施例中,上述的步驟405和406可以同時執(zhí)行、也可以調換執(zhí)行順序,只要滿足在未檢測到壞塊且數據校驗成功時結束本流程、在檢測到壞塊或數據校驗失敗時返回步驟403即可。并且,由于讀取到的Stagel可執(zhí)行代碼的代碼數據能夠以頁為單位被讀取并緩存、然后被匯總至與CPU連接的RAM中,因此,Stagel可執(zhí)行代碼的代碼數據在匯總至RAM之后被上述的步驟405和406可以分別執(zhí)行壞塊校驗和數據校驗。
[0079]至此,本流程結束,相應地,利用本流程成功讀取到的Bootloader引導程序的Stagel可執(zhí)行代碼引導CPU啟動。以上是對本實施例中NAND FLASH的啟動加載方法的詳細說明。本實施例還提供了一種基于NAND FLASH的啟動加載裝置,該啟動加載裝置可以集成于CPU中、也可以獨立于CPU之外單獨存在,以下以該啟動加載裝置與CPU —體集成為例進行說明。
[0080]請參見圖5,本實施例中基于NAND FLASH的啟動加載裝置包括NAND FLASH控制模塊、配置信息解析模塊、以及ECC糾錯模塊,其中,NAND FLASH控制模塊為啟動加載裝置中的核心模塊,NAND FLASH控制模塊既負責發(fā)起對NAND FLASH的讀操作、又負責其他模塊的協(xié)調控制;ECC糾錯模塊則為可選的模塊、而非必須包括在啟動加載裝置中的模塊。
[0081]當CPU 開始從NAND FLASH啟動時,NAND FLASH控制模塊讀取NAND FLASH 的 BlockO。
[0082]實際應用中,NAND FLASH控制模塊可以通過啟動加載裝置中的NAND FLASH接口向NAND FLASH發(fā)送對應的讀命令、以實現對BlockO的讀取。
[0083]當從BlockO中讀取到配置信息后,NAND FLASH控制模塊通知配置信息解析模塊,使配置信息解析模塊從配置信息中解析得到Stagel可執(zhí)行代碼對應的存儲空間的起始Block 及 Block 數量。
[0084]當完成對配置信息的解析后,NAND FLASH控制模塊從解析得到的起始Block開始連續(xù)讀取相應數量的Block,讀取到的引導程序可執(zhí)行代碼供引導CPU啟動時使用。
[0085]當開始連續(xù)讀取相應數量的Block后,ECC糾錯模塊在NAND FLASH控制模塊的控制下對讀取到的Stagel可執(zhí)行代碼的代碼數據進行ECC糾錯。
[0086]實際應用中,從每個Block都是以頁為單位讀取Stagel可執(zhí)行代碼的代碼數據,并且,讀取到的Stagel可執(zhí)行代碼的代碼數據也會以頁為單位被緩存、然后被匯總至與CPU連接的RAM中。相應地,Stagel可執(zhí)行代碼的代碼數據可以在緩存中以頁為單位被ECC糾錯模塊執(zhí)行ECC糾錯。
[0087]與方法部分同理,為了提高CPU啟動加載的可靠性,Stagel可執(zhí)行代碼可以被復制為多份存儲在NAND FLASH中,相應地,針對Stagel可執(zhí)行代碼被復制為多份存儲的情況,本實施例中的啟動加載裝置需要進行相應的擴展。
[0088]請參見圖6,本實施例中基于NAND FLASH的啟動加載裝置包括NAND FLASH控制模塊、配置信息解析模塊、ECC糾錯模塊、壞塊檢測模塊、以及數據校驗模塊,其中,NAND FLASH控制模塊為啟動加載裝置中的核心模塊,NAND FLASH控制模塊既負責發(fā)起對NAND FLASH的讀操作、又負責其他模塊的協(xié)調控制;ECC糾錯模塊則為可選的模塊、而非必須包括在啟動加載裝置中的模塊。
[0089]當CPU開始從NAND FLASH啟動時,NAND FLASH控制模塊讀取NAND FLASH的BlockO。
[0090]實際應用中,NAND FLASH控制模塊可以通過啟動加載裝置中的NAND FLASH接口向NAND FLASH發(fā)送對應的讀命令、以實現對BlockO的讀取。
[0091]當從BlockO中讀取到配置信息后,NAND FLASH控制模塊通知配置信息解析模塊,使配置信息解析模塊從配置信息中解析得到Stagel可執(zhí)行代碼對應的存儲空間的起始Block 及 Block 數量。
[0092]其中,對于Bootloader引導程序的Stage I可執(zhí)行代碼被復制為多份存儲在NANDFLASH中的情況,配置信息解析模塊解析得到每份Stagel可執(zhí)行代碼對應的存儲空間的起始Block及Block數量。
[0093]當完成對配置信息的解析后,NAND FLASH控制模塊從解析得到的起始Block開始連續(xù)讀取相應數量的Block,讀取到的引導程序可執(zhí)行代碼供引導CPU啟動時使用。
[0094]其中,對于Bootloader引導程序的Stage I可執(zhí)行代碼被復制為多份存儲在NANDFLASH中的情況,當NAND FLASH控制模塊首次發(fā)起對多個連續(xù)Block的讀取時,從解析得到位置最靠前的起始Block開始連續(xù)讀取相應數量的Block,當再次發(fā)起對多個連續(xù)Block的讀取時,則跳轉至解析得到的下一個起始Block開始連續(xù)讀取相應數量的Block。NAND FLASH控制模塊可以通過啟動加載裝置中的NAND FLASH接口向NANDFLASH發(fā)送對應的讀命令,以實現對BlockO之后的連續(xù)多個Block的讀取。
[0095]當開始連續(xù)讀取相應數量的Block后,ECC糾錯模塊在NAND FLASH控制模塊的控制下對讀取到的Stagel可執(zhí)行代碼的代碼數據進行ECC糾錯。
[0096]實際應用中,從每個Block都是以頁為單位讀取Stagel可執(zhí)行代碼的代碼數據,并且,讀取到的Stagel可執(zhí)行代碼的代碼數據也會以頁為單位被緩存、然后被匯總至與(PU連接的RAM中。相應地,Stagel可執(zhí)行代碼的代碼數據可以在緩存中以頁為單位被ECC糾錯模塊執(zhí)行ECC糾錯。
[0097]以及,對于ECC糾錯后的代碼數據,還可以由壞塊檢測模塊和數據校驗模塊在NAND FLASH控制模塊的控制下分別進行壞塊檢測和數據校驗;
[0098]若壞塊檢測模塊未檢測到壞塊、且數據校驗模塊進行數據校驗成功,則完成了對Stagel可執(zhí)行代碼的讀取,并可以利用成功讀取到的Bootloader引導程序的Stagel可執(zhí)行代碼引導CPU啟動;
[0099]但若壞塊檢測模塊檢測到壞塊、或數據校驗模塊進行的數據校驗失敗,則需要由NAND FLASH控制模塊跳轉至解析得到的下一個起始Block重新開始連續(xù)讀取相應數量的Block。
[0100]由于讀取到的Stagel可執(zhí)行代碼的代碼數據能夠以頁為單位被讀取并緩存、然后被匯總至與CPU連接的RAM中,因此,Stagel可執(zhí)行代碼的代碼數據在匯總至RAM之后被上述的壞塊檢測模塊和數據校驗模塊分別執(zhí)行壞塊校驗和數據校驗,若壞塊檢測模塊未檢測到壞塊、且數據校驗模塊進行數據校驗成功,則CPU通過訪問RAM即可在Stagel可執(zhí)行代碼的引導下完成啟動。
[0101]需要說明是,上述各流程和各結構圖中不是所有的步驟和模塊都是必須的,可以根據具體情況忽略某些步驟或模塊。各步驟的執(zhí)行順序不是固定的,可以根據需要進行調整。各模塊的劃分僅僅是為了便于描述采用的功能上的劃分,一個模塊可以分由多個模塊實現,多個模塊的功能也可以由同一個模塊實現,這些模塊可以位于同一個設備中,也可以位于不同的設備中。
[0102]以上所述僅為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內,所做的任何修改、等同替換、改進等,均應包含在本發(fā)明保護的范圍之內。
【權利要求】
1.一種基于NAND FLASH的啟動加載方法,其特征在于,引導程序可執(zhí)行代碼在NANDFLASH中對應的存儲空間的起始Block及包含的Block數量以配置信息的形式存放在NANDFLASH的BlockO中,該存儲空間包括BlockO之后的多個連續(xù)Block ;以及,該啟動加載方法包括: 在CPU開始從NAND FLASH啟動時,讀取NAND FLASH的BlockO ; 在從BlockO中讀取到配置信息后,從配置信息中解析得到引導程序可執(zhí)行代碼對應的存儲空間的起始Block及Block數量Z,其中Z大于等于I ; 在完成對配置信息的解析后,從解析得到的起始Block開始連續(xù)讀取Z個Block、且讀取到的引導程序可執(zhí)行代碼用于引導CPU啟動。
2.根據權利要求1所述的啟動加載方法,其特征在于,引導程序可執(zhí)行代碼對應的存儲空間的所有Block的物理空間之和,大于該引導程序可執(zhí)行代碼的數據大小。
3.根據權利要求1所述的啟動加載方法,其特征在于,該啟動加載方法進一步包括: 對讀取的引導程序可執(zhí)行代碼進行ECC糾錯。
4.根據權利要求1至3中任一項所述的啟動加載方法,其特征在于,引導程序可執(zhí)行代碼被復制為多份存儲在NAND FLASH中,以及,從配置信息中解析得到的存儲空間的起始Block及Block數量Z包括每份引導程序可執(zhí)行代碼對應的存儲空間的起始Block及Block數量Z。
5.根據權利要求4所述的啟動加載方法,其特征在于,在完成對配置信息的解析后,先從解析得到位置最靠前的起始Block開始連續(xù)讀取Z個Block。
6.根據權利要求5所述的啟動加載方法,其特征在于,該啟動加載方法進一步包括: 每當從當前的起始Block開始連續(xù)讀取Z個Block后,對引導程序可執(zhí)行代碼進行壞塊檢測和數據校驗; 當檢測到壞塊或或數據校驗失敗時,跳轉至解析得到的下一個起始Block開始連續(xù)讀取 Z 個 Block。
7.一種基于NAND FLASH的啟動加載裝置,其特征在于,引導程序可執(zhí)行代碼在NANDFLASH中對應的存儲空間的起始Block及包含的Block數量以配置信息的形式存放在NANDFLASH的BlockO中,該存儲空間包括BlockO之后的多個連續(xù)Block ;以及,該啟動加載裝置包括NAND FLASH控制模塊和配置信息解析模塊,其中: 當CPU開始從NAND FLASH啟動時,NAND FLASH控制模塊讀取NAND FLASH的BlockO ;當從BlockO中讀取到配置信息后,NAND FLASH控制模塊通知配置信息解析模塊,使配置信息解析模塊從配置信息中解析得到引導程序可執(zhí)行代碼對應的存儲空間的起始Block及Block數量Z,其中Z大于等于I ; 在完成對配置信息的解析后,NAND FLASH控制模塊從解析得到的起始Block開始連續(xù)讀取Z個Block、且讀取到的引導程序可執(zhí)行代碼用于引導CPU啟動。
8.根據權利要求7所述的啟動加載裝置,其特征在于,引導程序可執(zhí)行代碼對應的存儲空間的所有Block的物理空間之和,大于該引導程序可執(zhí)行代碼的數據大小。
9.根據權利要求7所述的啟動加載裝置,其特征在于,該啟動加載裝置進一步包括: ECC糾錯模塊,對讀取的引導程序可執(zhí)行代碼進行ECC糾錯。
10.根據權利要求7至9中任一項所述的啟動加載裝置,其特征在于,引導程序可執(zhí)行代碼被復制為多份存儲在NAND FLASH中,以及,從配置信息中解析得到的存儲空間的起始Block及Block數量Z包括每份引導程序可執(zhí)行代碼對應的存儲空間的起始Block及Block數量Z。
11.根據權利要求10所述的啟動加載裝置,其特征在于,在完成對配置信息的解析后,配置信息解析模塊先從解析得到位置最靠前的起始Block開始連續(xù)讀取Z個Block。
12.根據權利要求11所述的啟動加載裝置,其特征在于,該啟動加載裝置進一步包括:壞塊檢測模塊和數據校驗模塊; 每當從當前的起始Block開始連續(xù)讀取Z個Block后,壞塊檢測模塊和數據校驗模塊分別對引導程序可執(zhí)行代碼進行壞塊檢測和數據校驗; 當檢測到壞塊或或數據校驗失敗時,NAND FLASH控制模塊跳轉至解析得到的下一個起始Block開始連續(xù)讀 取Z個Block。
【文檔編號】G06F9/445GK104077167SQ201410332155
【公開日】2014年10月1日 申請日期:2014年7月11日 優(yōu)先權日:2014年7月11日
【發(fā)明者】趙志宇, 康向艷 申請人:杭州華三通信技術有限公司