一段程序引發的思考:
在FS2410開發板上,有NAND FLASH 和NORFLASH ,兩片FLASH各有各的特點和區別:
1. NOR 價格比NAND 要貴。
2. NOR 在讀的時候很快, NAND讀的時候很慢。
3. NOR 在寫的時候比NAND稍快。
4. NOR 在出廠是是沒有壞塊的,而NAND 在出廠時允許有壞塊。
5. NAND 擦寫壽命是NOR 的十倍,NAND 擦寫次數可達10萬次
6.另外NOR 和RAM 的接口相同,NAND 是I/O接口。NOR 支持XIP ,及代碼可以直接在NOR 上執行,無需複製到內存中,NAND 沒有這種特性。
7.NOR 可以隨機訪問,NAND 順序訪問
在FC2410開發板上用的型號是K9F1208UOM 的NAND FLASH 它的大小是64M。
在u-boot-1.3.1內核中 NAND FLASH 初始化代碼如下:
.equ SDRAM_BASE, 0x30000000
@ reset NAND
mov r1, #NAND_CTL_BASE
ldr r2, =0xf830 @ initial value
str r2, [r1, #oNFCONF]
ldr r2, [r1, #oNFCONF]
bic r2, r2, #0x800 @ enable chip
str r2, [r1, #oNFCONF]
mov r2, #0xff @ RESET command
strb r2, [r1, #oNFCMD]
mov r3, #0 @ wait
nand1:
add r3, r3, #0x1
cmp r3, #0xa
blt nand1
nand2:
ldr r2, [r1, #oNFSTAT] @ wait ready
tst r2, #0x1
beq nand2
ldr r2, [r1, #oNFCONF]
orr r2, r2, #0x800 @ disable chip
str r2, [r1, #oNFCONF]
S3C2410支持從Nand FLASH 啓動,系統上電啓動後,通過Rom code檢查是否從NAND FLASH 啓動,如果是就將NAND 前4k數據搬移到4k的SRAM ,並把0x00000000設置內部SRAM的起始地址,CPU從內部SRAM 的0x00000000位置開始啓動,這個過程不需要程序干涉。
程序員需要完成的工作,是把最核心的啓動程序放在NAND FLASH 的前4k中。由於NAND FLASH 控制器從NAND FLASH 中搬移到內部SRAM的代碼是有限的,所以在啓動代碼的前4k裏。在這4k要完成的任務簡單列舉如下:
1. 關閉看門狗。
2. PLL倍頻選擇。
3. 加載NAND FLASH驅動
4. SDRAM 初始化。