一段程序引发的思考:
在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 初始化。