基于FPGA的K9F4G08 Flash控制器設(shè)計
2.1 匹配表
Flash出廠后可能存在壞塊,使用中也有可能會再出現(xiàn)新的壞塊。制造商保證每個芯片中的壞塊不多于80個,同時保證第0個塊肯定是好的,且保證擦寫1 000次不壞[1]。當(dāng)進(jìn)行連續(xù)地址的數(shù)據(jù)讀寫時有可能遇到壞塊,壞塊無法進(jìn)行操作,會導(dǎo)致數(shù)據(jù)的丟失。因此必須建立一個匹配表,當(dāng)遇到壞塊時,將其匹配到好塊的地址上。
實際的數(shù)據(jù)讀寫中只使用4 000個塊,根據(jù)這些要求設(shè)計了這樣的匹配表:長度512 B,存放在第0個塊的第0個頁(B0P0)。具體內(nèi)容見表2。
一個塊的地址用2 B的16進(jìn)制數(shù)表示。256 B可以存儲128個塊地址。0~255與256~512中存儲的塊地址是一一對應(yīng)的,當(dāng)使用到0~255中的塊地址時,需要從256~511中尋找對應(yīng)的塊地址進(jìn)行替換。
在FPGA中生成一個512 B的ram:ram_512,專門用于存放匹配表,當(dāng)系統(tǒng)上電復(fù)位后,狀態(tài)機會自動將B0P0的數(shù)據(jù)讀出,并將前512 B的數(shù)據(jù)存入該ram_512中,以便后面匹配時使用[4]。
2.2 全擦與部分擦指令
該指令用于擦除所有的塊,建立新的匹配表。由于壞塊會導(dǎo)致擦除不成功,狀態(tài)機在擦除過程中會記錄下1~4 000個塊中擦除失敗的壞塊的地址、4 000~4 095個塊中好塊的地址,先按照匹配表規(guī)定的順序?qū)懭雛am_512,全部擦除完成后將ram_512中的數(shù)據(jù)寫入B0P0。由于數(shù)據(jù)量不足2 KB,因此后面補零。其流程圖如圖2所示。
部分擦除與全擦類似,執(zhí)行這條指令需要給定起始與結(jié)尾的塊地址,controller_4G08可以完成對2個塊地址之間所有塊的擦除。當(dāng)擦除過程中擦到壞塊時,狀態(tài)機會從匹配表中尋找該壞塊對應(yīng)的好塊,并擦除。若沒有尋找到該壞塊的匹配塊,則出現(xiàn)了新的壞塊,會產(chǎn)生一個報錯的標(biāo)志位,提示主狀態(tài)機需要進(jìn)行全擦,以便建立新的匹配表。
評論