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