專利名稱:一種基于nand flash的系統(tǒng)引導(dǎo)方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)系統(tǒng)的引導(dǎo)方法,特別涉及一種基于與非閃存(NANDFLASH)的 引導(dǎo)方法和裝置。
背景技術(shù):
在系統(tǒng)啟動之初,系統(tǒng)的內(nèi)存并不是直接可讀寫的,內(nèi)存中也沒有可以執(zhí)行的內(nèi) 核代碼,這就需要進(jìn)行系統(tǒng)引導(dǎo)。系統(tǒng)引導(dǎo),是指在操作系統(tǒng)內(nèi)核運(yùn)行之前運(yùn)行的引導(dǎo)程 序,通過引導(dǎo)程序,初始化硬件設(shè)備、建立內(nèi)存空間的映射圖,為最終調(diào)用操作系統(tǒng)內(nèi)核準(zhǔn) 備好正確的環(huán)境。引導(dǎo)程序通常存放在非易失存儲設(shè)備上。目前的非易失存儲設(shè)備主要包括或非閃存(NOR FLASH)和與非閃存(NAND FLASH) 兩種。NOR FLASH的接口由地址總線,數(shù)據(jù)總線和讀、寫、片選等控制信號線組成,接口讀寫 控制時序也和RAM芯片相同,可以實(shí)現(xiàn)代碼的芯片內(nèi)執(zhí)行(XIP)操作,因此成為主流系統(tǒng)引 導(dǎo)存儲芯片。NANDFLASH的接口如圖1所示,沒有地址總線和數(shù)據(jù)總線的區(qū)分,對數(shù)據(jù)的讀 寫操作都是通過I/O總線串行操作的。讀取NAND FLASH的數(shù)據(jù),需要先發(fā)送讀操作命令并 通過I/O總線輸入要讀取數(shù)據(jù)的地址,再由I/O總線讀出數(shù)據(jù),讀寫操作和RAM芯片的讀寫 操作不同,無法實(shí)現(xiàn)XIP操作。與NOR FLASH相比,NAND FLASH具有較高存儲密度和較長使用壽命的優(yōu)勢,因此, 也有越來越多的CPU支持NAND FLASH作為系統(tǒng)引導(dǎo)存儲芯片。但是,NAND FLASH作為系 統(tǒng)引導(dǎo)存儲芯片,在啟動過程中存在以下幾個問題(1)壞塊問題由于NAND FLASH的工藝特點(diǎn),壞塊問題不可避免。對NAND FLASH 的擦除操作是將存儲單元全部恢復(fù)成邏輯“1”電平,當(dāng)NAND FLASH的數(shù)據(jù)塊中有不能被恢 復(fù)的頁時,這個塊就是壞塊。壞塊是不能再被使用的,通過自身的oob (out of band)區(qū)域 進(jìn)行標(biāo)識。(2)位翻轉(zhuǎn)數(shù)據(jù)在保持和讀時,由于存儲單元的電荷釋放過程,會出現(xiàn)位翻轉(zhuǎn)的 問題,導(dǎo)致數(shù)據(jù)的異常。解決位翻轉(zhuǎn)問題的方法是在每一頁的oob區(qū)域記錄該頁數(shù)據(jù)的 ECC,用于讀取時的糾正動作,保證數(shù)據(jù)的可靠性。(3)無法實(shí)現(xiàn)引導(dǎo)代碼的備份執(zhí)行NAND FLASH不支持?jǐn)?shù)據(jù)的隨機(jī)訪問,無法像 NOR FLASH —樣通過修改地址總線的連接方式達(dá)到更換啟動代碼位置,進(jìn)行備份啟動的目 的。由于以上幾個問題的存在,NAND FLASH在系統(tǒng)引導(dǎo)方面的應(yīng)用存在較大的風(fēng)險(xiǎn), 位翻轉(zhuǎn)和壞塊問題可能導(dǎo)致執(zhí)行代碼的錯誤,不能像NOR FLASH—樣支持隨機(jī)線性訪問,也 就無法直接實(shí)現(xiàn)代碼段的備份啟動。現(xiàn)有技術(shù)中,可以通過如圖2所示的連接方式實(shí)現(xiàn)從NAND FLASH啟動,也可以通 過如圖3所示的連接方式實(shí)現(xiàn)從NAND FLASH啟動。在圖2所示的連接方式中,CPU和NAND FLASH的各個管腳直接相連,CPU直接由 NAND FLASH進(jìn)行啟動,由于NAND FLASH接口的限制,無法直接通過地址線讀取特定地址的數(shù)據(jù),無法通過更換啟動代碼位置實(shí)現(xiàn)對代碼的備份啟動;該連接方式顯然也無法解決 NAND FLASH的位翻轉(zhuǎn)問題,無法保證啟動代碼的可靠性,無法保證系統(tǒng)啟動的可靠性,因 此,該連接方式也不適用在大批量生產(chǎn)的系統(tǒng)上。在圖3所示的連接方式中,使用一片小容量NOR FLASH存放初始啟動代碼,完成 CPU NAND FLASH控制器的初始化并讀取NAND FLASH中的更大段的啟動代碼,NOR FLASH中 的讀取NAND FLASH的代碼需要帶有壞塊檢測和ECC算法代碼。然而,該實(shí)現(xiàn)方式需要使用 NOR FLASH芯片,并實(shí)現(xiàn)壞塊檢測和ECC功能,因此,系統(tǒng)設(shè)計(jì)比較復(fù)雜。
發(fā)明內(nèi)容
有鑒于此,本發(fā)明的目的在于提供一種基于NAND FLASH的系統(tǒng)引導(dǎo)裝置,該裝置 能夠?qū)崿F(xiàn)引導(dǎo)程序的備份啟動,且系統(tǒng)設(shè)計(jì)簡單。為了達(dá)到上述目的,本發(fā)明提供了一種基于NAND FLASH的系統(tǒng)引導(dǎo)裝置,該裝置 包括CPU、NAND FLASH、和邏輯芯片;其中,邏輯芯片轉(zhuǎn)接CPU和NAND FLASH間的輸入輸出 (I/O)總線;CPU的控制管腳與NANDFLASH的控制管腳直接相連,同時接入到邏輯芯片;所述NAND FLASH,用于預(yù)先存儲主引導(dǎo)程序和一份或多份備引導(dǎo)程序;所述CPU,用于在需要進(jìn)行系統(tǒng)引導(dǎo)時,向NAND FLASH發(fā)送讀控制命令和原始地 址;所述的原始地址為一個在NAND FLASH地址空間范圍內(nèi)的地址;在發(fā)送讀控制命令和原 始地址后,從NAND FLASH中讀取引導(dǎo)程序并執(zhí)行,如果執(zhí)行成功,則發(fā)送定時信號到邏輯芯 片,否則不發(fā)送定時信號;所述邏輯芯片,用于預(yù)先存儲各備引導(dǎo)程序地址相對于原始地址的偏移量;用于 等待接收CPU發(fā)來的定時信號,并判斷是否在預(yù)設(shè)時間內(nèi)收到CPU發(fā)來的定時信號,如果未 收到,若存在未被讀取過的引導(dǎo)程序,則發(fā)送復(fù)位信號到CPU,重啟CPU再次嘗試進(jìn)行系統(tǒng) 引導(dǎo),并在CPU重新讀取引導(dǎo)程序時,根據(jù)預(yù)先存儲的備引導(dǎo)程序相對于原始地址的偏移 量,對CPU向NAND FLASH發(fā)送的原始地址進(jìn)行偏移運(yùn)算得到一個未被讀取過的備引導(dǎo)程序 地址,并將所述未被讀取過的備引導(dǎo)程序地址發(fā)送到NAND FLASH以使CPU讀取該未被讀取 過的備引導(dǎo)程序;若不存在未被讀取過的引導(dǎo)程序,則本次系統(tǒng)引導(dǎo)失敗。本發(fā)明還提供了基于NAND FLASH的系統(tǒng)引導(dǎo)方法,應(yīng)用于上述裝置該方法包括A、預(yù)先在NAND FLASH中存儲主引導(dǎo)程序和一份或多份備引導(dǎo)程序,預(yù)先在邏輯 芯片中存儲各備引導(dǎo)程序地址相對于原始地址的偏移量;B、需要進(jìn)行系統(tǒng)引導(dǎo)時,CPU向NAND FLASH發(fā)送讀控制命令和原始地址;并在發(fā) 送讀控制命令和原始地址后,從NAND FLASH中讀取引導(dǎo)程序并執(zhí)行,如果執(zhí)行成功,則發(fā)送 定時信號到邏輯芯片,否則不發(fā)送定時信號;C、邏輯芯片等待接收CPU發(fā)來的定時信號,并判斷是否在預(yù)設(shè)時間內(nèi)收到CPU發(fā) 來的定時信號,如果未收到,若存在未被讀取過的引導(dǎo)程序,則發(fā)送復(fù)位信號到CPU,重啟 CPU再次嘗試進(jìn)行系統(tǒng)引導(dǎo),并在CPU重新讀取引導(dǎo)程序時,根據(jù)預(yù)先存儲的備引導(dǎo)程序相 對于原始地址的偏移量,對CPU向NAND FLASH發(fā)送的原始地址進(jìn)行偏移運(yùn)算得到一個未被 讀取過的備引導(dǎo)程序地址,并將所述未被讀取過的備引導(dǎo)程序地址發(fā)送到NANDFLASH,以使 CPU讀取該未被讀取過的備引導(dǎo)程序;若不存在未被讀取過的引導(dǎo)程序,則本次系統(tǒng)引導(dǎo) 失敗。
由上面的技術(shù)方案可知,本發(fā)明通過利用邏輯芯片,在進(jìn)行系統(tǒng)引導(dǎo)的過程中, 對CPU發(fā)送到NAND FLASH的原始地址進(jìn)行偏移運(yùn)算,得到偏移地址,CPU讀取并執(zhí)行NAND FLASH中從該偏移地址開始的引導(dǎo)程序,進(jìn)行系統(tǒng)引導(dǎo)。本發(fā)明通過更換引導(dǎo)程序的地址來 更換引導(dǎo)程序,能夠?qū)崿F(xiàn)引導(dǎo)程序的備份啟動,且簡化了系統(tǒng)設(shè)計(jì)。
圖1是NAND FLASH的接口示意圖;圖2是現(xiàn)有技術(shù)一種實(shí)現(xiàn)從NAND FLASH啟動進(jìn)行系統(tǒng)引導(dǎo)的裝置的結(jié)構(gòu)示意圖;圖3是現(xiàn)有技術(shù)另一種實(shí)現(xiàn)從NAND FLASH啟動進(jìn)行系統(tǒng)引導(dǎo)的裝置的結(jié)構(gòu)示意 圖;圖4是本發(fā)明實(shí)施例基于NAND FLASH的系統(tǒng)引導(dǎo)裝置的結(jié)構(gòu)示意圖;圖5是圖4所示裝置中CPLD的一種內(nèi)部結(jié)構(gòu)示意圖;圖6是圖4所示裝置中NAND FLASH中一種引導(dǎo)程序存放方式示意圖;圖7是本發(fā)明實(shí)施例基于NAND FLASH的系統(tǒng)引導(dǎo)方法流程圖。
具體實(shí)施例方式為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,下面結(jié)合附圖并舉實(shí)施例, 對本發(fā)明進(jìn)行詳細(xì)說明。本發(fā)明通過利用NAND FLASH的高存儲密度,在給定的模具尺寸內(nèi)提供更高容量的 特性,在NAND FLASH中存放多份備引導(dǎo)程序,并記錄每個備引導(dǎo)程序相對于原始地址的偏 移量;在系統(tǒng)引導(dǎo)需要時,通過邏輯芯片對CPU發(fā)送到NAND FLASH的原始地址進(jìn)行偏移運(yùn) 算,進(jìn)而更改將要讀取的引導(dǎo)程序地址,從而達(dá)到讀取備引導(dǎo)程序啟動的目的。這里的備引導(dǎo)程序,也即主引導(dǎo)程序的備份引導(dǎo)程序,以下統(tǒng)稱為備引導(dǎo)程序。下面以使用復(fù)雜可編程邏輯器件(CPLD)為例對本發(fā)明進(jìn)行詳細(xì)說明,本領(lǐng)域技 術(shù)人員能夠明了,這里的邏輯芯片并不限于CPLD,還可以是其它邏輯芯片,例如FPGA。參見圖4,圖4是本發(fā)明實(shí)施例基于NAND FLASH的系統(tǒng)引導(dǎo)裝置結(jié)構(gòu)圖;其中, CPLD分別與CPU NAND FLASH控制器的I/O管腳及NANDFLASH的I/O管腳相連,用于轉(zhuǎn)接 CPU和NAND FLASH之間的I/O總線;CPU的控制管腳與NAND FLASH的控制管腳直接相連, 同時接入到CPLD。圖4所示裝置中,NAND FLASH,用于預(yù)先存儲主引導(dǎo)程序和一份或多份備引導(dǎo)程 序;CPU,用于在需要進(jìn)行系統(tǒng)引導(dǎo)時,向NAND FLASH發(fā)送讀控制命令和原始地址;在 發(fā)送讀控制信號和原始地址后,從NAND FLASH中讀取引導(dǎo)程序并執(zhí)行,如果執(zhí)行成功,則發(fā) 送定時信號到CPLD,否則不發(fā)送定時信號;所述的原始地址為一個在NAND FLASH地址空間 范圍內(nèi)的地址;CPLD,用于預(yù)先存儲各備引導(dǎo)程序地址相對于原始地址的偏移量;用于等待接收 CPU發(fā)來的定時信號,并判斷是否在預(yù)設(shè)時間內(nèi)收到CPU發(fā)來的定時信號,如果未收到,若 存在未被讀取過的引導(dǎo)程序,則發(fā)送復(fù)位信號到CPU,重啟CPU再次嘗試進(jìn)行系統(tǒng)引導(dǎo),在 CPU重新讀取引導(dǎo)程序時,根據(jù)預(yù)先存儲的備引導(dǎo)程序相對于原始地址的偏移量,對CPU向NANDFLASH發(fā)送的原始地址進(jìn)行偏移運(yùn)算得到一個未被讀取過的備引導(dǎo)程序地址,并將所 述未被讀取過的備引導(dǎo)程序地址發(fā)送到NAND FLASH以使CPU讀取該未被讀取過的備引導(dǎo) 程序;若不存在未被讀取過的引導(dǎo)程序,則本次系統(tǒng)引導(dǎo)失敗。參見圖5,圖5是圖4所示裝置中CPLD的一種內(nèi)部結(jié)構(gòu)示意圖,該CPLD包括加 法單元、地址偏移單元、計(jì)時單元、復(fù)位單元;其中,加法單元,用于預(yù)先存儲各備引導(dǎo)程序地址相對于原始地址的偏移量;地址偏移單元,用于在CPU重新讀取引導(dǎo)程序時,根據(jù)加法單元中存儲的備引導(dǎo) 程序相對于原始地址的偏移量,對CPU向NAND FLASH發(fā)送的原始地址進(jìn)行偏移運(yùn)算得到 一個未被讀取過的備引導(dǎo)程序地址,并將所述未被讀取過的備引導(dǎo)程序地址發(fā)送到NAND FLASH以使CPU讀取該未被讀取過的備引導(dǎo)程序;計(jì)時單元,用于等待接收CPU發(fā)來的定時信號,并判斷是否在預(yù)設(shè)時間內(nèi)接收到 CPU發(fā)來的定時信號,如果是,則本次系統(tǒng)引導(dǎo)成功,否則,向復(fù)位單元發(fā)送超時信號;復(fù)位單元,用于接收到計(jì)時單元發(fā)來的超時信號后,判斷是否還有未被讀取過的 引導(dǎo)程序,如果是,則向CPU發(fā)送復(fù)位信號,重啟CPU再次嘗試進(jìn)行系統(tǒng)引導(dǎo),否則,本次系 統(tǒng)引導(dǎo)失敗。另外,該CPLD還包括命令解析單元,用于檢測CPU接入到CPLD的控制管腳的狀 態(tài),并根據(jù)所述控制管腳的狀態(tài)和CPU向NAND FLASH發(fā)送的讀控制命令判斷當(dāng)前是否為地 址周期,如果是,則向地址偏移單元發(fā)送地址周期指示;所述的地址偏移單元,在對CPU向NAND FLASH發(fā)送的原始地址進(jìn)行地址偏移運(yùn) 算之前,進(jìn)一步用于判斷是否接收到的命令解析單元發(fā)來的地址周期指示,如果是,則對 CPU向NAND FLASH發(fā)送的原始地址進(jìn)行地址偏移運(yùn)算,否則,將轉(zhuǎn)接的CPU和NAND FLASH 間的I/O總線設(shè)置為直通模式;所述的直通模式為不對CPU和NAND FLASH間的數(shù)據(jù)傳輸進(jìn) 行干預(yù)的狀態(tài);所述的CPU在CPU和NAND FLASH間的I/O總線為直通模式時從NAND FLASH中讀 取引導(dǎo)程序代碼。這里,由于NAND FLASH只有I/O總線,在需要讀取NAND FLASH中的數(shù)據(jù)時,需要 先發(fā)送讀控制命令和讀取地址到NAND FLASH,然后從NAND FLASH讀取所述讀取地址處的數(shù) 據(jù),其中,發(fā)送讀取地址是在地址周期發(fā)送到NAND FLASH的,從NAND FLASH中讀取數(shù)據(jù)則 是在數(shù)據(jù)周期進(jìn)行,此屬于現(xiàn)有技術(shù),不再贅述。本發(fā)明中,CPU也需要按照上述過程讀取引導(dǎo)程序,因此,命令解析單元需要根據(jù) 控制管腳的狀態(tài)和CPU向NAND FLASH發(fā)送的讀控制命令判斷當(dāng)前是否為地址周期,這里, 判斷當(dāng)前是否是地址周期的方法與現(xiàn)有技術(shù)相同。如果當(dāng)前為地址周期,則向地址偏移 單元發(fā)送地址周期指示,地址偏移單元需要根據(jù)命令解析單元發(fā)來的地址周期指示,在地 址周期且需要將原始地址進(jìn)行地址偏移運(yùn)算時做地址偏移運(yùn)算,在非地址周期,CPLD不需 要對CPU和NAND FLASH之間的傳輸數(shù)據(jù)或命令做任何修改,因此將其轉(zhuǎn)接的CPU和NAND FLASH之間的I/O總線設(shè)置為直通模式。直通模式是指CPLD對其轉(zhuǎn)接的CPU和NAND FLASH 間的I/O總線上傳輸?shù)臄?shù)據(jù)不做任何改動或干擾時該I/O總線的狀態(tài)。這里,由于CPU從NAND FLASH讀取引導(dǎo)程序之前,已經(jīng)由CPLD根據(jù)是否首次進(jìn)行 系統(tǒng)引導(dǎo),對CPU向NAND FLASH發(fā)送的原始地址進(jìn)行了相應(yīng)處理,并將處理后得到引導(dǎo)程序地址發(fā)送到NAND FLASH,因此CPU在CPLD轉(zhuǎn)接的I/O總線被設(shè)置為直通模式后,可以直 接讀取NAND FLASH中的該引導(dǎo)程序地址處的引導(dǎo)程序。另外,計(jì)時單元還具有計(jì)時功能,每次進(jìn)行系統(tǒng)引導(dǎo)時,CPLD在等待接收CPU發(fā)來 的定時信號之前,需要啟動計(jì)時功能;在接收到CPU發(fā)來的定時信號之后,確定本次系統(tǒng)引 導(dǎo)成功,關(guān)閉計(jì)時功能。可以在系統(tǒng)引導(dǎo)過程中的任何時刻起開啟計(jì)時功能,只要所述的預(yù) 設(shè)時間大于從計(jì)時時刻開始到CPU執(zhí)行引導(dǎo)程序完成所需要的時間即可。例如,可以在接 收到CPU發(fā)來的主引導(dǎo)程序地址后開始計(jì)時,也可以從CPU開始讀取并執(zhí)行引導(dǎo)程序時開 始計(jì)時。參見圖6,圖6是圖4所示裝置中NAND FLASH中一種引導(dǎo)程序存放方式示意圖。 在NAND FLASH中存儲的多份引導(dǎo)程序按照如下方式存放預(yù)先根據(jù)NAND FLASH的數(shù)據(jù) 塊大小,計(jì)算每份引導(dǎo)程序占用的數(shù)據(jù)塊數(shù),將每份引導(dǎo)程序分別從引導(dǎo)程序占用的NAND FLASH數(shù)據(jù)塊數(shù)的整數(shù)倍位置處的數(shù)據(jù)塊的起始位置開始存放。例如,假設(shè)NAND FLASH的 數(shù)據(jù)塊大小為U81Aytes,引導(dǎo)程序大小為5501cbytes,共需要占用NAND FLASH的5個數(shù)據(jù) 塊,如果將引導(dǎo)程序1作為主引導(dǎo)程序從NAND FLASH的第1個數(shù)據(jù)塊的開始位置存放,并 占用NAND FLASH的第0到4共5個數(shù)據(jù)塊;引導(dǎo)程序2作為第一個備引導(dǎo)程序從第5個數(shù) 據(jù)塊的開始位置存放,并占用從第5到9共5個數(shù)據(jù)塊塊開始的5個塊;引導(dǎo)程序3作為 第二個備引導(dǎo)程序從第10個數(shù)據(jù)塊的開始位置存放,并占用從第10到14共5個數(shù)據(jù)塊; 依次類推。在實(shí)際應(yīng)用中,也可以將所述主引導(dǎo)程序和備引導(dǎo)程序依次存放在NAND FLASH 中,例如,引導(dǎo)程序2從引導(dǎo)程序1的結(jié)尾處開始存放,引導(dǎo)程序3從引導(dǎo)程序2的結(jié)尾處 開始存放,依次類推。也可以將所述主引導(dǎo)程序和備引導(dǎo)程序亂序存放。本發(fā)明中,由于CPU是在復(fù)位重啟后進(jìn)行系統(tǒng)引導(dǎo),每次重試進(jìn)行系統(tǒng)引導(dǎo)時發(fā) 送的地址均為原始地址。為了實(shí)現(xiàn)能夠從備引導(dǎo)程序啟動,加法單元需要記錄系統(tǒng)引導(dǎo)重 試次數(shù),以便在本次讀取的引導(dǎo)程序執(zhí)行失敗時,獲取下一個未被讀取過的引導(dǎo)程序地址。為此,加法單元進(jìn)一步用于預(yù)先設(shè)置并初始化系統(tǒng)引導(dǎo)重試次數(shù)為0 ;進(jìn)一步用 于在接收到CPU發(fā)來的定時信號后,將系統(tǒng)引導(dǎo)重試次數(shù)清零;用于等待接收復(fù)位單元發(fā) 來的重試通知,并在接收到復(fù)位單元發(fā)來的重試通知后,將系統(tǒng)引導(dǎo)重試次數(shù)加1 ;復(fù)位單元進(jìn)一步用于預(yù)先存儲備引導(dǎo)程序份數(shù);在接收到計(jì)時單元發(fā)來的超時 信號后,判斷當(dāng)前系統(tǒng)引導(dǎo)重試次數(shù)是否小于預(yù)先存儲的備引導(dǎo)程序份數(shù),如果是,則確定 存在未被讀取過的備引導(dǎo)程序,否則,不存在未被讀取過的備引導(dǎo)程序;在向CPU發(fā)送復(fù)位 信號時,進(jìn)一步用于向加法單元發(fā)送重試通知;地址偏移單元對CPU發(fā)往NAND FLASH的原始地址進(jìn)行偏移運(yùn)算得到一個未被讀 取過的備引導(dǎo)程序地址時,具體為如果當(dāng)前系統(tǒng)引導(dǎo)重試次數(shù)為n,則將加法單元中記錄 的第η個備引導(dǎo)程序地址相對于原始地址的偏移量與原始地址相加得到的值作為一個未 被讀取過的備引導(dǎo)程序地址。這里η為大于0的自然數(shù)。另外,為了防止無限制的重試進(jìn)行系統(tǒng)引導(dǎo),所述的復(fù)位單元進(jìn)一步用于預(yù)先存 儲備引導(dǎo)程序份數(shù);在接收到計(jì)時單元發(fā)來的超時信號后,將系統(tǒng)引導(dǎo)重試次數(shù)加1之前, 進(jìn)一步用于判斷當(dāng)前系統(tǒng)引導(dǎo)重試次數(shù)是否小于預(yù)先存儲的備引導(dǎo)程序份數(shù),如果是,則 確定存在未被讀取過的備引導(dǎo)程序,否則,不存在未被讀取過的備引導(dǎo)程序。這里的備引導(dǎo)程序份數(shù)為NAND FLASH中存儲的備引導(dǎo)程序?qū)嶋H份數(shù)。
這里,CPLD可以根據(jù)所述系統(tǒng)引導(dǎo)重試次數(shù)確定CPU是首次讀取引導(dǎo)程序或重新 讀取引導(dǎo)程序,如果系統(tǒng)引導(dǎo)重試次數(shù)為0,則確定CPU是首次讀取引導(dǎo)程序,如果系統(tǒng)引 導(dǎo)重試次數(shù)不為0,則確定CPU是重新讀取引導(dǎo)次數(shù),如果是重新讀取引導(dǎo)程序,則需要對 CPU發(fā)往NAND FLASH的地址進(jìn)行地址偏移運(yùn)算,這在前面已經(jīng)詳細(xì)介紹過。另外,為了進(jìn)一步驗(yàn)證引導(dǎo)程序的正確性,在引導(dǎo)程序的固定位置存放有該段引 導(dǎo)程序的CRC記錄;CPU讀取并執(zhí)行NAND FLASH中的引導(dǎo)程序完成后,向計(jì)時單元發(fā)送定時信號之 前,進(jìn)一步用于對讀取的引導(dǎo)程序進(jìn)行CRC運(yùn)算,并將運(yùn)算結(jié)果與引導(dǎo)程序中的CRC記錄 相比較,如果相同,則向計(jì)時單元發(fā)送定時信號,否則,不發(fā)送定時信號。圖4所示本發(fā)明實(shí)施例中,所述的原始地址可以是主引導(dǎo)程序地址,也可以是非 引導(dǎo)程序地址;如果是主引導(dǎo)程序地址,則在首次進(jìn)行系統(tǒng)引導(dǎo)時,不需要CPLD對該原始 地址進(jìn)行地址偏移運(yùn)算;如果上述的原始地址不是主引導(dǎo)程序地址,則在首次進(jìn)行系統(tǒng)引 導(dǎo)時,CPLD還需要進(jìn)一步對該原始地址進(jìn)行地址偏移運(yùn)算得到主引導(dǎo)程序地址。因此,所述的原始地址為非引導(dǎo)程序地址時,所述的加法單元進(jìn)一步用于預(yù)先 存儲主引導(dǎo)程序地址相對于原始地址的偏移量;所述的地址偏移單元進(jìn)一步用于在首次 進(jìn)行系統(tǒng)引導(dǎo)時,將加法單元中預(yù)先存儲的主引導(dǎo)程序地址相對于原始地址的偏移量與 所述原始地址相加得到的和作為主引導(dǎo)程序地址,并將所述主引導(dǎo)程序地址發(fā)送到NAND FLASH。以上對本發(fā)明基于NAND FLASH的系統(tǒng)引導(dǎo)裝置進(jìn)行了詳細(xì)說明,本發(fā)明還提供了 一種基于NAND FLASH的系統(tǒng)引導(dǎo)方法。參見圖7,圖7是本發(fā)明實(shí)施例在圖4所述裝置上實(shí)現(xiàn)的基于NANDFLASH的系統(tǒng)引 導(dǎo)方法流程圖,該方法包括以下步驟步驟701、預(yù)先在NAND FLASH中存儲主引導(dǎo)程序和一份或多份備引導(dǎo)程序,預(yù)先 在CPLD中存儲各備引導(dǎo)程序地址相對于原始地址間的偏移量;步驟702、需要進(jìn)行系統(tǒng)引導(dǎo)時,CPU向NAND FLASH發(fā)送讀控制命令和原始地址, 并在發(fā)送讀控制命令和所述原始地址后,從NAND FLASH中讀取引導(dǎo)程序并執(zhí)行,如果執(zhí)行 成功,則發(fā)送定時信號到CPLD,否則不發(fā)送定時信號;步驟703、CPLD等待接收CPU發(fā)來的定時信號,并判斷是否在預(yù)設(shè)時間內(nèi)收到CPU 發(fā)來的定時信號,如果未收到,若存在未被讀取過的引導(dǎo)程序,則發(fā)送復(fù)位信號到CPU,重啟 CPU再次嘗試進(jìn)行系統(tǒng)引導(dǎo),并在CPU重新讀取引導(dǎo)程序時,根據(jù)預(yù)先存儲的備引導(dǎo)程序相 對于原始地址的偏移量,對CPU向NAND FLASH發(fā)送的原始地址進(jìn)行偏移運(yùn)算得到一個未 被讀取過的備引導(dǎo)程序地址,并將所述未被讀取過的備引導(dǎo)程序地址發(fā)送到NANDFLASH,以 使CPU讀取該未被讀取過的備引導(dǎo)程序;若不存在未被讀取過的引導(dǎo)程序,則本次系統(tǒng)引 導(dǎo)失敗。這里的原始地址為一個在NAND FLASH地址空間范圍內(nèi)的地址。圖7所示實(shí)施例中,所述CPLD還持續(xù)監(jiān)控CPU接入到該CPLD的控制管腳的狀態(tài);所述CPLD對CPU向NAND FLASH發(fā)送的原始地址進(jìn)行地址偏移運(yùn)算之前,進(jìn)一步 包括根據(jù)監(jiān)控到的控制管腳的狀態(tài)和CPU向NAND FLASH發(fā)送的讀控制命令判斷當(dāng)前是 否為地址周期,如果是,則對CPU向NANDFLASH發(fā)送的原始地址進(jìn)行地址偏移運(yùn)算,否則,將CPLD轉(zhuǎn)接的CPU和NAND FLASH間的I/O總線設(shè)置為直通模式;所述的直通模式為CPLD對 其轉(zhuǎn)接的CPU和NAND FLASH間的I/O總線上傳輸?shù)臄?shù)據(jù)信息不進(jìn)行干預(yù)時該I/O總線的 狀態(tài);CPU在和NAND FLASH間的I/O總線為直通模式時從NAND FLASH中讀取引導(dǎo)程序 代碼。另外,CPLD具有計(jì)時功能,每次進(jìn)行系統(tǒng)引導(dǎo)時,CPLD在等待接收CPU發(fā)來的定 時信號之前,需要啟動計(jì)時功能;在接收到CPU發(fā)來的定時信號之后,確定本次系統(tǒng)引導(dǎo)成 功,關(guān)閉計(jì)時功能??梢栽谙到y(tǒng)引導(dǎo)過程中的任何時刻起開啟計(jì)時功能,只要所述的預(yù)設(shè)時 間大于從計(jì)時時刻開始到CPU執(zhí)行引導(dǎo)程序完成所需要的時間即可。例如,可以在接收到 CPU發(fā)來的主引導(dǎo)程序地址后開始計(jì)時,也可以從CPU開始讀取并執(zhí)行引導(dǎo)程序時開始計(jì) 時。圖7所示本發(fā)明實(shí)施例中,預(yù)先在CPLD中設(shè)置并初始化系統(tǒng)引導(dǎo)重試次數(shù)為0 ; 預(yù)先在CPLD中存儲備引導(dǎo)程序份數(shù);步驟703所述CPLD在判斷確定在預(yù)設(shè)時間內(nèi)接收到CPU發(fā)來的定時信號之后,進(jìn) 一步包括將系統(tǒng)引導(dǎo)重試次數(shù)清零;在判斷確定未在預(yù)設(shè)時間內(nèi)接收到CPU發(fā)來的定時 信號之后進(jìn)一步包括將系統(tǒng)引導(dǎo)重試次數(shù)加1,并在將系統(tǒng)引導(dǎo)重試次數(shù)加1之前,判斷 當(dāng)前系統(tǒng)引導(dǎo)重試次數(shù)是否小于備引導(dǎo)程序份數(shù),如果是,則存在未被讀取過的備引導(dǎo)程 序,否則,不存在未被讀取過的備引導(dǎo)程序;步驟703所述CPLD根據(jù)預(yù)先存儲的備引導(dǎo)程序地址相對于原始地址間的偏移量, 對CPU向NAND FLASH發(fā)送的原始地址進(jìn)行偏移運(yùn)算得到一個未被讀取過的備引導(dǎo)程序地 址的方法為如果系統(tǒng)引導(dǎo)重試次數(shù)為n,則將原始地址和第η個備引導(dǎo)程序地址相對于原 始地址的偏移量相加,將相加得到的和作為一個未被讀取過的備引導(dǎo)程序地址。這里,CPLD根據(jù)預(yù)先存儲的備引導(dǎo)程序地址相對于原始地址間的偏移量,對CPU 向NAND FLASH發(fā)送的原始地址進(jìn)行偏移運(yùn)算之前,可以根據(jù)當(dāng)前系統(tǒng)引重試導(dǎo)次數(shù)確定 CPU是首次讀取引導(dǎo)程序還是重新讀取引導(dǎo)程序,如果當(dāng)前系統(tǒng)引導(dǎo)重試次數(shù)為0,則可以 確定CPU是首次讀取引導(dǎo)程序,如果當(dāng)前系統(tǒng)引導(dǎo)重試次數(shù)不為0,在可以確定CPU是重新 讀取引導(dǎo)程序。因此,根據(jù)系統(tǒng)引導(dǎo)重試次數(shù),就可以確定是否需要對原始地址作地址偏移 運(yùn)算。另外,為了進(jìn)一步驗(yàn)證讀取的引導(dǎo)程序,NAND FLASH中存儲的引導(dǎo)程序的固定位 置處存放了該段引導(dǎo)程序的CRC記錄;步驟702所述CPU執(zhí)行引導(dǎo)程序完成后,向CPLD發(fā) 送定時信號前,進(jìn)一步包括對接收到的引導(dǎo)程序進(jìn)行CRC運(yùn)算,并將運(yùn)算結(jié)果與引導(dǎo)程序 中固定位置處存放的CRC記錄進(jìn)行比較,如果相同,則向發(fā)送CPLD發(fā)送定時信號,否則,不 發(fā)送定時信號。圖7所示本發(fā)明實(shí)施例中,所述原始地址可以是主引導(dǎo)程序地址,也可以是非引 導(dǎo)程序地址;如果是主引導(dǎo)程序地址,則在首次讀取引導(dǎo)程序時,不需要CPLD對該原始地 址進(jìn)行地址偏移運(yùn)算;如果不是主引導(dǎo)程序地址,則在首次讀取引導(dǎo)程序時,還需要對該原 始地址進(jìn)行地址偏移運(yùn)算。因此,所述的原始地址為非引導(dǎo)程序地址時,所述的CPLD還預(yù)先存儲主引導(dǎo)程 序地址相對于原始地址的偏移量;在CPU首次讀取引導(dǎo)程序時,將主引導(dǎo)程序地址相對于原始地址的偏移量與所述原始地址相加得到的和作為主引導(dǎo)程序地址,并將所述主引導(dǎo)程 序地址發(fā)送到NAND FLASH。由上述本發(fā)明的技術(shù)方案可知,本發(fā)明針對目前從NAND FLASH進(jìn)行系統(tǒng)引導(dǎo)時存 在的不可靠和不實(shí)用問題,提出一種基于NAND FLASH的系統(tǒng)引導(dǎo)方法和裝置。利用邏輯 芯片對系統(tǒng)引導(dǎo)進(jìn)行監(jiān)控和更改引導(dǎo)程序地址操作,且更換引導(dǎo)程序起始的過程對CPU和 NAND FLASH透明,因此,適用于所有使用NAND FLASH的系統(tǒng);利用NAND FLASH存儲密度 高、存儲容量大的特點(diǎn)進(jìn)行多備份啟動操作,在保證系統(tǒng)可靠啟動的前提下,省略了壞塊檢 測和ECC校驗(yàn)的邏輯實(shí)現(xiàn),規(guī)避了 NAND FLASH芯片的固有缺陷,提高了 NAND FLASH引導(dǎo)系 統(tǒng)的可靠性;另外本發(fā)明還簡化了接口邏輯的實(shí)現(xiàn),提高了可實(shí)現(xiàn)性。以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精 神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明保護(hù)的范圍之內(nèi)。
權(quán)利要求
1.一種基于與非閃存NAND FLASH的系統(tǒng)引導(dǎo)裝置,包括CPU和NANDFLASH,其特征在 于,該裝置還包括邏輯芯片;其中,邏輯芯片轉(zhuǎn)接CPU和NAND FLASH間的輸入輸出(I/O) 總線;CPU的控制管腳與NAND FLASH的控制管腳直接相連,同時接入到邏輯芯片;所述NAND FLASH,用于預(yù)先存儲主引導(dǎo)程序和一份或多份備引導(dǎo)程序; 所述CPU,用于在需要進(jìn)行系統(tǒng)引導(dǎo)時,向NAND FLASH發(fā)送讀控制命令和原始地址;所 述的原始地址為一個在NAND FLASH地址空間范圍內(nèi)的地址;在發(fā)送讀控制命令和原始地 址后,從NAND FLASH中讀取引導(dǎo)程序并執(zhí)行,如果執(zhí)行成功,則發(fā)送定時信號到邏輯芯片, 否則不發(fā)送定時信號;所述邏輯芯片,用于預(yù)先存儲各備引導(dǎo)程序地址相對于原始地址的偏移量;用于等待 接收CPU發(fā)來的定時信號,并判斷是否在預(yù)設(shè)時間內(nèi)收到CPU發(fā)來的定時信號,如果未收 到,若存在未被讀取過的引導(dǎo)程序,則發(fā)送復(fù)位信號到CPU,重啟CPU再次嘗試進(jìn)行系統(tǒng)引 導(dǎo),并在CPU重新讀取引導(dǎo)程序時,根據(jù)預(yù)先存儲的備引導(dǎo)程序相對于原始地址的偏移量, 對CPU向NAND FLASH發(fā)送的原始地址進(jìn)行偏移運(yùn)算得到一個未被讀取過的備引導(dǎo)程序地 址,并將所述未被讀取過的備引導(dǎo)程序地址發(fā)送到NAND FLASH以使CPU讀取該未被讀取過 的備引導(dǎo)程序;若不存在未被讀取過的引導(dǎo)程序,則本次系統(tǒng)引導(dǎo)失敗。
2.如權(quán)利要求1所述的裝置,其特征在于,所述邏輯芯片包括加法單元、地址偏移單 元、計(jì)時單元、復(fù)位單元;所述加法單元,用于預(yù)先存儲各備引導(dǎo)程序地址相對于原始地址的偏移量; 所述地址偏移單元,用于在CPU重新讀取引導(dǎo)程序時,根據(jù)加法單元中存儲的備引導(dǎo) 程序相對于原始地址的偏移量,對CPU向NAND FLASH發(fā)送的原始地址進(jìn)行偏移運(yùn)算得到 一個未被讀取過的備引導(dǎo)程序地址,并將所述未被讀取過的備引導(dǎo)程序地址發(fā)送到NAND FLASH以使CPU讀取該未被讀取過的備引導(dǎo)程序;所述計(jì)時單元,用于等待接收CPU發(fā)來的定時信號,并判斷是否在預(yù)設(shè)時間內(nèi)接收到 CPU發(fā)來的定時信號,如果未收到,向復(fù)位單元發(fā)送超時信號;所述復(fù)位單元,用于接收到計(jì)時單元發(fā)來的超時信號后,判斷是否還有未被讀取過的 引導(dǎo)程序,如果是,則向CPU發(fā)送復(fù)位信號,重啟CPU再次嘗試進(jìn)行系統(tǒng)引導(dǎo),否則,本次系 統(tǒng)引導(dǎo)失敗。
3.如權(quán)利要求2所述的裝置,其特征在于,所述邏輯芯片還包括命令解析單元;所述命令解析單元,用于監(jiān)控CPU接入到所述邏輯芯片的控制管腳的狀態(tài),并根據(jù)監(jiān) 控到的控制管腳的狀態(tài)和CPU向NAND FLASH發(fā)送的讀控制命令判斷當(dāng)前是否為地址周期, 如果是,則向地址偏移單元發(fā)送地址周期指示;所述地址偏移單元,在對CPU向NAND FLASH發(fā)送的原始地址進(jìn)行地址偏移運(yùn)算之前, 進(jìn)一步用于判斷是否接收到命令解析單元發(fā)來的地址周期指示,如果是,則對CPU向NAND FLASH發(fā)送的原始地址進(jìn)行地址偏移運(yùn)算,否則,將轉(zhuǎn)接的CPU和NAND FLASH間的I/O總線 設(shè)置為直通模式;所述的直通模式為邏輯芯片對其轉(zhuǎn)接的CPU和NAND FLASH間的I/O總線 上傳輸?shù)臄?shù)據(jù)信息不進(jìn)行干預(yù)時該I/O總線的狀態(tài);所述CPU在其和NAND FLASH間的I/O總線為直通模式時從NANDFLASH中讀取引導(dǎo)程 序代碼。
4.如權(quán)利要求3所述的裝置,其特征在于,所述計(jì)時單元,在等待接收CPU發(fā)來的定時信號之前,進(jìn)一步用于啟動計(jì)時功能;在接收到CPU發(fā)來的定時信號之后,進(jìn)一步用于,關(guān) 閉計(jì)時功能。
5.如權(quán)利要求4所述的裝置,其特征在于,所述加法單元進(jìn)一步用于預(yù)先設(shè)置并初始 化系統(tǒng)引導(dǎo)重試次數(shù)為0 ;用于等待接收CPU發(fā)來的定時信號,并在接收到CPU發(fā)來的定時 信號后,將系統(tǒng)引導(dǎo)重試次數(shù)清零;用于等待接收復(fù)位單元發(fā)來的重試通知,并在接收到復(fù) 位單元發(fā)來的重試通知后,將系統(tǒng)引導(dǎo)重試次數(shù)加1 ;所述復(fù)位單元進(jìn)一步用于預(yù)先存儲備引導(dǎo)程序份數(shù),所述的備引導(dǎo)程序份數(shù)為NAND FLASH中存儲的備引導(dǎo)程序?qū)嶋H份數(shù);在接收到計(jì)時單元發(fā)來的超時信號后,判斷當(dāng)前系 統(tǒng)引導(dǎo)重試次數(shù)是否小于預(yù)先存儲的備引導(dǎo)程序份數(shù),如果是,則確定存在未被讀取過的 備引導(dǎo)程序,否則,不存在未被讀取過的備引導(dǎo)程序;在向CPU發(fā)送復(fù)位信號時,進(jìn)一步用 于向加法單元發(fā)送重試通知;所述地址偏移單元在根據(jù)加法單元中存儲的備引導(dǎo)程序地址相對于原始地址的偏移 量,對CPU向NAND FLASH發(fā)送的原始地址進(jìn)行偏移運(yùn)算得到一個未被讀取過的備引導(dǎo)程序 地址時,具體為如果系統(tǒng)引導(dǎo)重試次數(shù)為n,則將原始地址和第η個備引導(dǎo)程序地址相對 于原始地址的偏移量相加,并將相加得到的和作為一個未被讀取過的備引導(dǎo)程序地址。
6.如權(quán)利要求5所述的裝置,其特征在于,所述地址偏移單元在加法單元中的系統(tǒng)引 導(dǎo)重試次數(shù)不為0時,確定CPU重新讀取引導(dǎo)程序。
7.如權(quán)利要求6所述的裝置,其特征在于,預(yù)先在引導(dǎo)程序的固定位置存放該段引導(dǎo) 程序的CRC記錄;CPU讀取并執(zhí)行NAND FLASH中的引導(dǎo)程序完成后,向計(jì)時單元發(fā)送定時信號之前,進(jìn) 一步用于對讀取的引導(dǎo)程序進(jìn)行CRC運(yùn)算,并將運(yùn)算結(jié)果與引導(dǎo)程序中的CRC記錄相比 較,如果相同,則向計(jì)時單元發(fā)送定時信號,否則,不發(fā)送定時信號。
8.如權(quán)利要求1到7任一權(quán)項(xiàng)所述的裝置,其特征在于,所述原始地址為存儲在NAND FLASH中的主引導(dǎo)程序地址;或者,所述原始地址為一個在NAND FLASH地址空間范圍內(nèi)的任一地址;所述加法單元進(jìn)一步用于預(yù)先存儲主引導(dǎo)程序地址相對于原始地址的偏移量;所述地址偏移單元進(jìn)一步用于在CPU首次讀取引導(dǎo)程序時,將主引導(dǎo)程序地址相對 于原始地址的偏移量與原始地址相加得到的和作為主引導(dǎo)程序地址,并將所述主引導(dǎo)程序 地址發(fā)送到NAND FLASH。
9.一種基于NAND FLASH的系統(tǒng)引導(dǎo)方法,其特征在于,邏輯芯片轉(zhuǎn)接CPU中和NAND FLASH間的I/O總線;CPU的控制管腳和NAND FLASH的控制管腳直接相連,同時接入到邏輯 芯片;該方法包括A、預(yù)先在NANDFLASH中存儲主引導(dǎo)程序和一份或多份備引導(dǎo)程序,預(yù)先在邏輯芯片中 存儲各備引導(dǎo)程序地址相對于原始地址的偏移量;B、需要進(jìn)行系統(tǒng)引導(dǎo)時,CPU向NANDFLASH發(fā)送讀控制命令和原始地址;并在發(fā)送讀 控制命令和原始地址后,從NAND FLASH中讀取引導(dǎo)程序并執(zhí)行,如果執(zhí)行成功,則發(fā)送定時 信號到邏輯芯片,否則不發(fā)送定時信號;C、邏輯芯片等待接收CPU發(fā)來的定時信號,并判斷是否在預(yù)設(shè)時間內(nèi)收到CPU發(fā)來的定時信號,如果未收到,若存在未被讀取過的引導(dǎo)程序,則發(fā)送復(fù)位信號到CPU,重啟CPU再 次嘗試進(jìn)行系統(tǒng)引導(dǎo),并在CPU重新讀取引導(dǎo)程序時,根據(jù)預(yù)先存儲的備引導(dǎo)程序相對于 原始地址的偏移量,對CPU向NAND FLASH發(fā)送的原始地址進(jìn)行偏移運(yùn)算得到一個未被讀取 過的備引導(dǎo)程序地址,并將所述未被讀取過的備引導(dǎo)程序地址發(fā)送到NANDFLASH,以使CPU 讀取該未被讀取過的備引導(dǎo)程序;若不存在未被讀取過的引導(dǎo)程序,則本次系統(tǒng)引導(dǎo)失敗。
10.如權(quán)利要求9所述的方法,其特征在于,邏輯芯片持續(xù)監(jiān)控CPU接入到所述邏輯芯 片的控制管腳的狀態(tài);步驟C所述對CPU向NAND FLASH發(fā)送的原始地址進(jìn)行地址偏移運(yùn)算之前,進(jìn)一步包括 根據(jù)監(jiān)控到的控制管腳的狀態(tài)和CPU向NAND FLASH發(fā)送的讀控制命令判斷當(dāng)前是否為地 址周期,如果是,則對CPU向NANDFLASH發(fā)送的原始地址進(jìn)行地址偏移運(yùn)算,否則,將轉(zhuǎn)接的 CPU和NANDFLASH間的I/O總線設(shè)置為直通模式;所述的直通模式為邏輯芯片對其轉(zhuǎn)接的 CPU和NAND FLASH間的I/O總線上傳輸?shù)臄?shù)據(jù)信息不進(jìn)行干預(yù)時該I/O總線的狀態(tài);步驟B所述CPU在其和NAND FLASH間的I/O總線為直通模式時從NAND FLASH中讀取 引導(dǎo)程序代碼。
11.如權(quán)利要求10所述的方法,其特征在于,步驟C所述邏輯芯片在等待接收CPU發(fā)來 的定時信號之前,進(jìn)一步包括啟動計(jì)時功能;在接收到CPU發(fā)來的定時信號之后,進(jìn)一步 包括關(guān)閉計(jì)時功能。
12.如權(quán)利要求11所述的方法,其特征在于,預(yù)先設(shè)置并初始化系統(tǒng)引導(dǎo)重試次數(shù)為 0 ;預(yù)先存儲備引導(dǎo)程序份數(shù),所述的備引導(dǎo)程序份數(shù)為NAND FLASH中存儲的備引導(dǎo)程序 實(shí)際份數(shù);步驟C所述邏輯芯片在判斷確定在預(yù)設(shè)時間內(nèi)接收到CPU發(fā)來的定時信號之后,進(jìn)一 步包括將系統(tǒng)引導(dǎo)重試次數(shù)清零;在判斷確定未在預(yù)設(shè)時間內(nèi)接收到CPU發(fā)來的定時信 號之后進(jìn)一步包括將系統(tǒng)引導(dǎo)重試次數(shù)加1,并在將系統(tǒng)引導(dǎo)重試次數(shù)加1之前,判斷當(dāng) 前系統(tǒng)引導(dǎo)重試次數(shù)是否小于備引導(dǎo)程序份數(shù),如果是,則存在未被讀取過的備引導(dǎo)程序, 否則,不存在未被讀取過的備引導(dǎo)程序;步驟C所述根據(jù)預(yù)先存儲的備引導(dǎo)程序地址相對于原始地址間的偏移量,對CPU向 NAND FLASH發(fā)送的原始地址進(jìn)行偏移運(yùn)算得到一個未被讀取過的備引導(dǎo)程序地址的方法 為如果系統(tǒng)引導(dǎo)重試次數(shù)為n,則將原始地址和第η個備引導(dǎo)程序地址相對于原始地址的 偏移量相加,將相加得到的和作為一個未被讀取過的備引導(dǎo)程序地址。
13.如權(quán)利要求12所述的方法,其特征在于,所述邏輯芯片在當(dāng)前系統(tǒng)引導(dǎo)重試次數(shù) 不為0時,確定CPU重新讀取引導(dǎo)程序。
14.如權(quán)利要求13所述的方法,其特征在于,預(yù)先在引導(dǎo)程序的固定位置存放該段引 導(dǎo)程序的CRC記錄;步驟B所述CPU執(zhí)行引導(dǎo)程序完成后,向邏輯芯片發(fā)送定時信號之前,進(jìn)一步包括對 該段引導(dǎo)程序進(jìn)行CRC運(yùn)算,并將運(yùn)算結(jié)果與該段引導(dǎo)程序中的CRC記錄相比較,如果相 同,則向邏輯芯片發(fā)送定時信號,否則,不發(fā)送定時信號。
15.如權(quán)利要求9到13任一權(quán)項(xiàng)所述的方法,其特征在于,所述的原始地址為存儲在 NAND FLASH中的主引導(dǎo)程序地址;或者,所述的原始地址為一個在NAND FLASH地址空間范圍內(nèi)的任一地址; 所述的CPLD還預(yù)先存儲主引導(dǎo)程序地址相對于原始地址的偏移量;在CPU首次讀取引 導(dǎo)程序時,進(jìn)一步將主引導(dǎo)程序地址相對于原始地址的偏移量與原始地址相加得到的和作 為主引導(dǎo)程序地址,并將所述主引導(dǎo)程序地址發(fā)送到NAND FLASH。
全文摘要
本發(fā)明提供了一種基于NAND FLASH的系統(tǒng)引導(dǎo)方法和裝置。該方法包括預(yù)先在NAND FLASH中存儲多份引導(dǎo)程序,在進(jìn)行系統(tǒng)引導(dǎo)的過程中,利用邏輯芯片對CPU發(fā)送到NAND FLASH的原始地址進(jìn)行偏移運(yùn)算,得到一個未被讀取過的引導(dǎo)程序地址;CPU讀取并執(zhí)行NAND FLASH中該未被讀取過的引導(dǎo)程序,如果執(zhí)行成功,則系統(tǒng)引導(dǎo)成功,否則,重新啟動CPU并再次嘗試進(jìn)行系統(tǒng)引導(dǎo),直到系統(tǒng)引導(dǎo)成功,或所有引導(dǎo)程序均執(zhí)行失敗,系統(tǒng)引導(dǎo)失敗。本發(fā)明通過更換讀取的引導(dǎo)程序地址,能夠?qū)崿F(xiàn)引導(dǎo)程序的備份啟動。
文檔編號G06F11/14GK102135927SQ20111011175
公開日2011年7月27日 申請日期2011年4月29日 優(yōu)先權(quán)日2011年4月29日
發(fā)明者張穎, 李星爽, 段琳, 趙志宇, 錢嘉林 申請人:杭州華三通信技術(shù)有限公司