S3C2440如何从NAND FLASH中启动
S3C2440可以配置从NOR FLASH中启动,也可以配置成从NAND
FLASH中启动,从NOR FLASH中启动比较好理解,因为NOR FLASH和RAM一样可以通过总线访问,cpu可以直接执行NOR FLASH中的程序,但是CPU不能直接通过总线访问到NAND FLASH中的程序,要从NAND FLASH中启动就要做些工作了。S3C2440的解决办法是在芯片内置了4k的RAM,叫做Steppingstone,在启动代码执行前先将NAND FLASH中的数据自动的复制到Steppingstone中去,然后CPU再从Steppingstone中执行启动代码。
这里就有一个问题,在CPU没有执行任何启动代码之前,CPU是怎么知道NAND FLASH是如何驱动的?大家都知道要驱动某种控制器,必须在该控制器的相关寄存器设置一些参数的,控制器根据相关参数才能驱动外围电路,这需要CPU执行相关代码。但是将NAND
FLASH中的数据自动的复制到Steppingstone中这一过程显然是在CPU执行任何代码之前就已经完成了。NAND FLASH控制器是怎么得到相关参数的?
其实,这些参数是通过管脚配置的形式让NAND FLASH控制器得到的,在S3C2440上电后,NAND FLASH控制器通过某些管脚的状态来获取相关参数,再根据这些参数来控制NAND FLASH从中读取4k的内容移动到Steppingstone中去。这些管脚分别是NCON、GPG13、GPG14、GPG15。
各管脚的含义如下:
NCON: NAND flash 类型选择
低电平:小页FLASH
高电平:大页FLASH
GPG13: NAND flash 页容量选择
低电平:一页大小为256字(NCON 为低) 或者 一页大小为1K字(NCON 为高)
高电平:一页大小为512字(NCON 为低) 或者 一页大小为2K字节(NCON 为高)
GPG14: NAND flash 寻址周期
低电平:寻址周期为3(NCON 为低) 或者 寻址周期为4 (NCON 为高)
高电平:寻址周期为4(NCON 为低) 或者 寻址周期为5 (NCON 为高)
GPG15: NAND flash 总线宽度选择
低电平:8位线宽
高电平:16位线宽
最后,要注意在自动将NAND FLASH开始4k的内容移动到Steppingstone的过程中是没有数据校验的,因此NAND FLASH开始4k的内容不能有位错误。
-------------------------------------------------------------------------------------------------------------------------------------------------------
s3c2440首先从nand flash中读取前4K字节的程序到其内部自带的4K字节的sram中,然后,再从此ram中开始执行此程序。在此程序中要完成的最重要的任务是初始化SDRAM和nand flash读写控制器,然后把nand flash中的完整程序复制到sdram,接下来,跳转到sdram中,执行完整的程序,由此完成启动任务。