=====================================================================================
接上:《micro2440开发》第一章:S3C2440A地址空间
ARM是不能直接从NAND FLASH启动的,这包括两层意思:
其一、ARM刚启动时不能直接获得NAND FLASH上存储的程序;因为对NAND FLASH的读(写)操作需要软件时序。
其二、ARM不能在NAND FLASH上执行程序;因为NAND FLASH是顺序存储设备、不能被随机访问,程序就不能分支或跳转、这样没法设计程序。
更深层次的分析以上原因:
一、为什么ARM刚启动时不能直接获得NAND FLASH上存储的程序?
因为NAND FLASH是挂在NAND FLASH控制器(NAND FLASH控制器挂在ARM系统总线)上的,它不像NOR FLASH直接挂在ARM系统总线上(地址线和数据线分开,来了地址和控制信号,数据就出来);NAND FLASH地址线和数据线在一起、需要程序来控制、才能出数据。
通俗地说:NAND FLASH的读写时序是不能直接由ARM硬件产生的,要读写NAND FLASH是要通过程序来实现;要先命令(说明此时传的是地址)、在给地址,最后给命令(说明此时传的是数据)、才能读到NAND的数据。
结论:ARM无法从NAND直接启动。除非装载完程序(也就是NAND FLASH控制器的相关操作程序),通过命令控制NAND FLASH地址和数据复用总线后;才能使用NAND FLASH。
二、为什么ARM不能在NAND FLASH上执行程序?
原因很简单;因为NAND FLASH是顺序存储设备。=====================================================================================
解决方案有两种:
其一、板子有NOR FLASH的情况;将bootloader烧录至NOR FLASH,然后从NOR FLASH启动、利用bootloader(bootloader完成了对NAND FLASH控制器的相关软件时序的设置,这时就可以操作NAND FLASH)将boot及kernel烧录至NAND FLASH。
其二、板子没有NOR FLASH的情况;将bootlader先放置内存SDRAM、然后执行bootloader(这时也完成了NAND FLASH控制器的相关软件时序设置)将boot及kernel烧录至NAND FLASH。
第一种方法现在用的比较多;第二种方法很少有人使用。
上述两种方法只是解决了烧录问题;我们来分析从NAND FLASH的启动过程。
最重要理解的一点是:从NAND FLASH启动的CPU(NAND FLASH控制器)都有一个特殊功能,即在CPU上电后、NAND FLASH控制器会自动地把NAND FLASH上的前4K数据搬移到SRAM中。这个过程不需要程序干涉。=====================================================================================
最后需要说明的是:上述SRAM只有4KB,所以NAND FLASH的启动会比NOR FLASH的启动复杂一些。把NAND FLASH中bootloader的前4KB拷贝至SRAM后,这4KB还需完成将剩余部分拷贝至SDRAM并跳转执行。
=====================================================================================