專利名稱:查找閃存設(shè)備中固件程序存放位置的方法
查找閃存設(shè)備中固件程序存放位置的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及閃存技術(shù)領(lǐng)域,尤其涉及一種查找閃存設(shè)備中固件程序存放位置的方法。
背景技術(shù):
閃存(Flash)是一種非揮發(fā)性的半導(dǎo)體存儲(chǔ)芯片,具有體積小、功耗低、無磁頭等 運(yùn)動(dòng)器件、不易受物理破壞的優(yōu)點(diǎn),是現(xiàn)有便攜式存儲(chǔ)設(shè)備的理想存儲(chǔ)介質(zhì)。利用閃存自身 的非揮發(fā)性(即掉電后數(shù)據(jù)也不會(huì)丟失)特點(diǎn),把固件程序存放于閃存,以閃存為存儲(chǔ)介質(zhì) 的設(shè)備包括有 U 盤、SD 卡(Secure DigitalMemory Card,安全數(shù)碼卡)、SSD (Solid State Disk,固態(tài)硬盤)、MP3、Emmc (嵌入式多媒體卡)等閃存設(shè)備。所謂固件程序,是閃存設(shè)備的 引導(dǎo)程序或者是引導(dǎo)程序的補(bǔ)丁程序。閃存設(shè)備加電后,主控芯片(控制單元)從閃存中 讀取這部分固件程序,按照預(yù)先的定義加載到合適的位置,從而使設(shè)備正確運(yùn)行。閃存通常具有如下的物理結(jié)構(gòu)每片封裝片分為一顆或多個(gè)晶粒(Dice);每顆晶 粒分為多個(gè)塊(Block);每個(gè)塊分為多個(gè)頁面(Page)。對閃存的數(shù)據(jù)訪問有三種類型擦 除、寫入和讀取。受閃存的物理特性影響,擦除時(shí)必須以塊為單位,寫入時(shí)必須以頁為單位。 讀取操作則具有比較大的隨意性,多數(shù)閃存可以以字節(jié)為單位讀取。操作閃存的主控芯片 一般都會(huì)有ECC (Error CodeCorrect,差錯(cuò)糾正)功能,在閃存內(nèi)數(shù)據(jù)出錯(cuò)的情況下,可以 把錯(cuò)誤的數(shù)據(jù)糾正回來。但是ECC糾錯(cuò)能力是有限的,當(dāng)閃存內(nèi)數(shù)據(jù)出錯(cuò)的比特?cái)?shù)目超出 了 ECC的最大糾錯(cuò)能力時(shí),從閃存內(nèi)讀取的數(shù)據(jù)就是錯(cuò)誤的了。如果從某個(gè)塊中的某個(gè)位 置讀出的數(shù)據(jù)是錯(cuò)誤的,則稱這個(gè)塊是壞塊(Bad Block)。通常,由于固件程序自身比較大,如果全部從閃存內(nèi)讀出,在進(jìn)行校驗(yàn)時(shí),所花費(fèi) 的時(shí)間太多,所以當(dāng)前的主流方案是建立一個(gè)很小的數(shù)據(jù)結(jié)構(gòu)體,在這個(gè)數(shù)據(jù)結(jié)構(gòu)體內(nèi)記 錄了固件程序存放的位置等信息。主控芯片上電搜索時(shí),搜索的是這個(gè)數(shù)據(jù)結(jié)構(gòu)體并進(jìn)行 校驗(yàn),校驗(yàn)通過后,在根據(jù)其中的信息加載固件程序,因此,查找閃存設(shè)備中固件程序存放 位置即查找這個(gè)數(shù)據(jù)結(jié)構(gòu)體的位置,查找固件程序即為查找該數(shù)據(jù)結(jié)構(gòu)體。盡管不同型號(hào)的閃存,其物理結(jié)構(gòu)各自不同,但幾乎所有的閃存物理結(jié)構(gòu)都可歸 結(jié)為行和列。其中,每個(gè)頁(Page)是一行,頁地址稱為行地址(rowaddress),頁內(nèi)的不同地 址稱為列地址(column address)。如此一來,只用行、列地址即可做到不同型號(hào)的閃存的讀 取操作。通常,從閃存中加載固件程序時(shí),考慮到要兼容不同型號(hào)的閃存,預(yù)設(shè)了一定的行 列地址算法,根據(jù)該算法計(jì)算出要訪問的行列地址,查找閃存中存放的固件程序。然而,傳 統(tǒng)方案在設(shè)置行列地址的算法上具有一定的隨意性,在閃存質(zhì)量較差的情況下,使用較為 隨意的算法時(shí)無法覆蓋到較多的塊。由于閃存內(nèi)的壞塊一般無法使用,所以使用某些質(zhì)量 較差的閃存時(shí),會(huì)找不到合適的固件程序存放地址,導(dǎo)致無法兼容到該閃存,降低了閃存設(shè) 備的易用性。而某些質(zhì)量較差的閃存價(jià)格便宜,如果無法兼容這些閃存,將提高閃存設(shè)備的 成本。
傳統(tǒng)方案中,也有從閃存的第一個(gè)頁開始,逐個(gè)頁地查找固件程序,這種算法可以 覆蓋所有塊,是一定能找到固件程序的。但是由于訪問閃存也是需要時(shí)間的,當(dāng)閃存的質(zhì)量 比較差時(shí),逐個(gè)頁地去查找固件程序所需要等待的時(shí)間比較長,而用戶無法忍受這么長的 等待時(shí)間??紤]到這一問題,傳統(tǒng)算法中也有計(jì)算出的行地址不是連續(xù)的,而是間隔的查找 固件程序。然而,這樣有時(shí)候會(huì)忽略掉很多頁地址,導(dǎo)致存在查找的“盲點(diǎn)”,即存在這樣一 種情況某些塊是好的,可以用來存放固件程序,但傳統(tǒng)方案的對固件程序的查找方法中并 沒有包含這些塊。此外,傳統(tǒng)方案中還存在“重復(fù)搜索”的問題,即傳統(tǒng)方案計(jì)算出來的頁 地址很多時(shí)候是在同一個(gè)塊內(nèi),這樣,會(huì)在同一個(gè)塊內(nèi)的不同頁上進(jìn)行搜索,使得對閃存的 訪問時(shí)間更長,降低了查找固件程序存放位置的效率。
發(fā)明內(nèi)容基于此,有必要提供一種能盡可能多的覆蓋較多的塊,同時(shí)能提高查找效率的查 找閃存設(shè)備中固件程序存放位置的方法。一種查找閃存設(shè)備中固件程序存放位置的方法,包括以下步驟A.將現(xiàn)有閃存依據(jù)每個(gè)塊內(nèi)包含的頁數(shù)由少到多劃分為多個(gè)等級(jí),對所有等級(jí)的 閃存做定量分析,確定每一等級(jí)閃存的最大容量的最大行地址;B.假設(shè)閃存為第一等級(jí)閃存,由第一等級(jí)閃存的最大容量的最大行地址除以第一 等級(jí)閃存中每個(gè)塊內(nèi)包含的頁數(shù)確定第一數(shù)量,按照預(yù)設(shè)查找方式以第一等級(jí)閃存中每個(gè) 塊內(nèi)包含的頁數(shù)為跨度在所述第一數(shù)量個(gè)塊中進(jìn)行查找;C.判斷是否查找到固件程序存放位置,若是,則進(jìn)入步驟F,否則執(zhí)行步驟D ;D.判斷是否還有下一等級(jí)閃存,若是,則進(jìn)入步驟E,否則進(jìn)入步驟G ;E.假設(shè)閃存為下一等級(jí)閃存,由所述下一等級(jí)閃存的最大容量的最大行地址與上 一等級(jí)閃存最大容量的最大行地址之差除以所述下一等級(jí)閃存中每個(gè)塊內(nèi)包含的頁數(shù)確 定第二數(shù)量,按照預(yù)設(shè)查找方式以下一等級(jí)閃存中每個(gè)塊內(nèi)包含的頁數(shù)為跨度在所述第二 數(shù)量個(gè)塊中進(jìn)行查找;F.判斷是否查找到固件程序存放位置,若是,則進(jìn)入步驟G,否則返回步驟D ;G.結(jié)束查找。優(yōu)選的,所述步驟A為將現(xiàn)有閃存依據(jù)每個(gè)塊內(nèi)包含的頁數(shù)由少到多劃分為三個(gè)等級(jí),對所有等級(jí)的閃 存做定量分析,確定每一等級(jí)閃存的最大容量的最大行地址。優(yōu)選的,所述步驟A中將現(xiàn)有閃存依據(jù)每個(gè)塊內(nèi)包含的頁數(shù)由少到多劃分為三個(gè) 等級(jí)的過程為將64頁/塊的閃存定義為第一等級(jí)閃存;將128頁/塊的閃存定義為第二等級(jí)閃存;將192頁/塊和256頁/塊的閃存定義為第三等級(jí)閃存。優(yōu)選的,所述步驟A中對所有等級(jí)的閃存做定量分析,確定每一等級(jí)閃存的最大 容量的最大行地址的過程為為對三個(gè)等級(jí)的閃存做定量分析,確定第一等級(jí)閃存的最大 容量的最大行地址為0x100000,確定第二等級(jí)閃存的最大容量的最大行地址為0x800000, 確定第三等級(jí)閃存的最大容量的最大行地址為0x1000000。
優(yōu)選的,所述預(yù)設(shè)查找方式為以預(yù)設(shè)數(shù)量個(gè)塊為單位,先在第一個(gè)所述預(yù)設(shè)數(shù)量 個(gè)塊中查找塊號(hào)能被2整除的塊,然后在第二個(gè)所述預(yù)設(shè)數(shù)量個(gè)塊中查找塊號(hào)能被3整除 的塊,接著在第三個(gè)所述預(yù)設(shè)數(shù)量個(gè)塊中查找塊號(hào)不能被2整除的塊,再接著在第四個(gè)所 述預(yù)設(shè)數(shù)量個(gè)塊中查找塊號(hào)不能被3整除的塊,在下四個(gè)所述預(yù)設(shè)數(shù)量個(gè)塊中重復(fù)上述步驟。優(yōu)選的,所述預(yù)設(shè)查找方式為以設(shè)定數(shù)量個(gè)塊為周期,在每個(gè)周期內(nèi)只查找與塊 號(hào)對應(yīng)的頁號(hào)所在的頁。上述查找閃存設(shè)備中固件程序存放位置的方法及閃存設(shè)備,通過將現(xiàn)有閃存依據(jù) 每個(gè)塊內(nèi)包含的頁數(shù)由少到多劃分為多個(gè)等級(jí),對所有等級(jí)的閃存做定量分析,確定每個(gè) 等級(jí)閃存的最大容量的最大行地址,在查找時(shí),將閃存假設(shè)為劃分的等級(jí)中的閃存,按照該 等級(jí)閃存中每個(gè)塊內(nèi)包含的頁數(shù)為跨度進(jìn)行查找。這樣,查找時(shí)可以盡可能多的覆蓋到不 同的塊,提高了查找固件程序存放位置的效率。
圖1為一個(gè)實(shí)施例中查找閃存設(shè)備中固件程序存放位置的方法的流程圖。
具體實(shí)施方式如圖1所示,在一個(gè)實(shí)施例中,一種查找閃存設(shè)備中固件程序存放位置的方法,具 體包括以下步驟步驟S102,將現(xiàn)有閃存依據(jù)每個(gè)塊內(nèi)包含的頁數(shù)由少到多劃分為多個(gè)等級(jí),對所 有等級(jí)的閃存做定量分析,確定每一等級(jí)閃存的最大容量的最大行地址。步驟S104,假設(shè)閃存為第一等級(jí)閃存,由第一等級(jí)閃存的最大容量的最大行地址 除以第一等級(jí)閃存中每個(gè)塊內(nèi)包含的頁數(shù)確定第一數(shù)量,按照預(yù)設(shè)查找方式以第一等級(jí)閃 存中每個(gè)塊內(nèi)包含的頁數(shù)為跨度在所述第一數(shù)量個(gè)塊中進(jìn)行查找。步驟S106,判斷是否查找到固件程序存放位置,若是,則結(jié)束,否則執(zhí)行步驟 S108。步驟S108,判斷是否還有下一等級(jí)閃存,若是,則進(jìn)入步驟S110,否則結(jié)束。判斷 劃分的多個(gè)等級(jí)中是否還有下一等級(jí)閃存,如有,則繼續(xù)進(jìn)行查找。步驟S110,假設(shè)閃存為下一等級(jí)閃存,由所述下一等級(jí)閃存的最大容量的最大行 地址與上一等級(jí)閃存最大容量的最大行地址之差除以所述下一等級(jí)閃存中每個(gè)塊內(nèi)包含 的頁數(shù)確定第二數(shù)量,按照預(yù)設(shè)查找方式以下一等級(jí)閃存中每個(gè)塊內(nèi)包含的頁數(shù)為跨度在 所述第二數(shù)量個(gè)塊中進(jìn)行查找。步驟S112,判斷是否查找到固件程序存放位置,若是,則結(jié)束,否則返回步驟 S108。在步驟S112中,若還沒有查找到固件程序存放位置,則返回步驟S108判斷是否還 有下一等級(jí)閃存,如有的話,則進(jìn)入步驟SllO中,以下一等級(jí)閃存中每個(gè)塊內(nèi)包含的頁數(shù) 為跨度繼續(xù)進(jìn)行查找。在每次執(zhí)行步驟SllO時(shí),都會(huì)調(diào)整第二數(shù)量,即第二數(shù)量是一個(gè)不 斷變化的參數(shù),在執(zhí)行步驟SllO時(shí)由所述下一等級(jí)閃存的最大容量的最大行地址與上一 等級(jí)閃存最大容量的最大行地址之差除以所述下一等級(jí)閃存中每個(gè)塊內(nèi)包含的頁數(shù)進(jìn)行確定。該實(shí)施例中,假設(shè)將現(xiàn)有閃存依據(jù)每個(gè)塊內(nèi)包含的頁數(shù)由少到多劃分N個(gè)等級(jí), 則該查找閃存設(shè)備中固件程序存放位置的方法的具體過程如下步驟1,將現(xiàn)有閃存依據(jù)每個(gè)塊內(nèi)包含的頁數(shù)由少到多劃分為N個(gè)等級(jí);對所有等 級(jí)的閃存做一個(gè)定量分析,確定每種等級(jí)閃存的最大容量的最大行地址;步驟2,假設(shè)閃存為第一等級(jí)閃存,由第一等級(jí)閃存的最大容量的最大行地址除以 第一等級(jí)閃存中每個(gè)塊內(nèi)包含的頁數(shù)確定第一數(shù)量,按照預(yù)設(shè)查找方式以第一等級(jí)閃存中 每個(gè)塊內(nèi)包含的頁數(shù)為跨度在第一數(shù)量個(gè)塊中進(jìn)行查找;如果查找到固件程序存放位置, 則進(jìn)入步驟N+1 ;否則,再查找了由第一等級(jí)閃存最大容量的最大行地址除以第一等級(jí)閃 存每個(gè)塊內(nèi)包含的頁數(shù)確定的第一數(shù)量個(gè)塊后,進(jìn)入下一步驟。步驟3,假設(shè)現(xiàn)有閃存為第二等級(jí)閃存,由第二等級(jí)閃存的最大容量的最大行地址 與第一等級(jí)閃存最大容量的最大行地址之差除以第二等級(jí)閃存中每個(gè)塊內(nèi)包含的頁數(shù)確 定第二數(shù)量,按照預(yù)設(shè)查找方式以第二等級(jí)閃存中每個(gè)塊內(nèi)包含的頁數(shù)為跨度在第二數(shù)量 個(gè)塊中進(jìn)行查找;如果查找到固件程序存放位置,則進(jìn)入步驟N+1 ;否則,在查找了由第二 等級(jí)閃存最大容量的最大行地址以及第一等級(jí)閃存最大容量的最大行地址之差除以第二 等級(jí)閃存每個(gè)塊內(nèi)包含的頁數(shù)確定的第二數(shù)量個(gè)塊后,進(jìn)入下一步驟。步驟N,假設(shè)現(xiàn)有閃存為第N等級(jí)閃存,由第N等級(jí)閃存的最大容量的最大行地址 與第N-I等級(jí)閃存最大容量的最大行地址之差除以第N等級(jí)閃存中每個(gè)塊內(nèi)包含的頁數(shù)確 定第N數(shù)量,按照預(yù)設(shè)查找方式以第N等級(jí)閃存中每個(gè)塊內(nèi)包含的頁數(shù)為跨度查找;如果查 找到固件程序存放位置,則進(jìn)入步驟N+1 ;否則,再查找由第N等級(jí)閃存最大容量的最大行 地址與第N-I等級(jí)閃存最大容量的最大行地址之差除以第N等級(jí)閃存每個(gè)塊內(nèi)包含的頁數(shù) 確定的第N數(shù)量個(gè)塊后,進(jìn)入下一步驟。步驟N+1,結(jié)束查找。下面,以一個(gè)具體的實(shí)施例來說明本發(fā)明。實(shí)施例一現(xiàn)有閃存,按照其中塊(Block)內(nèi)包含的頁(Page)數(shù)目來分類,可以把閃存分為 64Page/Block、128Page/Block、192Page/Block、256Page/Block 等,其中,192Page/Block 的閃存,其塊的首個(gè)頁地址也是以256I^ge/BlOCk來跳變的,即前后兩個(gè)塊之間的首個(gè)頁 地址相差256,因此,該閃存也可以認(rèn)為是256Page/Block的?,F(xiàn)有閃存,按照其中的頁大小劃分,又可以把閃存分為2k/^age、4k/Page、8k/ Page,當(dāng)然后續(xù)也會(huì)出現(xiàn)16k/^age以及其他更大容量I^ge的閃存。對于不同類型的閃存,其最大容量的最大行地址如表1所示表 權(quán)利要求
1.一種查找閃存設(shè)備中固件程序存放位置的方法,包括以下步驟A.將現(xiàn)有閃存依據(jù)每個(gè)塊內(nèi)包含的頁數(shù)由少到多劃分為多個(gè)等級(jí),對所有等級(jí)的閃存 做定量分析,確定每一等級(jí)閃存的最大容量的最大行地址;B.假設(shè)閃存為第一等級(jí)閃存,由第一等級(jí)閃存的最大容量的最大行地址除以第一等級(jí) 閃存中每個(gè)塊內(nèi)包含的頁數(shù)確定第一數(shù)量,按照預(yù)設(shè)查找方式以第一等級(jí)閃存中每個(gè)塊內(nèi) 包含的頁數(shù)為跨度在所述第一數(shù)量個(gè)塊中進(jìn)行查找;C.判斷是否查找到固件程序存放位置,若是,則進(jìn)入步驟F,否則執(zhí)行步驟D;D.判斷是否還有下一等級(jí)閃存,若是,則進(jìn)入步驟E,否則進(jìn)入步驟G;E.假設(shè)閃存為下一等級(jí)閃存,由所述下一等級(jí)閃存的最大容量的最大行地址與上一等 級(jí)閃存最大容量的最大行地址之差除以所述下一等級(jí)閃存中每個(gè)塊內(nèi)包含的頁數(shù)確定第 二數(shù)量,按照預(yù)設(shè)查找方式以下一等級(jí)閃存中每個(gè)塊內(nèi)包含的頁數(shù)為跨度在所述第二數(shù)量 個(gè)塊中進(jìn)行查找;F.判斷是否查找到固件程序存放位置,若是,則進(jìn)入步驟G,否則返回步驟D;G.結(jié)束查找。
2.根據(jù)權(quán)利要求1所述的查找閃存設(shè)備中固件程序存放位置的方法,其特征在于,所 述步驟A為將現(xiàn)有閃存依據(jù)每個(gè)塊內(nèi)包含的頁數(shù)由少到多劃分為三個(gè)等級(jí),對所有等級(jí)的閃存做 定量分析,確定每一等級(jí)閃存的最大容量的最大行地址。
3.根據(jù)權(quán)利要求2所述的查找閃存設(shè)備中固件程序存放位置的方法,其特征在于,所 述步驟A中將現(xiàn)有閃存依據(jù)每個(gè)塊內(nèi)包含的頁數(shù)由少到多劃分為三個(gè)等級(jí)的過程為將64頁/塊的閃存定義為第一等級(jí)閃存;將1 頁/塊的閃存定義為第二等級(jí)閃存;將192頁/塊和256頁/塊的閃存定義為第三等級(jí)閃存。
4.根據(jù)權(quán)利要求3所述的查找閃存設(shè)備中固件程序存放位置的方法,其特征在于,所 述步驟A中對所有等級(jí)的閃存做定量分析,確定每一等級(jí)閃存的最大容量的最大行地址 的過程為對三個(gè)等級(jí)的閃存做定量分析,確定第一等級(jí)閃存的最大容量的最大行地址為 0x100000,確定第二等級(jí)閃存的最大容量的最大行地址為0x800000,確定第三等級(jí)閃存的 最大容量的最大行地址為0x1000000。
5.根據(jù)權(quán)利要求1所述的查找閃存設(shè)備中固件程序存放位置的方法,其特征在于,所 述預(yù)設(shè)查找方式為以預(yù)設(shè)數(shù)量個(gè)塊為單位,先在第一個(gè)所述預(yù)設(shè)數(shù)量個(gè)塊中查找塊號(hào)能 被2整除的塊,然后在第二個(gè)所述預(yù)設(shè)數(shù)量個(gè)塊中查找塊號(hào)能被3整除的塊,接著在第三個(gè) 所述預(yù)設(shè)數(shù)量個(gè)塊中查找塊號(hào)不能被2整除的塊,再接著在第四個(gè)所述預(yù)設(shè)數(shù)量個(gè)塊中查 找塊號(hào)不能被3整除的塊,在下四個(gè)所述預(yù)設(shè)數(shù)量個(gè)塊中重復(fù)上述步驟。
6.根據(jù)權(quán)利要求1所述的查找閃存設(shè)備中固件程序存放位置的方法,其特征在于,所 述預(yù)設(shè)查找方式為以設(shè)定數(shù)量個(gè)塊為周期,在每個(gè)周期內(nèi)只查找與塊號(hào)對應(yīng)的頁號(hào)所在 的頁。
全文摘要
一種查找閃存設(shè)備中固件程序存放位置的方法,包括以下步驟將現(xiàn)有閃存依據(jù)每個(gè)塊內(nèi)包含的頁數(shù)由少到多劃分為多個(gè)等級(jí),對所有等級(jí)的閃存做定量分析,確定每一等級(jí)閃存的最大容量的最大行地址;假設(shè)閃存為某一等級(jí)閃存,按照該等級(jí)閃存中每個(gè)塊內(nèi)包含的頁數(shù)為跨度進(jìn)行查找,直到查找到固件程序存放位置。采用上述方法,能夠在查找固件程序時(shí)盡可能覆蓋到不同的塊,提高了查找固件程序存放位置的效率。
文檔編號(hào)G06F12/08GK102147771SQ201110087950
公開日2011年8月10日 申請日期2011年4月8日 優(yōu)先權(quán)日2011年4月8日
發(fā)明者李中政, 鄧恩華 申請人:深圳市江波龍電子有限公司