Nand Flash是flash存儲器的一種,其內部采用非線性宏單元模式,為固態大容量內存的實現提供了廉價有效的解決方案。Nand Flash存儲器具有容量較大,改寫速度快等優點,適用於大量數據的存儲,因而在業界得到了越來越廣泛的應用,如嵌入式產品中包括數碼相機、MP3隨身聽記憶卡、體積小巧的U盤等。NAND型閃存以塊為單位進行擦除操作。閃存的寫入操作必須在空白區域進行,如果目標區域已經有數據,必須先擦除後寫入,因此擦除操作是閃存的基本操作。
S3C2410的Nand Flash控制器有一個特殊的功能,在S3C2410上電後,NandFlash控制器會自動的把Nand Flash上的前4K數據搬移到4K內部SRAM中,並把0x00000000設置內部SRAM的起始地址,CPU從內部SRAM的0x00000000位置開始啟動。這個過程不需要程序干涉。
程序員需要完成的工作,是把最核心的啟動程序放在Nand Flash的前4K中。
啟動程序的安排
由於Nand Flash控制器從NandFlash中搬移到內部SRAM的代碼是有限的,所以在啟動代碼的前4K裡,我們必須完成S3C2410的核心配置以及把啟動代碼(U-BOOT)剩余部分搬到SDRAM中運行。
u-boot源碼不支持從nand flash啟動,可是s3c2410支持從nand flash啟動,開發板(sbc-2410x)加電後s3c2410將nand flash的前4k(保存有u-boot的部分功能--拷貝功能--把nand flash中的內容拷貝到SDRAM)拷貝到sram(s3c2410芯片內的sram)。這就需要修改u-boot源碼,增加u-boot的功能: 使u-boot在得到執行權後能夠將其自身拷貝到開發板上SDRAM中,以便處理器能夠執行u-boot。
* NOR FLASH地址線和數據線分開,來了地址和控制信號,數據就出來。
*NAND Flash地址線和數據線在一起,需要用程序來控制,才能出數據。通俗的說,就是光給地址不行,要先命令,再給地址,才能讀到NAND的數據。而且都是在一個總線完成的。
Nand Flash的命令、地址、數據都通過I/O口發送,管腳復用,這樣做做的好處是,可以明顯減少NAND FLASH的管腳數目,將來如果設計者想將NAND FLASH更換為更高密度、更大容量的,也不必改動電路板。