基于FPGA的NAND FLASH控制器
在便攜式電子產(chǎn)品如U盤、MP3播放器、數(shù)碼相機(jī)中,常常需要大容量、高密度的存儲(chǔ)器,而在各種存儲(chǔ)器中,NAND FLASH以價(jià)格低、密度高、效率高等優(yōu)勢(shì)成為最理想的器件。但NAND FLASH的控制邏輯比較復(fù)雜,對(duì)時(shí)序要求也十分嚴(yán)格,而且最重要的是NAND FLASH中允許存在一定的壞塊(壞塊在使用過程中還可能增加),這就給判斷壞塊、給壞塊做標(biāo)記和擦除等操作帶來很大的難度,于是就要求有一個(gè)控制器,使系統(tǒng)用戶能夠方便地使用NAND FLASH,為此提出了一種基于FPGA的NAND FLASH控制器的設(shè)計(jì)方法,并用VHDL給予實(shí)現(xiàn),Modelsim得出仿真結(jié)果,并在ALTERA公司的EP2C35F672器件中得到驗(yàn)證。FPGA與NAND FLASH接口圖如圖1所示。
2 NAND FLASH操作
NAND FLASH器件的管腳分為控制信號(hào)、I/O二類,地址和數(shù)據(jù)是復(fù)用I/O管腳。通常NAND FLASH器件包括一定數(shù)目BLOCK,每個(gè)BLOCK包括一定數(shù)目的PAGE,每個(gè)NAND FLASH器件把BLOCK,PAGE按照行列地址進(jìn)行尋址,基于這種特殊的結(jié)構(gòu)。
2.1 READ ID
NAND FLASH器件ID包括:Manufacture ID,device ID以及容量大小,這些重要的信息是判斷NAND FLASH的重要憑證,因此將這些信息讀出來加以判斷就顯得特別重要。在CLE為高,WE#上升沿,在I/O輸入90H命令讓NAND FLASH進(jìn)入讀ID狀態(tài),接著在ALE為高,WE#上升沿,在I/O輸入00H地址,在等待tWHR將RE#置為讀,在RE#連續(xù)4個(gè)上升沿將ID讀出。仿真圖如圖2所示。
2.2 判斷壞塊
NAND FLASH作為一種特殊的儲(chǔ)存器件,內(nèi)部集成電路使得BLOCK與BLOCK是相互獨(dú)立的,因此一定數(shù)目壞塊的存在不會(huì)影響其他BLOCK。但壞塊總數(shù)是有一定的限制的,超過一定的數(shù)目后器件將認(rèn)為不能再使用。在出廠前廠家會(huì)在器件的每個(gè)BLOCK的第一頁(yè)和第二頁(yè)的列地址為2048標(biāo)注上壞的信息,F(xiàn)Fh代表此BLOCK是好,非FFh代表此BLOCK是壞。但是這些重要信息在執(zhí)行Erase和Programming命令的時(shí)候會(huì)被擦除掉,因此,我們?cè)谧鲞@些操作之前應(yīng)該將壞塊識(shí)別出來如圖3所示,并加以標(biāo)注或者用好的塊來代替,以方便以后的訪問。隨著使用時(shí)間的推移,壞塊的數(shù)目還會(huì)增加,因此我們必須隨時(shí)更新壞塊鏈表。壞塊識(shí)別時(shí)序仿真圖如圖4所示。
3擦除操作
一般芯片進(jìn)行PROGRAM/ERASE的次數(shù)是100 000 cycles,第一個(gè)BLOCK次數(shù)更多,一般可用于存放boot code或者重要的信息。由于擦除操作是以BLOCK為基準(zhǔn),也就是每執(zhí)行一次擦除操作將會(huì)擦除指定的BLOCK,所以在執(zhí)行擦除時(shí)必須注意共享區(qū)域里的重要信息如壞塊標(biāo)識(shí)、ECC校驗(yàn)等。以免被擦除掉,擦除掉了及時(shí)恢復(fù),擦除操作仿真如圖5所示。
4編程操作及其他操作
編程操作和擦除操作相似,只不過編程操作是以頁(yè)為單位,在執(zhí)行編程操作時(shí)同樣也要注意共享區(qū)域里的重要信息以免被覆蓋掉,重要信息被覆蓋后要及時(shí)恢復(fù)。其他操作如復(fù)位還有有些芯片廠家各自新的操作等,但總體來說主流芯片都支持以上幾種操作。
5 結(jié) 語(yǔ)
在實(shí)際應(yīng)用中,使用ALTERA公司的Cyclone2 FP-GA器件進(jìn)行設(shè)計(jì),設(shè)計(jì)輸入采用VHDL來完成,實(shí)現(xiàn)了上述的NAND FLASH控制器接口電路。此外,由于采用了通用性設(shè)計(jì)思想,可以對(duì)不同廠家不同的芯片進(jìn)行控制和操作,具有一定的通用性
評(píng)論