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 高电平:大页FLASHGPG13: 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的内容不能有位错误。
转自:http://ghmcu.blog.163.com/blog/static/1748295012010101761132669/